WCF服务工作线程与ServiceHost线程通信

时间:2010-03-17 17:48:58

标签: wcf multithreading communication servicehost

我有一个打开ServiceHost对象的Windows NT服务。服务主机上下文是每个会话,因此为每个客户端创建一个新的工作线程。我想要做的是让每个工作线程调用启动服务主机的线程。 NT服务需要打开VPN连接并从远程网络上的设备轮询信息。信息存储在SQL数据库中供工作线程读取。如果连接了客户端,我只想轮询设备,这将减少网络流量。我希望工作线程告诉服务主机线程他们正在请求信息并开始轮询和更新数据库。如果设备总是被轮询并且数据库正在更新,那么一切正常。

2 个答案:

答案 0 :(得分:1)

为什么不在服务创建后实现singleton并初始化此属性。之后你总是可以参考它。

private static MyService m_ServiceInstance;

public static MyService ServiceInstance
{
    get { return m_ServiceInstance; }
}

答案 1 :(得分:0)

我建议打开一个VPN连接的代码,并将信息轮询到自己的单例服务中,并使用相同(或不同的)Windows NT服务托管它。面向客户的服务使用WCF调用VPN服务。 VPN服务仅在面向客户的服务正在“监听”时进行轮询。

这有几个好处:

  • WCF将负责创建服务实例和管理线程的复杂性。 (在单身内你可能仍然需要实现锁定,但就是这样。)
  • VPN轮询服务不再与面向客户的服务紧密耦合。这为您提供了部署灵活性和将来支持新用例的能力。