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

在C#和WCF中的线程之间共享对象,c#,multithreading,wcf,oop,C#,Multithreading,Wcf,Oop,我有一个公开SOAP WCF服务端点的服务器。该服务器还使用一个名为Ensemble(与问题无关)的组通信框架,以便与同一集群中的其他服务器通信 我需要在侦听来自其他服务器的传入消息的独立线程和调用WCF例程时运行WCF例程的线程之间共享对象/数据。到目前为止,我做了我能想到的最简单的事情——我创建了一个包含静态成员和静态方法的静态“数据库”类——并使用lock()进行同步。这样,我就可以从服务器和组通信线程访问这个类。我的问题是,它有点打破了整个“OOP”的东西,我认为这里可以做一些更聪明的事

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


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

如果您的解决方案唯一的问题是所谓的“不面向对象”,那么您可以改为使用。这是一种广泛使用的模式,适用于必须在系统的多个部分之间共享一个类的单个实例,否则这些部分将断开连接。该模式仍有一些争议,因为有些人认为它是全局变量的美化版本,但它能有效地完成任务。

将侦听来自其他服务器的传入消息的独立线程封装到一个类中,例如MyCustomService

编写行为为concurrencyMode multiple和InstanceContextMode Single的WCF服务实现类

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

在以编程方式实例化WCF服务(host.Open)之前,请将委托设置为一个函数,该函数将返回MyCustomService实例,该实例可以是单例实例,也可以是静态实例


从服务实例类中,您始终可以调用委托以获取MyCustomService实例。检查空值。

追求OOP本身不应该是一个目标。它是如何打破“OOP的东西”的?OOP没有提到任何关于线程和跨线程共享对象的内容。