安全地向多个服务主机提供相同的服务实例
本文关键字:服务 实例 主机 安全 | 更新日期: 2023-09-27 17:56:57
假设我有如下服务
[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);
...
在现有代码库中,此服务仅从单个服务主机使用。然而,ConcurrencyMode
是Multiple
的,即
服务实例是多线程的。不作同步保证。由于其他线程可以随时更改您的服务对象,因此您必须始终处理同步和状态一致性。正在使用
这意味着它已经必须是线程安全的,从线程安全的角度来看,将其提供给多个服务主机看起来不错。
还有其他异议吗?
只要不保留任何在服务生存期内更改服务的变量,就没有问题。