2011-02-16 45 views
0

交叉張貼從http://social.msdn.microsoft.com/Forums/en-US/windowsazuretroubleshooting/thread/31b6aedc-c069-4e32-8e8f-2ff4b7c30793管理API - 請求體XML無效或不正確指定

我得到通過服務管理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>';

有誰知道爲什麼會出現這個錯誤?我懷疑它與編碼有關,但不確定。

回答

4

您是否直接從調用API獲取此信息?如果是這樣,它應該返回一個x-ms-requestid標頭。

如果採取和調出

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

這應該給你到底是怎麼回事,通常告訴你到底是怎麼回事在一個更詳細的消息。

以外的是,我會檢查以下內容:

1)檢查您的編碼,再檢查一遍。我只提到這一點,因爲當我第一次包裝API時,我遇到了一個問題,那就是我的編碼被搞砸了。所以我最終做的是編寫一些代碼來讀取文件,對它進行編碼,解碼,然後保存到一個新文件中。然後二進制比較這兩個。我終於發現它們與一個字節不同,它打破了整個事情。

2.)檢查您的配置。通過門戶上傳確切的配置文件到你的角色,看看它是否被接受。

3.)檢查API版本標題。對於PHP的SDK不確定,但如果可能的話,您是否可以顯式檢查/設置發送給api的x-ms-version頭文件?

4.)導致有效的失敗,並從那裏進行逆向工程。如果一切都失敗,則傳入空白或隨機/無效的編碼字符串。然後使用GetOperationStatus端點確保您獲得「配置無效」的錯誤。這樣你就知道你的請求正在被接受,但是編碼/配置卻出錯了。

編輯:從這裏你的答覆和MSDN

5)嘗試請求主體省略XML聲明

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

。 當我運行你的確切請求vs由我自己的.net api包裝器創建的相同請求時,唯一的區別是XML聲明不在POST的主體中。包裝器生成的類爲我工作。

0

1)以ASCII(?)形式從Azure獲取配置,並以ASCII失敗的形式再次將其上傳,並以UTF-8的形式上傳。

2)作品

3)作品

4)我得到的是這樣的lausy錯誤(應該創建從:-) T恤):「請求正文的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>" 
} 
+0

編輯響應,並在MSDN上同時張貼。嘗試像聽起來一樣愚蠢 – 2011-02-17 15:37:20

2

謝謝大家!我一直在逆向工程什麼csmanage.exe通過電線發送,現在它工作。這裏的原因:

  • 史蒂夫馬克思的 「/」 解決方案(http://social.msdn.microsoft.com/Forums/en-US/windowsazuretroubleshooting/thread/31b6aedc-c069-4e32-8e8f-2ff4b7c30793?prof =必需)(它應該是:// services/hostedservices/phptest1/deploymentslots/production /?comp = config)
  • 我刪除了XML聲明
  • 我必須替換XML中的所有換行符單線程

附註:我注意到在csmanage.exe中有一個「x-ms-version:2010-04-01」。該版本的任何新聞/文檔?

PS:這將在Windows Azure SDK的PHP結束了,如果你想看到它與第5的建議在這裏工作

+0

真棒,聽起來很棒 – 2011-02-18 15:44:33