2

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

4

2 回答 2

1

为什么不在服务创建后实现单例并初始化此属性。之后,您可以随时参考它。

private static MyService m_ServiceInstance;

public static MyService ServiceInstance
{
    get { return m_ServiceInstance; }
}
于 2011-05-16T01:43:52.333 回答
0

我建议将打开 VPN 连接并轮询信息的代码转换为它自己的单例服务,并使用相同(或不同)的 Windows NT 服务托管它。面向客户端的服务使用 WCF 调用 VPN 服务。VPN 服务只会在面向客户端的服务“侦听”时进行轮询。

这有几个优点:

  • WCF 将处理创建服务实例和管理线程的复杂性。(在单例中,您可能仍然需要实现锁定,但仅此而已。)
  • VPN 轮询服务不再与面向客户端的服务紧密耦合。这为您提供了部署的灵活性以及未来支持新用例的能力。
于 2011-05-17T05:41:18.307 回答