私は、net.tcp と netTcpBinding を使用して WCF サービスをまとめ、Silverlight クライアントとの二重通信を取得しています。Silverlight アプリからサービスを呼び出すと、サービスは別のサーバーを呼び出し、WCF サービス クラスでコールバック メソッドを渡します。リモート サーバーは何度かコールバックし、そのたびに WCF サービスはコールバック チャネルを使用してデータを Silverlight クライアントに送信します。ほとんどの場合、すべてうまく機能します。
ユーザーが大きなリクエストを送信すると、多数のコールバックが既に機能した後で TimeoutException が発生します。(明らかに、これを防ぐために他の場所でやるべきことがいくつかありますが、まずサービスを強化したいと思います。)
Silverlight クライアントにコールバックする前に、何らかの「if (client.ConnectionState == faulted)」チェックを行うことを期待していましたが、接続の状態を保持するオブジェクトが見つからないようです。ありますか?私は間違った側からこれに近づいていますか?
これは、サービス net.tcp と duplex への私の最初のベンチャーです。家を引っ越したばかりで、WCF バイブルはまだ箱に入っています。どこか。:-) だから、私はいつもの背景を読むことができません。
どんな指摘もありがたく受け取るだろう。私の説明があまりにも厄介な場合に備えて、ここにいくつかの裸のコードがあります:
private IActiveDirectoryClient client;
private AsyncSearchRunner runner;
public void Search(Request request)
{
this.client = OperationContext.Current.GetCallbackChannel<IActiveDirectoryClient>();
runner = new AsyncSearchRunner();
runner.Run(request.SearchRoot, request.SearchFilter, request.PageSize,
System.DirectoryServices.Protocols.SearchScope.Subtree, SendObjects);
}
private void SendObjects(List<DirectoryObject> items)
{
Response response = new Response();
response.DirectoryObjects = items.ToArray();
client.SendResponse(response);
}