我有ConcurrencyMode.Multiple和InstanceContextmode.PerSession,但是我不理解后者。
在我的申请中,我确实喜欢这样:
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值,我会非常感激的。会议不也是个电话吗?
发布于 2016-11-22 08:50:06
当您将服务类类型作为参数传递时,您期望按需创建该类的实例(当接收到客户端调用时)。因此,您不能自己控制服务实例的生存期。有两种实例:
PerCall:为每个客户端请求创建一个新的InstanceContext (因此也是服务对象)。 PerSession:为每个新的客户端会话创建一个新的InstanceContext (因此也是服务对象),并在该会话的生存期内进行维护(这需要支持会话的绑定)。
如果要控制实例本身,则必须初始化类并将对象作为参数传递给ServiceHost构造函数。这被称为“单一”实例模式:
单:一个InstanceContext (因此是服务对象)在应用程序的生存期内处理所有客户端请求。
在这种情况下,您必须在服务类中将ServiceBehaviorAttribute.InstanceContextMode属性设置为单项:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class MyService : IMyService
{
public void SomeMethodHere(parm) {}
}https://stackoverflow.com/questions/26040210
复制相似问题