安全地为多个ServiceHosts提供相同的服务实例?

时间:2014-04-07 05:17:48

标签: c# .net wcf servicehost

说我有以下服务

[ServiceBehavior(
    InstanceContextMode = InstanceContextMode.Single,
    ConcurrencyMode = ConcurrencyMode.Multiple
)]
class MyService { ... }

然后可以向多个ServiceHost提供单个实例吗?像:

var serviceInstance = new MyService();
var host1 = new ServiceHost(serviceInstance);
host1.AddServiceEndpoint(...);
var host2 = new ServiceHost(serviceInstance);
...

在现有代码库中,此服务仅在单个ServiceHost中使用。但是,ConcurrencyModeMultiple,即

  

服务实例是多线程的。没有同步保证。由于其他线程可以随时更改您的服务对象,因此您必须始终处理同步和状态一致性。正在使用

意味着它必须是线程安全的,并且从线程安全角度来看,将它提供给多个ServiceHosts看起来很好。

还有其他异议吗?

1 个答案:

答案 0 :(得分:1)

只要您不保留任何在其生命周期内改变服务状态的变量,就没有问题。