【问题标题】:WCF Service worker thread communicate with ServiceHost threadWCF 服务工作线程与 ServiceHost 线程通信
【发布时间】:2010-03-17 17:48:57
【问题描述】:

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

【问题讨论】:

    标签: wcf multithreading communication servicehost


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      这有几个优点:

      • WCF 将处理创建服务实例和管理线程的复杂性。 (在单例中,您可能仍然需要实现锁定,仅此而已。)
      • VPN 轮询服务不再与面向客户端的服务紧密耦合。这使您能够灵活地部署,并能够在未来支持新的用例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-29
        • 1970-01-01
        • 2013-10-09
        • 1970-01-01
        • 1970-01-01
        • 2013-07-21
        • 1970-01-01
        • 2023-04-08
        相关资源
        最近更新 更多