0

我试图用 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有它自己的保持活动?

4

2 回答 2

0

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

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

于 2011-08-11T00:58:45.800 回答
0

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

于 2011-08-11T07:29:27.340 回答