Management API - 请求正文XML无效或未正确指定

时间:2011-02-16 09:21:07

标签: azure

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 个答案:

答案 0 :(得分:4)

您是否直接通过调用API获取此信息?如果是这样,它应该返回x-ms-requestid标头。

如果你接受并呼吁

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

这应该会为您提供更详细的信息,通常会告诉您具体情况。

除此之外,我会检查以下内容:

1。)检查你的编码,然后重新检查。我只提到这个,因为当我第一次包装API时,我遇到了一个问题,我的编码搞砸了。所以我最后做的是编写一些代码来读取文件,编码,解码,将其保存到新文件中。然后二进制比较两者。我终于发现它们在一个字节上是不同的,它打破了整个事情。

2。)检查您的配置。通过门户网站将确切的配置文件上传到您的角色,看看它是否已被接受。

3。)检查API版本标题。不确定SDK for PHP,但如果可能,您是否可以明确检查/设置发送到api的x-ms-version标头?

4.。导致有效失败,并从那里进行逆向工程。如果所有其他方法都失败,则传入空白或随机/无效的编码字符串。然后使用GetOperationStatus端点确保您收到“配置无效”的错误。这样您就知道您的请求被接受了,但编码/配置会引发错误。

编辑 :来自您的回复和MSDN

5.尝试省略XML声明

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

来自请求正文。 当我运行您的确切请求与我自己的.net api包装器创建的相同请求时,唯一的区别是XML声明不在POST的主体中。包装器生成的类适用于我。

答案 1 :(得分:2)

谢谢大家!我已经对csmanage.exe通过网络发送的内容进行逆向工程,现在可以正常工作了。原因如下:

  • Steve Marx的“/”解决方案(http://social.msdn.microsoft.com/Forums/en-US/windowsazuretroubleshooting/thread/31b6aedc-c069-4e32-8e8f-2ff4b7c30793?prof=required)是必需的(它应该是:// services / hostedservices / phptest1 / deploymentslots / production /?comp = config)
  • 我删除了XML声明
  • 我必须替换XML中的所有换行符并使其成为单行

作为旁注:我注意到csmanage.exe中有一个“x-ms-version:2010-04-01”。该版本的任何新闻/文档?

PS:如果您希望看到它正常工作,这将最终出现在Windows Azure SDK for PHP中

答案 2 :(得分:0)

1)从Azure获取配置为ASCII(?),再次上传为ASCII失败,上传为UTF-8也失败。

2)工作

3)工作

4)我得到的只是这个错误的错误(应该创建一个T-Shirt :-)):“请求正文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>"
}