サーバー間通信プロトコルを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には独自のキープアライブがあると思いましたか?