3

私は、WCFクライアントを作成し、標準メソッドを呼び出し、完了時にクライアントを閉じるか中止することに関するベストプラクティスに精通していますが、クライアントとの非同期メソッドについて疑問に思っています。

非同期呼び出しの結果を取得するために、消費クラスがアタッチするパススルーイベントを持つマネージャークラスがあります。例えば:

internal sealed class CommController
{
    public event GetClientIdEventHandler ClientIdReceived;

    private readonly LocalCommSvcClient _localCommSvcClient = new LocalCommSvcClient();

    public CommController()
    {
        _localCommSvcClient.GetClientIdCompleted += (o, e) => ClientIdReceived(o, e);
    }

    public void GetClientIdAsync()
    {
        _localCommSvcClient.GetClientIdAsync();             
    }
}

しかし、クライアントがどこで閉鎖および/または処分されているのかわかりません。非同期の使用法に関連するため、WCFクライアントを閉じるためのベストプラクティスを実際に見つけることができませんでした。.Close()や.Abort()の呼び出しはどこに置くべきですか?

4

1 に答える 1

0

同期クライアントの場合と同様に、メッセージを送信する前にクライアントを Open() する必要があります。通信が不要になった後 (少なくとも応答を受信したとき)、Close() してリソースを解放する必要があります。詳細は、サービスのバインディングと動作構成によって異なります。たとえば、http: //msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute.instancecontextmode.aspxを参照してください。

于 2012-04-30T15:16:59.257 に答える