Как отправить брокерское сообщение с помощью REST API - PullRequest
6 голосов
/ 17 октября 2011

В соответствии с 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);

Есть ли у кого-нибудь пример отправки BrokeredMessage с использованием HTTP-заголовка BrokerProperties?

Ответы [ 2 ]

3 голосов
/ 19 октября 2011

Похоже, что команда сервисбусов выставила несколько примеров сервисной шины silverlight и windows phone на codeplex в http://servicebus.codeplex.com/. Я быстро посмотрел код для примера чата silverlight, и, похоже, у него есть все, что мне нужно опубликовать.посреднические сообщения через RESTFull API.

2 голосов
/ 28 октября 2015

После того, как мне пришлось провести небольшое исследование / работу с API REST для служебной шины Azure, я избавлю вас, ребята, от необходимости копаться в примере чата silverlight, указанном в принятом ответе, и предоставлю вам фактическое снижение. .

Вам нужно знать только две вещи:

1) Заголовок HTTP-запроса BrokerProperties не эквивалентен коллекции BrokeredMessage.Properties

Словарь свойств объекта BrokeredMessage представляет собой набор пользовательских свойств, в то время как заголовок HTTP-запроса BrokerProperties - это место, где вы указываете встроенные свойства, обычно связанные с BrokeredMessage, такие как Label, TimeToLive и т. Д.

2) Все пользовательские заголовки HTTP-запросов обрабатываются как пользовательские свойства

Из MSDN: В дополнение к этим свойствам (имеется в виду BrokerProperties), вы можете указать пользовательские свойства. Если отправлено или получено одно сообщение, каждое настраиваемое свойство помещается в собственный заголовок HTTP. Если пакет сообщений отправляется, пользовательские свойства являются частью тела HTTP в кодировке JSON.

Таким образом, это означает, что все, что вам нужно сделать, чтобы добавить свои пользовательские свойства, это добавить заголовок, например:

    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));            
    }

Очень полезными являются чтение ссылки MSDN на конечную точку API отправки сообщений и введение в сам REST API (здесь говорится о пользовательских свойствах). В документации по веб-сайту Azure также есть статья с примером кода .

...