2012-06-02 110 views
0

我試圖調用一個xml-rpc Web服務方法,該方法需要1個參數(值的數組)。如何將xml文檔編碼爲base64二進制對象

鍵必須命名爲'鍵'並且必須具有字符串類型的值。 Leads是包含導出數據的xml文檔。必須將其打包爲二進制對象。該值必須被命名爲線索,並且必須是base64類型。

好吧,所以在python這個方法調用中的一個參數是:

r = proxy.leads({'key': key, 'leads': doc}) 

我的第一個問題是我如何在C#這樣做嗎?最接近.net的是一個字典對象,它不會爲此工作。

其次,如何讓xml文檔成爲base64類型的二進制對象?這與將byte []數組轉換爲base64字符串相同嗎?就像這樣:

Convert.ToBase64String(byteArray) 

這裏是請求應該是什麼樣子:

<?xml version="1.0" encoding="iso-8859-1"?> 
<methodCall> 
<methodName>leads</methodName> 
<params> 
<param> 
<value> 
<struct> 
    <member> 
    <name>key</name> 
<value> 
<string>XXXXXXXXXXX</string> 
</value> 
</member> 
<member> 
<name>leads</name> 
<value> 
<base64>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxlYWRzPgogICA8bGVhZD4K 
     ICAgICAgPGlkPjM5OTk3PC9pZD4KICAgICAgPEZpcnN0TmFtZT5Cb2IgSmltPC9GaXJzdE5hbWU+ 
     CiAgICAgIDxMYXN0TmFtZT5TbWl0aDwvTGFzdE5hbWU+CiAgICAgIDxBZGRyZXNzPjEyMzQgV2Vz 
     : 
     : 
     ICAgICA8UmVjZWl2ZUFkZGxJbmZvPlllczwvUmVjZWl2ZUFkZGxJbmZvPgogICAgICA8bG9wX3dj 
     X3N0YXR1cz5ObzwvbG9wX3djX3N0YXR1cz4KICAgPC9sZWFkPgo8L2xlYWRzPg== 
</base64> 
</value> 
</member> 
</struct> 
</value> 
</param> 
</params> 
</methodCall> 

我完全被卡住這個問題。任何幫助將非常感激。

+0

的樣本數據+預期的XML將找出你有用想要實現... –

+0

我現在正在添加編輯,但是如果您不想等 - 我在這裏發佈的問題不太集中。 http://stackoverflow.com/questions/10855156/the-membername-member-is-not-of-type-base64-error-from-xml-rpc-service-call – Donnie

回答

1

查看http://codinghints.blogspot.com/2010/03/xml-rpc-calls-with-c.html瞭解如何手動調用服務。有可能庫以很好的方式做到這一點...

您如何指定參數取決於您發現構建請求的方法。在手動構建請求的情況下(我建議使用XDocument來構建XML,而不是String.Format,但在像例子這樣的非常簡單的情況下String.Format可能會正常),您只需將值放入樣板XML中的正確位置即可。

是的base64的字節數組是Convert.ToBase64String(byteArray)

喜歡的東西下面可能是不夠的(但請儘量使用正確的方法來構造XML非一次性使用的代碼):

String.Format("<?xml versi... <name>key</name><value><string>{0}</string>...", 
     key, Convert.ToBase64String(byteArray)); 
相關問題