说我有以下服务
[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中使用。但是,ConcurrencyMode
是Multiple
,即
服务实例是多线程的。没有同步保证。由于其他线程可以随时更改您的服务对象,因此您必须始终处理同步和状态一致性。正在使用
意味着它必须是线程安全的,并且从线程安全角度来看,将它提供给多个ServiceHosts看起来很好。
还有其他异议吗?
答案 0 :(得分:1)
只要您不保留任何在其生命周期内改变服务状态的变量,就没有问题。