繁体   English   中英

在C#和WCF中的线程之间共享对象

[英]Sharing objects between threads in C# and WCF

我有一个公开SOAP WCF服务端点的服务器。 此服务器还使用名为Ensemble的组通信框架(与问题无关),以便与同一群集中的其他服务器进行通信。

我需要在监听来自其他服务器的传入消息的单独线程和调用它们时运行WCF例程的线程之间共享对象/数据。 到目前为止,我做了我能想到的最简单的事情 - 我创建了一个静态“数据库”类,其中包含静态成员和静态方法 - 并使用lock()进行同步。 这样我就可以从服务器和组通信线程访问这个类。 我的问题是它有点打破了整个“OOP的事情”,我觉得这里可以做一些更聪明的事......

如果您对解决方案的唯一问题是其所谓的“非OOP-edness”,那么您可以改为使用Singleton模式 对于必须具有需要在系统的多个部分之间共享的类的单个实例的情况,这是一种广泛使用的模式。 这种模式仍然存在争议,因为有些人认为它是全球变量的美化版本,但它在完成工作方面是有效的。

封装单独的线程,该线程侦听来自其他服务器的传入消息到一个类说MyCustomService。

编写WCF服务实现类,其行为为concurrencyMode multiple和I​​nstanceContextMode Single

在WCF服务实现类中编写事件delagate。 委托将返回MyCustomService类的类型。

当您以编程方式实例化WCF服务时(host.Open),在此之前将委托设置为将返回MyCustomService实例的函数,该实例可以是单例或静态的。

从服务实例类中,您始终可以调用委托来获取MyCustomService实例。 检查是否为null。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM