API управления - XML ​​тела запроса неверен или указан неправильно - PullRequest
0 голосов
/ 16 февраля 2011

Кросс-постинг от http://social.msdn.microsoft.com/Forums/en-US/windowsazuretroubleshooting/thread/31b6aedc-c069-4e32-8e8f-2ff4b7c30793

Я получаю эту ошибку при изменении конфигурации через API управления службами: XML тела запроса был неверен или указан неправильно

Полезная нагрузка тела запроса:

<?xml version="1.0" encoding="utf-8"?>
<ChangeConfiguration xmlns="http://schemas.microsoft.com/windowsazu
re">
  <Configuration>PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxTZXJ2aWNlQ29uZmlndX
JhdGlvbiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIi
B4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxucz0iaHR0cDovL3
NjaGVtYXMubWljcm9zb2Z0LmNvbS9TZXJ2aWNlSG9zdGluZy8yMDA4LzEwL1NlcnZpY2VDb25maWd1cm
F0aW9uIiBzZXJ2aWNlTmFtZT0iIiBvc0ZhbWlseT0iMSIgb3NWZXJzaW9uPSIqIj4KICA8Um9sZSBuYW
1lPSJXZWJSb2xlMSI+CiAgICA8Q29uZmlndXJhdGlvblNldHRpbmdzPgogICAgICA8U2V0dGluZyBuYW
1lPSJNaWNyb3NvZnQuV2luZG93c0F6dXJlLlBsdWdpbnMuRGlhZ25vc3RpY3MuQ29ubmVjdGlvblN0cm
luZyIgdmFsdWU9IlVzZURldmVsb3BtZW50U3RvcmFnZT10cnVlIi8+CiAgICA8L0NvbmZpZ3VyYXRpb2
5TZXR0aW5ncz4KICAgIDxJbnN0YW5jZXMgY291bnQ9IjIiLz4KICAgIDxDZXJ0aWZpY2F0ZXMvPgogID
wvUm9sZT4KPC9TZXJ2aWNlQ29uZmlndXJhdGlvbj4K</Configuration>
</ChangeConfiguration>

Я передаю ему следующую конфигурацию:

$configuration = '<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" serviceName="" osFamily="1" osVersion="*">
 <Role name="WebRole1">
  <ConfigurationSettings>
   <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true"/>
  </ConfigurationSettings>
  <Instances count="2"/>
  <Certificates/>
 </Role>
</ServiceConfiguration>';

Кто-нибудь знает, почему возникает эта ошибка? Я подозреваю, что это связано с кодировкой, но не уверен.

Ответы [ 3 ]

4 голосов
/ 16 февраля 2011

Получаете ли вы это напрямую от вызова API? Если это так, он должен вернуться с заголовком x-ms-requesttid.

Если вы возьмете это и обратитесь к

https://management.core.windows.net/<subscriptionID/operations/<requestId>

Это должно дать вам гораздо более подробное сообщение о том, что происходит, обычно точно сообщая вам, что происходит.

Помимо этого, я бы проверил следующее:

1.) Проверьте вашу кодировку, затем проверьте ее снова. Я упоминаю об этом только потому, что когда я впервые обернул API, у меня возникла проблема, когда моя кодировка что-то испортила. Итак, я наконец написал код, который будет читать файл, кодировать его, декодировать, сохранять в новый файл. Затем двоичное сравнение двух. Наконец я обнаружил, что они отличаются друг от друга одним байтом, и это сломало все это.

2.) Проверьте вашу конфигурацию. Загрузите этот точный файл конфигурации в вашу роль через портал и посмотрите, будет ли он принят.

3.) Проверка заголовка версии API. Не уверен в SDK для PHP, но если возможно, можете ли вы явно проверить / установить заголовок x-ms-version, отправляемый в API?

4.) Вызвать действительный сбой и выполнить обратный инжиниринг оттуда. Если все остальное не удалось, передайте пустую или случайную / недействительную закодированную строку. Затем используйте конечную точку GetOperationStatus, чтобы убедиться, что вы получаете ошибки на мелодию «Конфигурация недействительна». Таким образом, вы узнаете, что ваш запрос принимается, но кодировка / конфигурация выдает ошибку.

РЕДАКТИРОВАТЬ : из вашего ответа здесь и MSDN

5.) Попробуйте опустить декларацию XML

<?xml version="1.0" encoding="utf-8"?>

из тела запроса. Когда я выполняю ваш точный запрос по сравнению с тем же запросом, созданным моей собственной оболочкой .net api, единственное отличие состоит в том, что декларация XML отсутствует в теле POST. Сгенерированный оберткой класс работает для меня.

2 голосов
/ 18 февраля 2011

Спасибо всем! Я перепроектировал то, что csmanage.exe посылает по проводам, и теперь оно работает. И вот почему:

В качестве примечания: я заметил, что в csmanage.exe есть «x-ms-версия: 2010-04-01». Есть новости / документы по этой версии?

PS: это будет в Windows Azure SDK для PHP, если вы хотите, чтобы он работал

0 голосов
/ 17 февраля 2011

1) Получение конфигурации из Azure как ASCII (?), Повторная загрузка при сбое ASCII, загрузка также как UTF-8.

2) Работает

3) Работы

4) Все, что я получаю, это ошибочная ошибка (из-за этого следует создать футболку :-)): «XML тела запроса был недопустимым или указан неверно», даже при передаче ему пустого XML.

Для записи: RAW запрос и ответ:

-----------------------
Request
-----------------------

object(Microsoft_Http_Client)#3 (15) {
  ["adapter:protected"]=>
  object(Microsoft_Http_Client_Adapter_Socket)#5 (6) {
    ["socket:protected"]=>
    NULL
    ["connected_to:protected"]=>
    array(2) {
      [0]=>
      NULL
      [1]=>
      NULL
    }
    ["out_stream:protected"]=>
    NULL
    ["config:protected"]=>
    array(15) {
      ["persistent"]=>
      bool(false)
      ["ssltransport"]=>
      string(3) "ssl"
      ["sslcert"]=>
      string(51) "C:\Projects\Workspaces\Default\Azure\management.pem"
      ["sslpassphrase"]=>
      string(11) "*************"
      ["maxredirects"]=>
      int(5)
      ["strictredirects"]=>
      bool(false)
      ["useragent"]=>
      string(21) "Microsoft_Http_Client"
      ["timeout"]=>
      int(10)
      ["httpversion"]=>
      string(3) "1.1"
      ["keepalive"]=>
      bool(false)
      ["storeresponse"]=>
      bool(true)
      ["strict"]=>
      bool(true)
      ["output_stream"]=>
      bool(false)
      ["sslusecontext"]=>
      bool(true)
    }
    ["method:protected"]=>
    string(3) "POST"
    ["_context:protected"]=>
    resource(38) of type (stream-context)
  }
  ["uri:protected"]=>
  object(Microsoft_Uri_Http)#10 (9) {
    ["_username:protected"]=>
    string(0) ""
    ["_password:protected"]=>
    string(0) ""
    ["_host:protected"]=>
    string(27) "management.core.windows.net"
    ["_port:protected"]=>
    int(443)
    ["_path:protected"]=>
    string(97) "/******************/services/hostedservices/phptest1/deploymentslots/production"
    ["_query:protected"]=>
    string(11) "comp=config"
    ["_fragment:protected"]=>
    string(0) ""
    ["_scheme:protected"]=>
    string(5) "https"
  }
  ["headers:protected"]=>
  array(3) {
    ["content-type"]=>
    array(2) {
      [0]=>
      string(12) "Content-Type"
      [1]=>
      string(15) "application/xml"
    }
    ["expect"]=>
    array(2) {
      [0]=>
      string(6) "Expect"
      [1]=>
      string(0) ""
    }
    ["x-ms-version"]=>
    array(2) {
      [0]=>
      string(12) "x-ms-version"
      [1]=>
      string(10) "2009-10-01"
    }
  }
  ["method:protected"]=>
  string(3) "POST"
  ["paramsGet:protected"]=>
  array(0) {
  }
  ["paramsPost:protected"]=>
  array(0) {
  }
  ["enctype:protected"]=>
  NULL
  ["raw_post_data:protected"]=>
  string(965) "<?xml version="1.0" encoding="utf-8"?>
             <ChangeConfiguration xmlns="http://schemas.microsoft.com/windowsazure">
               <Configuration>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPFNlcnZpY2VDb25maWd1cmF0aW9uIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL1NlcnZpY2VIb3N0aW5nLzIwMDgvMTAvU2VydmljZUNvbmZpZ3VyYXRpb24iIHNlcnZpY2VOYW1lPSIiIG9zRmFtaWx5PSIxIiBvc1ZlcnNpb249IioiPgogIDxSb2xlIG5hbWU9IldlYlJvbGUxIj4KICAgIDxDb25maWd1cmF0aW9uU2V0dGluZ3M+CiAgICAgIDxTZXR0aW5nIG5hbWU9Ik1pY3Jvc29mdC5XaW5kb3dzQXp1cmUuUGx1Z2lucy5EaWFnbm9zdGljcy5Db25uZWN0aW9uU3RyaW5nIiB2YWx1ZT0iVXNlRGV2ZWxvcG1lbnRTdG9yYWdlPXRydWUiLz4KICAgIDwvQ29uZmlndXJhdGlvblNldHRpbmdzPgogICAgPEluc3RhbmNlcyBjb3VudD0iMiIvPgogICAgPENlcnRpZmljYXRlcy8+CiAgPC9Sb2xlPgo8L1NlcnZpY2VDb25maWd1cmF0aW9uPgo=</Configuration>
             </ChangeConfiguration>"
  ["auth:protected"]=>
  NULL
  ["files:protected"]=>
  array(0) {
  }
  ["cookiejar:protected"]=>
  NULL
  ["last_request:protected"]=>
  NULL
  ["last_response:protected"]=>
  NULL
  ["redirectCounter:protected"]=>
  int(0)
}

-----------------------
Response
-----------------------
object(Microsoft_Http_Response)#9 (5) {
  ["version:protected"]=>
  string(3) "1.1"
  ["code:protected"]=>
  int(400)
  ["message:protected"]=>
  string(11) "Bad Request"
  ["headers:protected"]=>
  array(5) {
    ["Content-length"]=>
    string(3) "230"
    ["Content-type"]=>
    string(30) "application/xml; charset=utf-8"
    ["Server"]=>
    string(21) "Microsoft-HTTPAPI/2.0"
    ["Date"]=>
    string(29) "Thu, 17 Feb 2011 07:15:36 GMT"
    ["Connection"]=>
    string(5) "close"
  }
  ["body:protected"]=>
  string(230) "<Error xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Code>InvalidXmlRequest</Code><Message>The request body’s XML was invalid or not correctly specified.</Message></Error>"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...