2011-08-10 2 views
0

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를 가지고 있다고 생각 했는가?

답변

0

현재로서는 채널에 오류가 발생했는지 또는 닫히고 예외가 발생하는지 확인할 때까지 확인할 방법을 찾지 못했습니다. 예외가 발생하는 경우에만 상태가 Faulted로 설정됩니다.이 상태는 예외가 발생할 때 호출되는 CommunicationObject.Fault 메서드에 설정되기 때문입니다.

CommunicationObject.Close가 호출 될 때 Closed 이벤트가 발생합니다.