UWP中的WCF:我应该明确调用服务客户端(代理)的openasync()



我正在开发一个UWP客户端项目,该项目需要消费WCF服务器的某些服务。我使用Visual Studio的"添加服务参考"工具自动生成服务客户端(代理(。绑定类型为NetTcpBinding。以下是一些创建服务客户端的代码段:

    NetTcpBinding tcpBinding = new NetTcpBinding();
    tcpBinding.Security.Mode = SecurityMode.None;
    tcpBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.None;
    tcpBinding.Security.Message.ClientCredentialType = MessageCredentialType.None;
    MainServiceClient = new MainServiceClient(tcpBinding, new EndpointAddress("net.tcp://localhost:8773/MyWCF/MainService/tcp"));

问题是我需要调用MainserviceClient的OpenAsync()方法吗?似乎在首次调用服务客户端时可以自动打开服务客户端。但是我从这篇文章中读到,自动开放的服务客户将受到一些绩效罚款。该文章是在2007年撰写的。我只是想知道这种机制今天是否发生了变化,尤其是在UWP项目中。谁能对此主题分享更多的启示?谢谢!

要解释这种情况,您应该知道三种方法进行WCF实例管理。WCF提供了三种方法,您可以控制WCF服务实例:每个呼叫,每个会话,单个实例。

当我们根据呼叫配置WCF服务时,将为您通过WCF代理客户端进行的每个方法创建新的服务实例。

通常,我们需要在方法调用之间或特定会话之间维护状态。对于这种情况,我们需要每个会话配置服务。在每个会话中,仅为会话交互创建一个WCF服务对象的实例。

通常,我们想为所有WCF客户端创建一个全局WCF实例。要创建WCF服务的单个实例,我们需要将WCF服务配置为单个实例模式。

,您可以通过三种方式来处理WCF中的每个服务实例的并发。

单人:单个请求可以在给定时间时刻访问WCF服务对象。因此,在任何给定时间时刻将仅处理一个请求。其他请求必须等到WCF服务处理的请求完成。

多重:在这种情况下,WCF服务对象可以在任何给定时间时刻处理多个请求。换句话说,通过在WCF服务器对象上产生多个线程的同时处理请求。因此,您在这里有很棒的吞吐量,但是您需要确保与WCF服务器对象有关的并发问题。

重新进入:单个请求线程可以访问WCF服务对象,但是该线程可以退出WCF服务以调用另一个WCF服务,或者也可以通过回调和Reenter拨打WCF客户端,而无需僵局。

>

in实例模式=每个会话和同意= single;组合,为每个WCF客户端会话创建一个WCF服务实例,因为WCF实例模式设置为每个会话。所有方法均以一个顺序执行。换句话说,对于特定服务实例的所有方法都只有一个线程。

对于上述情况,您应始终在拨打任何呼叫之前明确打开WCF客户端代理。因为它将在方法呼叫之间保持服务状态并获得高性能。

有关更多详细信息,您可以参考" WCF并发(单,多重和重点(和节流"。和"做WCF实例管理的三种方法"。

最新更新