WCF를 사용하여 서버 간 통신 프로토콜을 만들려고했습니다. 그러나 어떤 이유로 서버가 연결을 끊으면 Faulted 또는 Closed 이벤트가 호출되지 않습니다. 이것은 정말로 짜증나지만 그것에 대한 해결책을 찾지 못했습니다.WCF 간 서버 코드가 TCP 시간 초과 및 오류를 유발하지 않습니다.
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가 그것 자신의 keep-alive를 가지고 있다고 생각 했는가?