【发布时间】:2014-04-07 13:33:22
【问题描述】:
假设我有如下服务
[ServiceBehavior(
InstanceContextMode = InstanceContextMode.Single,
ConcurrencyMode = ConcurrencyMode.Multiple
)]
class MyService { ... }
那么可以为多个ServiceHosts 提供一个实例吗?喜欢:
var serviceInstance = new MyService();
var host1 = new ServiceHost(serviceInstance);
host1.AddServiceEndpoint(...);
var host2 = new ServiceHost(serviceInstance);
...
在现有代码库中,此服务仅在单个 ServiceHost 中使用。但是,ConcurrencyMode 是Multiple,即
服务实例是多线程的。没有同步保证。因为其他线程可以随时更改您的服务对象,所以您必须始终处理同步和状态一致性。正在使用
意味着它必须是线程安全的,并且从线程安全的角度来看,将其提供给多个 ServiceHost 看起来不错。
还有其他异议吗?
【问题讨论】:
标签: c# .net wcf servicehost