我开发了一个VB.NET WCF服务,可以重新发送和发回数据。当第一个客户端连接时,它会启动数据输出,如果客户端关闭,它也会继续。如果新客户端连接,则创建新对象,数据输出从begninning开始,并与旧实例并行继续。有没有办法从多个客户端读取相同的服务对象?
该服务是自托管的。
更新:我解决了将以下代码添加到服务类的问题:
<ServiceBehavior(ConcurrencyMode:=ConcurrencyMode.Multiple,
InstanceContextMode:=InstanceContextMode.Single)>
...
要使用接受SingletonInstance的ServiceHost重载,必须使用适当的ServiceBehaviours标记服务。
答案 0 :(得分:2)
如果您是自托管服务,则可以使用ServiceHost构造函数重载,该重载使用服务实例而不是服务类型。所有客户端都将连接到同一个服务实例。
如果您在IIS中托管,则无法控制服务实例。更糟糕的是,您无法控制流程生命周期。因此,如果你想要一个signleton,你必须拥有自己的进程并让服务实例连接到它。
更新:正如@jezell指出的那样,通过InstanceContextMode可以控制IIS中服务的实例化。但是,仍然无法控制IIS进程。
答案 1 :(得分:2)
我在这里讨论选项:
http://www.iserviceoriented.com/blog/post/Configuring+Performance+Options+-+WCF+Gotcha+3.aspx
首先,您有InstanceContextMode,它可以是Single,PerCall或PerSession。这可以控制如何创建服务类的新实例。
除此之外,限制和并发设置对于查看非常重要,因为将实例上下文模式设置为单个而不将并发模式更改为多个可能会产生严重的负面后果。请查看帖子以获得更详细的讨论。