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());
};
決定的な事はタイムアウトまたは類似の回避策は、このような状況で私には十分ではありませんので、私は、ユーザーがアプリケーションを離れた直後にサーバーに通知する必要があること、です。
解決方法はありますか?
おそらくJavaScriptとbeforeunloadイベントの接続ですか? – Silvermind
私はすでにそれを試みました。 'window.onbeforeunload'イベントハンドラのJavaScriptから' ScriptableMember'メソッドを呼び出します。これは、アプリケーション終了イベント中に呼び出すのとまったく同じです。 –
私はどこかで、クライアントがなくなったために実行できない入力時にサーバーが契約を処理しなければならないため、2番目の方法が機能しないと読んでいます。あなたは、このような方法に新たに作成されたwcfclientとの最後の呼び出し送信しようとしたがあります。IMyContract '[のServiceContract] インターフェース{ [OperationContract(IsOneWay =真)] 無効さようならを() }' – Silvermind