关闭WCF持久连接

时间:2017-10-02 09:40:47

标签: c# wcf tcp

关闭WCF持久连接时遇到问题。我不仅需要关闭一个对象,还需要关闭已建立的TCP连接。

我有什么:

  1. 许多可以创建WCF连接的客户端:

    var binding = new BasicHttpBinding
    {
        CloseTimeout = TimeSpan.FromMinutes(30),
        ReceiveTimeout = TimeSpan.FromMinutes(30),
        SendTimeout = TimeSpan.FromMinutes(30),
        OpenTimeout = TimeSpan.FromMinutes(30)
    };  
    var endpointAddress = new EndpointAddress(comboBoxPath.Text);
    _factory = new ChannelFactory<IManagementService>(binding, endpointAddress);
    _multimodeService = _factory.CreateChannel();
    
  2. Load Balancer with 2 servers。

  3. 我需要的是从LB中删除一台服务器后重新创建一个WCF连接。案例:许多客户通过LB与两台服务器建立持久连接。我想从LB中排除一个服务器,更新它并将其返回,但所有客户端必须在更新期间与其他服务器一起使用。因此,当我从LB中排除服务器并开始更新时,所有使用第一台服务器的客户端都开始出错。他们尝试重新创建WCF连接,但他们不能,因为我无法关闭持久的WCF连接,LB继续向第一台服务器发送请求。如果我可以完全关闭连接并创建一个新的LB,则会向第二个服务器发送请求。

    我尝试创建一个小型测试应用程序来建立WCF连接,并通过一个小实用程序CurrPorts查看它。当我从服务器获取数据时,我看到了连接,但是我关闭连接的所有尝试均未成功。我绑了

    ((ICommunicationObject)_multimodeService).Close();
    ((ICommunicationObject)_multimodeService).Abort();
    ((IClientChannel)_multimodeService).Close();
    ((IClientChannel)_multimodeService).Abort();
    _factory.Close();
    _factory.Abort();
    

    但它只是在代码中处理对象。因此,在通过任何此操作关闭连接后,我无法获取数据,直到我再次打开连接,但已建立的TCP连接仍处于活动状态,并在创建新连接后重新使用。仅在关闭应用程序后才会将其删除。 所以问题是:是否可以完全关闭包括TCP连接在内的持久连接?<​​/ p>

    注意:我了解ChannelFactory中的缓存并尝试设置属性

    ClientBase<IManagementService>.CacheSetting = CacheSetting.AlwaysOff;
    

    在申请开始时,但它也没有帮助。 我的框架版本是4.6.2。

0 个答案:

没有答案