首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在多线程Web服务中正确使用ServiceBehaviorAttribute.InstanceContextMode?

如何在多线程Web服务中正确使用ServiceBehaviorAttribute.InstanceContextMode?
EN

Stack Overflow用户
提问于 2014-09-25 13:44:53
回答 1查看 1.5K关注 0票数 1

我有ConcurrencyMode.Multiple和InstanceContextmode.PerSession,但是我不理解后者。

在我的申请中,我确实喜欢这样:

代码语言:javascript
复制
ServiceHost host = new ServiceHost(typeof(MyService), baseAddress);

http://msdn.microsoft.com/en-us/library/system.servicemodel.instancecontextmode(v=vs.110).aspx

告诉我们“对于单例生命周期行为(例如,如果主机应用程序调用ServiceHost构造函数并传递一个对象作为服务使用),服务类必须将InstanceContextMode设置为InstanceContextMode.Single,或者在打开服务主机时抛出异常。”

这不是我在做的吗?它工作得很好,而且是多线程的。如果有人能解释我的PerSession和PerCall值,我会非常感激的。会议不也是个电话吗?

EN

回答 1

Stack Overflow用户

发布于 2016-11-22 08:50:06

当您将服务类类型作为参数传递时,您期望按需创建该类的实例(当接收到客户端调用时)。因此,您不能自己控制服务实例的生存期。有两种实例:

PerCall:为每个客户端请求创建一个新的InstanceContext (因此也是服务对象)。 PerSession:为每个新的客户端会话创建一个新的InstanceContext (因此也是服务对象),并在该会话的生存期内进行维护(这需要支持会话的绑定)。

如果要控制实例本身,则必须初始化类并将对象作为参数传递给ServiceHost构造函数。这被称为“单一”实例模式:

:一个InstanceContext (因此是服务对象)在应用程序的生存期内处理所有客户端请求。

在这种情况下,您必须在服务类中将ServiceBehaviorAttribute.InstanceContextMode属性设置为单项:

代码语言:javascript
复制
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class MyService : IMyService
{
    public void SomeMethodHere(parm) {}
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26040210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档