我尝试与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有一个独立的存在吗?
答案 0 :(得分:0)
到目前为止,我还没有找到一种方法来确定通道是否出现故障或关闭,直到它进行调用并获得异常。只有当它导致异常时,状态才会设置为Faulted,因为此状态是在出现异常时调用的CommunicationObject.Fault方法中设置的。
调用CommunicationObject.Close时将触发Closed事件。
答案 1 :(得分:0)
不是全部,但是一些wcf绑定(例如WsHttp& NetTcp)支持可靠的会话,请检查http://msdn.microsoft.com/en-us/library/ms733136.aspx。它可用于检测服务何时停止