WCF通信主机/客户端。连接故障没有反应

时间:2010-12-29 17:54:43

标签: wcf connection faulted

我将这个例子用于我的wcf服务: http://www.codeproject.com/KB/IP/WCFWPFChatRoot.aspx?msg=3713905#xx3713905xx

但如果服务器停止,客户端就不会得到它......

该示例处理它:

proxy.Open();

proxy.InnerDuplexChannel.Faulted += 
  new EventHandler(InnerDuplexChannel_Faulted);
proxy.InnerDuplexChannel.Opened += 
  new EventHandler(InnerDuplexChannel_Opened);
proxy.InnerDuplexChannel.Closed += 
  new EventHandler(InnerDuplexChannel_Closed);

void InnerDuplexChannel_Closed(object sender, EventArgs e)
{
    if (!this.Dispatcher.CheckAccess())
    {
        this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, 
                        new FaultedInvoker(HandleProxy));
        return;
    }
    HandleProxy();
}


void InnerDuplexChannel_Faulted(object sender, EventArgs e)
{
    if (!this.Dispatcher.CheckAccess())
    {
        this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, 
                        new FaultedInvoker(HandleProxy));
        return;
    }
    HandleProxy();
}

但是,如果我停止主机或它崩溃(ALT + F4),客户端不会得到它。 connectionstate仍处于“连接”状态。

1 个答案:

答案 0 :(得分:2)

问题位于底层TCP协议中。 当连接意外死亡时,TCP不会立即通知对方。 通常在小时范围内有超时,您最终可以在使用的TCP堆栈中进行配置 - 在Windows注册表中的某个位置。但我不建议这样做,因为它会影响整个机器。

但是当您下次尝试在该不存在的连接上发送数据时,您将收到错误。

因此,如果您想知道您的连接是否仍然存在,则必须定期发送一条小消息。