我在通过服务管理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>';
有谁知道为什么会出现这种错误?我怀疑它与编码有关,但不确定。
答案 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通过网络发送的内容进行逆向工程,现在可以正常工作了。原因如下:
作为旁注:我注意到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>"
}