【问题标题】:Safe to provide same service instance to multiple ServiceHosts?向多个 ServiceHost 提供相同的服务实例是否安全?
【发布时间】: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 中使用。但是,ConcurrencyModeMultiple,即

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

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

还有其他异议吗?

【问题讨论】:

    标签: c# .net wcf servicehost


    【解决方案1】:

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

    【讨论】:

    • 你以前做过吗,或者ServiceHost的工作方式有什么让你认为这没问题,你可以详细说明一下,这样我就不必依赖了相信你的话?
    • 我们正在为桥接服务做类似的事情。基本上它有一个绑定到多个协议的服务。每当客户端调用服务方法时,数据只是放在另一条总线上。每次调用都会实例化用于将数据放在总线上的对象。因为调用之间没有信息共享,所以没有问题。
    • +1 感谢您分享您的经验。有用 - 也是必要的,除非并且直到你的业力接近Chuck Norris 并且你的话就足够了;)
    猜你喜欢
    • 1970-01-01
    • 2018-03-03
    • 2021-07-10
    • 2020-11-20
    • 2019-11-11
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    相关资源
    最近更新 更多