0

私は、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);
    }
4

1 に答える 1

0

はい、クラスStateで定義されているプロパティがありますClientBase<>(すべてのプロキシ クラスは から派生していますClientBase<>)。

接続の障害状態を処理し、必要に応じて接続を再確立するプロキシ ラッパーがいくつかあります。「wcf プロキシ ラッパー」の Google。

ある種の ServiceLocator パターンを使用する場合は、何かを自作することもできます。

于 2011-04-29T13:49:13.547 に答える