2012-03-16 9 views
1

Silverlightアプリケーション用の完全な二重メッセージングソリューションを使用しています。今私はそれに1つの機能を追加したいと思います。ユーザーがアプリケーションを終了すると、終了する前に最後のメッセージを送信して、サーバーに通知する必要があります。Silverlightアプリケーション出口で二重メッセージを送信

アプリケーション終了イベント中に二重メッセージを送信しようとしましたが、DuplexServiceClientはすでにCommunicationState.Faultedの状態です。

新しい接続を確立してメッセージを送信しようとしました。すべてがクライアント側で大丈夫だったようですが、メッセージはまったく送信されませんでした。私はそれをFiddlerを使って2回チェックしました。

App.Current.Exit += (s, e) => 
{ 
    var dsc = new DuplexServiceClient(_binding, new EndpointAddress("../Services/MyService.svc")); 
    dsc.SendToServiceAsync(new UserLeave()); 
}; 

決定的な事はタイムアウトまたは類似の回避策は、このような状況で私には十分ではありませんので、私は、ユーザーがアプリケーションを離れた直後にサーバーに通知する必要があること、です。

解決方法はありますか?

+0

おそらくJavaScriptとbeforeunloadイベントの接続ですか? – Silvermind

+0

私はすでにそれを試みました。 'window.onbeforeunload'イベントハンドラのJavaScriptから' ScriptableMember'メソッドを呼び出します。これは、アプリケーション終了イベント中に呼び出すのとまったく同じです。 –

+0

私はどこかで、クライアントがなくなったために実行できない入力時にサーバーが契約を処理しなければならないため、2番目の方法が機能しないと読んでいます。あなたは、このような方法に新たに作成されたwcfclientとの最後の呼び出し送信しようとしたがあります。IMyContract '[のServiceContract] インターフェース{ [OperationContract(IsOneWay =真)] 無効さようならを() }' – Silvermind

答えて

1

同様のトピックhereが見つかりました。 Aliostadの答えは、これについてもう一度考えさせてくれました。あなたは彼が放っているクライアントからの信号を得ることは決してできません。だから私はタイムアウトの解決策で終わった。

関連する問題