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

今のところ、呼び出しを行って例外を取得するまで、チャネルに障害があるか閉じているかを判断する方法が見つかりません。このステータスは、例外が発生したときに呼び出される CommunicationObject.Fault メソッドに設定されるため、例外が発生した場合にのみステータスが Faulted に設定されます。

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 に答える