WCF服务器间代码不会触发TCP超时和故障

时间:2011-08-10 21:51:41

标签: c# .net wcf servicehost

我尝试与WCF建立服务器间通信协议。但由于某种原因,当服务器断开连接时,Faulted既不会调用Closed事件。这真的很烦人,但我还没有找到解决方案。

private static ServiceHost loginService;
static void Load() {
    loginService = new ServiceHost(typeof(LoginService), new Uri[] { new Uri(Settings.Instance.LoginServiceURI) });
    loginService.AddServiceEndpoint(typeof(ILoginService), ServiceHelpers.GetBinding(new Uri(Settings.Instance.LoginServiceURI)), Settings.Instance.LoginServiceURI);
    loginService.Faulted += new EventHandler(loginService_Faulted);
    loginService.Open();
}

static void loginService_Faulted(object sender, EventArgs e)
{
    Log.WriteLine(LogLevel.Error, "LoginWCF Faulted. Restarting.");
    loginService.Close();
    Load();
}

愚蠢的是,当连接中断时,只有ILoginService接口内的函数会抛出异常。我认为TCP有一个独立的存在吗?

2 个答案:

答案 0 :(得分:0)

到目前为止,我还没有找到一种方法来确定通道是否出现故障或关闭,直到它进行调用并获得异常。只有当它导致异常时,状态才会设置为Faulted,因为此状态是在出现异常时调用的CommunicationObject.Fault方法中设置的。

调用CommunicationObject.Close时将触发Closed事件。

答案 1 :(得分:0)

不是全部,但是一些wcf绑定(例如WsHttp& NetTcp)支持可靠的会话,请检查http://msdn.microsoft.com/en-us/library/ms733136.aspx。它可用于检测服务何时停止