针对WCF的Per-Call / Singleton混合解决方案

时间:2014-06-10 16:30:01

标签: c# web-services wcf session

我有一些我想要共享的WCF服务组件;但是我希望服务在每个会话的基础上运行(如果一个会话创建一个异常,为其余的调用者打破它)

现在我的服务合同配置为;

[ServiceBehavior(
    ConcurrencyMode = ConcurrencyMode.Multiple,
    InstanceContextMode = InstanceContextMode.Single
)]

如果我有像Loggers这样的线程安全的单例组件,我希望通过所有会话共享;如何在前面(最好是每个会话)创建一个非单一实例的WCF,但是具有单个实例的后端组件(如日志记录,数据访问等)。

1 个答案:

答案 0 :(得分:0)

如果您已经使用了一些依赖注入框架 - 让它控制 对象的生命周期。使用注册记录器和数据库访问对象 单实例生命周期范围,并在每次调用时解析您的wcf服务 - 你每次都会获得相同的实例。

如果您手动控制对象的生命周期 - 设计 记录器和数据库访问对象作为单例(或创建一些父单例服务), 并在wcf服务中访问其实例。在这种情况下,请小心避免服务定位器反模式。

两种情况下的WCF服务本身都可以配置为InstanceContextMode.PerCall或PerSession。