0

我在 IIS 中托管了 WCF WebService,其中InstanceMode = PerSessionConcurrencyMode = Single。我从 Java Servlet 调用这个 wcf 服务并按顺序发送请求(到目前为止一切顺利)。

现在,当我通过 IE/Chrome/Firefox 等访问它时,它应该只在我打开的一个客户端窗口的 WCF 服务实例上创建,但 IIS 正在创建它的多个实例,这需要很长时间才能实例化,因为我的服务是内部连接到遗留系统。

还是我完全误解了客户会话?WCF 客户端会话是什么意思?谁定义了它的边界,我可以从我的网络应用程序代码中规定它的边界吗?

4

2 回答 2

2

WCF 中的会话由客户端通过打开通道启动,并在该通道关闭或出现故障时关闭。因此,如果您在服务上看到多个实例(但是,不确定您是如何确认有多个实例的),那是因为有多个连接/通道打开了服务。

这是可能有帮助的 MSDN 文章。粘贴相关摘录, http: //msdn.microsoft.com/en-us/library/ms733040.aspx

WCF 会话具有以下主要概念特征: • 它们由调用应用程序(WCF 客户端)显式启动和终止。

• 会话期间传递的消息按接收顺序进行处理。

• 会话将一组消息关联到一个会话中。不同类型的相关性是可能的。例如,一个基于会话的通道可以基于共享的网络连接关联消息,而另一个基于会话的通道可以基于消息正文中的共享标签关联消息。可以从会话派生的特征取决于相关性的性质。

• 没有与 WCF 会话关联的常规数据存储。

HTH,阿米特·巴蒂亚

于 2013-05-31T15:21:11.800 回答
1

你可能会发现关于代码项目的文章对这个问题很有用这里

会话对我们所有人来说是一个很好理解的术语,并且根据我们的共同理解,它是(嗯,更少或更多)实体相互识别的一段时间。我们中的一些人可能也在 ASP.NET 中使用过它。这个概念在 WCF 中几乎相似,尽管技术和用法有些不同。

在 WCF 中,总是有一个服务类实例来处理传入的服务请求。这些实例可能已经存在(当请求到达时在服务器上)或者可以根据需要创建。在 WCF 中,会话的概念主要是管理这些服务实例,以便以优化的方式利用服务器。在服务器上,有一个名为 InstanceContext 的特殊类,它创建/加载服务类实例并将请求分派给它。相关性可以理解为:

你可以在这里看到事情是如何参与的。当一些请求到达时,它通过实例上下文被路由到服务实例。假设有一千个请求,那么服务将不得不创建一千个实例上下文(这反过来又会创建一千个服务实例)来处理这些请求。如果以这种方式处理请求,则服务称为 PERCALL 服务,因为每个请求都由新的实例上下文和服务实例对象提供服务(以后将它们称为服务对象)。假设有一个客户端发出了 100 个请求。如果服务识别此客户端并始终通过专用服务对象为其提供服务,则此类服务将被称为 PERSESSION 服务,因为它识别客户端并通过服务对象的单个实例为其提供服务。另一方面,如果所有请求(无论客户端如何)都由服务对象的单个实例提供服务,则该服务将被称为 SINGLETON 服务。下面的图片总结了这个概念:上面的链接会有更多的信息。

于 2013-05-31T14:36:51.457 回答