我在IIS中托管了WCF WebService,其中 InstanceMode = PerSession 和 ConcurrencyMode = Single 。我从Java Servlet调用这个wcf服务并按顺序发送请求(到目前为止一直很好)。
现在当我通过IE / Chrome / Firefox等访问它时,它应该只是在我的WCF服务的实例上为我打开的一个客户端窗口创建但是IIS正在创建它的多个实例,这需要很长时间来实例化为我的服务内部连接到遗留系统。
或者我是否完全误解了客户端会话? WCF客户端会话是什么意思?谁定义了它的边界,我可以从我的网络应用程序代码中指定它的边界吗?
答案 0 :(得分:2)
WCF中的会话由客户通过开放渠道发起,并在该渠道因故障而关闭后关闭。所以,如果您在服务上看到多个实例(但是,不确定您是如何确认有多个实例的话),那是因为有多个连接/渠道已开通服务。
这是可能有用的MSDN文章。从中汲取相关摘录, http://msdn.microsoft.com/en-us/library/ms733040.aspx
WCF会话具有以下主要概念特征: •它们由调用应用程序(WCF客户端)显式启动和终止。
•会话期间发送的消息按接收顺序处理。
•会话将一组消息关联到对话中。不同类型的相关是可能的。例如,一个基于会话的信道可以基于共享网络连接来关联消息,而另一个基于会话的信道可以基于消息主体中的共享标签来关联消息。可以从会话中获得的特征取决于相关性的性质。
•没有与WCF会话关联的常规数据存储。
HTH, 阿米特巴蒂亚
答案 1 :(得分:1)
您可能会发现关于代码项目的文章对此问题有用Here
会话对于我们所有人来说都是一个很好理解的术语,并且根据我们的共同理解,会话(实际上,更少或更多)实体相互认可的持续时间。我们中的一些人也可能在ASP.NET中玩过它。这个概念在WCF中几乎相似,尽管技术和用法有点不同。
在WCF中,始终存在一个处理传入服务请求的服务类实例。这些实例可能已经存在(在请求到达时在服务器上)或者可以根据需要创建。在WCF中,会话的概念主要是管理这些服务实例,以便以优化的方式使用服务器。在服务器上,有一个名为InstanceContext的特殊类,它创建/加载服务类实例并向其发送请求。相关性可以被视为:
你可以在这里看到东西是如何投入的。当某个请求到达时,它将通过实例上下文路由到服务实例。假设存在数千个请求,那么服务将必须创建数千个实例上下文(这反过来将创建数千个服务实例)来处理这些请求。如果以这种方式提供请求,则服务称为PERCALL服务,因为每个请求都由新的实例上下文和服务实例对象提供服务(之后将它们称为服务对象)。考虑有一个客户端发出了100个请求。如果服务识别此客户端并始终由专用服务对象提供服务,则此类服务将被称为PERSESSION服务,因为它识别客户端并由单个服务对象实例提供服务。另一方面,如果与客户端无关的所有请求都由单个服务对象实例提供服务,则该服务将被称为SINGLETON服务。以下图片总结了这一概念:上面的链接将有更多信息。