SilverlightアプリケーションとWCF Webサービスとの間のデュプレックスNet.TCP接続は、一時的なネットワークの問題や、クラッシュや再起動、そのようなもの。それが起こったら、私はこれをキャッチして、接続を再開したいと思います。聞こえます。 Silverlightで障害が発生したDuplexClientBase WCFプロキシを閉じて再度開く
private void Channel_Faulted(object sender, EventArgs e)
{
client.CloseCompleted += (sender, e) =>
{
if (e.Error == null)
client = CreateClient();
else
Debug.WriteLine(e.Error.ToString());
};
client.CloseAsync();
}
しかし、私はCloseCompletedハンドラでe.Errorは、この例外があることをしようとすると:あなたはこのような何かを行うことができるはず
通信オブジェクト、System.ServiceModel.Channelsを。 ServiceChannelは、フォルト状態にあるため通信に使用できません。
私には、この同じテーマのバリエーションの全体の束を試してみた:
- が故障した後、接続を閉じて、それを再作成されていません。
- client.InnerChannel.Close()および/またはclient.ChannelFactory.Close()を手動で呼び出します。
- client.InnerChannel.Dispose()および/またはclient.ChannelFactory.Dispose()を手動で呼び出します。
- 私が今忘れてしまったことがたくさんあります。
これらの戦略は、さまざまなエラーをもたらしてきたが、のどれも言及した非Silverlightのソリューションの一種、たとえば、hereまたはhere(通常のCLRのアプリケーションのためのが、すべてではなく、シルバー)を含め、正しく働いていません。確かにこれはかなり簡単なことですが、明らかにチャンネルのキャッシュが途中にあります。私は何が欠けていますか? Silverlightでこれを行う正しい方法は何ですか?これがSilverlightのバグであれば、適切な回避策はありますか?