Что означает следующий ответ REST Центра уведомлений Azure: «Указанное описание ресурса недопустимо»?

Я пытаюсь зарегистрировать универсальное приложение Windows для получения уведомлений из центра уведомлений Azure через нашу серверную службу Java.

Я отлаживал приложение из Visual Studio, пока оно работало на моем устройстве Windows Phone. Приложение могло правильно получить ChannelUri и передать его нашему бэкэнду Java. (Я запускал серверную часть на своем локальном ПК.)

Серверная часть Java сгенерировала следующий запрос на регистрацию шаблона и попыталась отправить его в Azure REST API:

<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://www.w3.org/2005/Atom">
   <content type="application/xml">
      <WindowsTemplateRegistrationDescription xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
         <Tags>Windows,10204394042027091,broadcast</Tags>
         <ChannelUri>https://db3.notify.windows.com/?token=AwYAAABXiUp%2bD8v1%2bVfWbWLr3FZ3rQcJtPkUgFwaiGZus4GbtkM8zbZ6uQt1NKXpC4FOtYWHDxXvBb3FkoefaozvCYTFiDjhdb3jDuORUDY8zBlkGw1MxY0QjrH7G0fFbW0RXgo%3d</ChannelUri>
         <BodyTemplate><![CDATA[{...}]]></BodyTemplate>
         <WNSHeaders>
            <WNSHeader>
               <Header>X-WNS-Type</Header>
               <Value>wns/raw</Value>
            </WNSHeader>
         </WNSHeaders>
         <TemplateName>geoinfo</TemplateName>
      </WindowsTemplateRegistrationDescription>
   </content>
</entry>

На мой взгляд, это соответствует справочнику MS Azure REST: http://msdn.microsoft.com/en-us/library/azure/dn223265.aspx

Тем не менее, ответ содержит следующую ошибку:

<Error><Code>400</Code><Detail>The specified resource description is invalid..TrackingId:4ffaabcc-c7f8-4a6c-ab2f-4f65e94427df_G16,TimeStamp:10/21/2014 9:42:52 PM</Detail></Error>

Есть идеи по поводу проблем с Azure?


person Gabor    schedule 21.10.2014    source источник


Ответы (2)


Попробуй это:

  1. Вызов Создать идентификатор регистрации
  2. Сохраните полученный идентификатор в своей БД
  3. Вызовите Создать или обновить регистрацию, чтобы создать регистрацию.
  4. Каждый раз, когда вы хотите обновить эту регистрацию в будущем (обновить канал, изменить теги ...), вы просто снова вызываете «Создать» или «Обновить регистрацию».

Я только что успешно поиграл с полезной нагрузкой ниже:

<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://www.w3.org/2005/Atom">
  <title type="text"></title>
  <updated>2014-10-21T23:57:08Z</updated>
  <content type="application/atom+xml;type=entry;charset=utf-8">
    <WindowsTemplateRegistrationDescription xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect">
      <Tags>t1,t2</Tags>
      <ChannelUri>https://db3.notify.windows.com/?token=AwYAAABXiUp%2bD8v1%2bVfWbWLr3FZ3rQcJtPkUgFwaiGZus4GbtkM8zbZ6uQt1NKXpC4FOtYWHDxXvBb3FkoefaozvCYTFiDjhdb3jDuORUDY8zBlkGw1MxY0QjrH7G0fFbW0RXgo%3d</ChannelUri>
      <BodyTemplate><![CDATA[<?xml version="1.0" encoding="utf-16"?><root></root>]]></BodyTemplate>
      <WnsHeaders>
        <WnsHeader>
          <Header>X-WNS-Type</Header>
          <Value>wns/raw</Value>
        </WnsHeader>
      </WnsHeaders>
      <TemplateName>MyTemplate</TemplateName>
    </WindowsTemplateRegistrationDescription>
  </content>
</entry>
person efimovandr    schedule 22.10.2014
comment
Спасибо за ответ. Моя проблема в том, что наш поток уже существует для регистрации шаблонов iOS и Android, и он отлично работает для этих двух. Не проходит только регистрация WNS, что довольно странно. У меня такое ощущение, что между Azure и WNS что-то идет не так, поэтому сначала я попытаюсь подключиться к WNS напрямую, чтобы посмотреть, как это происходит. - person Gabor; 22.10.2014
comment
Что ж, ответ на самом деле был скрыт в вашем примере кода: это заглавная буква: WnsHeaders вместо WNSHeaders. - person Gabor; 22.10.2014

Сообщение об ошибке, по-видимому, означает, что в запросе отсутствуют необходимые элементы XML. Проблема в моем случае заключалась в капитализации:

И WNSHeader, и WNSHeaders вместо этого следует писать в регистре Паскаля: WnsHeader и WnsHeaders.

К сожалению, документация Microsoft по API вводит в заблуждение относительно этого.

person Gabor    schedule 22.10.2014