2013-07-20 55 views
-1

您知道如何向您的客户端添加服务引用,然后创建这个不错的代理,以便您可以在服务器端调用方法?事情是这样的:关于WCF代理会话的问题

MyServiceClient proxy = new MyServiceClient(); 
proxy.GetMessage(); 

我有一个关于刚刚发生了什么几个问题:

  1. 当与服务器的会话建立的?当我添加服务参考?当我创建代理?或者当我调用该方法?

  2. 如果我将创建另一个MyServiceClient实例它将是我们之前创建的实例(代理)的单例副本,还是完全是一个新实例?

+0

Visual Studio连接到服务,获取其元数据(描述),并从中产生代理类。没有涉及的会话。默认情况下,客户端类只是普通类 - 您可以随意实例化任意数量的副本 - 在任何地方都不会看到单例。 –

回答

0

默认情况下没有'会话'。当您拨打服务电话时会建立一个新的连接,并且仅在收到响应之前持续。如果要分组多个呼叫(以确保它们使用相同的实例并依次执行处理),则需要在服务合同上使用SessionMode属性,这会影响代理客户端的行为方式。

+0

因此,如果没有会话PerCall上下文模式和PerSession(当doe的服务器实例在PerSession上下文模式下创建/删除时有什么区别?) – RiskX

+1

至于PerCall和PerSession之间的区别,这是另一个帖子http上的类似问题://stackoverflow.com/questions/15104960/persession-vs-percall – otaku

0

会话建立。这是可选的 - WCF中的默认值是没有会话。 一般来说,如果您创建一个新的代理,那么它是完全独立于以前的代理。也有一些例外:

  • 你可以强迫你的代理服务器使用相同的会话(例如,如果你给他们共享令牌的共同客户的安全行为)
  • 服务器可以决定它把所有的请求属于到同一个会话(PerHost实例化),在这种情况下,所有请求(来自所有代理,而不仅仅是机器上的那些请求)将落在相同的服务器上下文中。