安全地向多个服务主机提供相同的服务实例

本文关键字:服务 实例 主机 安全 | 更新日期: 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);
...

在现有代码库中,此服务仅从单个服务主机使用。然而,ConcurrencyModeMultiple的,即

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

这意味着它已经必须是线程安全的,从线程安全的角度来看,将其提供给多个服务主机看起来不错。

还有其他异议吗?

安全地向多个服务主机提供相同的服务实例

只要不保留任何在服务生存期内更改服务的变量,就没有问题。