6

MSDNによると、ブローカーメッセージはREST APIを介して送信でき、このブローカーメッセージはメッセージの一部としてプロパティキーと値のペアを持つことができます。ブローカーメッセージを送信できましたが、受信してもメッセージの[プロパティ]フィールドに入力されません。プロパティJSONを誤ってエンコードしている必要があります。

これがコードスニペットです

        WebClient webClient = new WebClient();
        webClient.Headers[HttpRequestHeader.Authorization] = _token;
        webClient.Headers["Content-Type"] = "application/atom+xml;type=entry;charset=utf-8";
        Guid messageId = Guid.NewGuid();
        webClient.Headers["BrokerProperties"] = @"{""MessageId"": ""{" + messageId.ToString("N") + @"}"", ""TimeToLive"" : 900, ""Properties"": [{""Key"" : ""ProjectId"", ""Value"" : """ + message.ProjectId + @"""}]}";

        // Serialize the message
        MemoryStream ms = new MemoryStream();
        DataContractSerializer ser = new DataContractSerializer(typeof(RespondentCommitMessage));
        ser.WriteObject(ms, message);
        byte[] array = ms.ToArray();
        ms.Close();

        byte[] response = webClient.UploadData(fullAddress, "POST", array);
        string responseStr = Encoding.UTF8.GetString(response);

BrokerProperties HTTPヘッダーを使用してBrokeredMessageを送信する例はありますか?

4

2 に答える 2

3

servicebusチームがhttp://servicebus.codeplex.com/のcodeplexにSilverlightとWindowsPhoneのサービスバスのサンプルをいくつか掲載したようです。Silverlightチャットサンプルのコードをすばやく確認したところ、RESTFullAPIを介してブローカーメッセージを公開するために必要なものがすべて揃っているようです。

于 2011-10-18T20:46:52.763 に答える
2

Azure ServiceBusのRESTAPIを自分で少し調査/作業する必要があったので、受け入れられた回答にリストされているSilverlightチャットの例を掘り下げる手間を省き、実際の詳細を説明します。

知っておく必要があることは2つだけです。

1)BrokerProperties HTTPリクエストヘッダーは、BrokeredMessage.Propertiesコレクションと同等ではありません

BrokeredMessageオブジェクトのプロパティディクショナリはカスタムプロパティのコレクションですが、BrokerProperties HTTPリクエストヘッダーでは、Label、TimeToLiveなどのBrokeredMessageに通常関連付けられている組み込みのプロパティを指定します。

2)すべてのカスタムHTTPリクエストヘッダーはカスタムプロパティとして扱われます

MSDNから:これらのプロパティ(BrokerPropertiesを参照)に加えて、カスタムプロパティを指定できます。単一のメッセージが送信または受信される場合、各カスタムプロパティは独自のHTTPヘッダーに配置されます。メッセージのバッチが送信される場合、カスタムプロパティはJSONでエンコードされたHTTPボディの一部です。

つまり、カスタムプロパティを追加するために必要なのは、ヘッダーを追加することだけです。たとえば、次のようになります。

    public static void SendMessageHTTP(string bodyContent, params KeyValuePair<string,object>[] properties)
    {
        //BrokeredMessage message = new BrokeredMessage(bodyContent);            
        //foreach(var prop in properties)
        //{
        //    message.Properties[prop.Key] = prop.Value;
        //}

        ...

        WebClient webClient = new WebClient();
        webClient.Headers[HttpRequestHeader.Authorization] = token;
        webClient.Headers[HttpRequestHeader.ContentType] = "application/atom+xml;type=entry;charset=utf-8";

        foreach (var prop in properties)
        {
            webClient.Headers[prop.Key] = prop.Value.ToString();
        }
        webClient.Headers["MyCustomProperty"] = "Value";

        webClient.UploadData(messageQueueURL, "POST", Encoding.UTF8.GetBytes(bodyContent));            
    }

非常に価値のある読み物は、Send Message APIエンドポイントに関するMSDNリファレンス、REST API自体の概要です(ここでカスタムプロパティについて説明します)。Azure Webサイトのドキュメントには、サンプルコードを含む記事もあります。

于 2015-10-28T18:44:21.397 に答える