2

Azure Service Bus 名前空間には、SubscriptionClient次の方法で MessageSession を開始するメソッドを持つ型があります。

MessageSession session = subscriptionClient.AcceptMessageSession(...);

これは同期バージョンで、MessageSession を返します。このライブラリは、非同期バージョンの BeginAcceptMessageSession() も提供します。これは、コールバックを呼び出し、IAsyncResult と渡したい状態オブジェクトを渡すため、つまずきます。私の場合、SubscriptionClient インスタンスを渡しているので、SubscriptionClient で EndAcceptMessageSession() を呼び出すことができます。BeginAcceptMessageSession() の戻り値の型は void です。

BeginAcceptMessageSession() を介して受け入れられる MessageSession にアクセスするにはどうすればよいですか? コールバックの結果パラメーターに返されるのは、EndAcceptMessageSession() を介して BeginAcceptMessageSession() を終了するために必要な SubscriptionClient インスタンスだけです。

MessageSession リファレンスはどこにもありません。この点に関して、ドキュメントは役に立ちません。Google で検索してもわずか 3 ページの検索結果しか表示されません。そのほとんどは、MSDN からのメソッド自体のオンライン説明にすぎません。AsyncManager.Parameters を調べましたが、これも空です。

このように作成された MessageSession への参照を取得できるように、BeginAcceptMessageSession() を呼び出す方法を知っている人はいますか?

4

1 に答える 1

2

次のようにメソッドを呼び出す必要があります。

  1. IAsyncResultおよびを受け入れるメソッドで begin メソッドを呼び出しますSubscriptionClient
  2. もう 1 つのメソッド (この場合は AcceptDone) では、 を使用して呼び出しEndAcceptMessageSessionIAsyncResultMessageSession

ここに表示されているのは、非同期プログラミング モデルの標準的な実装です。

    private static void Do()
    {
        SubscriptionClient client = ...
        client.BeginAcceptMessageSession(AcceptDone, client);
    }

    public static void AcceptDone(IAsyncResult result)
    {
        var subscriptionClient = result.AsyncState as SubscriptionClient;
        if (subscriptionClient == null)
        {
            Console.WriteLine("Async Subscriber got no data.");
            return;
        }

        var session = subscriptionClient.EndAcceptMessageSession(result);
        ...

        subscriptionClient.Close();
    }
于 2012-09-28T12:36:52.543 に答える