如何将xml doc编码为base64二进制对象

时间:2012-06-02 00:42:56

标签: c# encoding xml-rpc binary-data

我正在尝试调用xml-rpc Web服务方法,该方法接受1个参数(值数组)键和引导。

键必须命名为“key”,并且必须具有string类型的值。 Leads是一个包含潜在客户数据的xml文档。这必须打包为二进制对象。此值必须命名为lead,且必须是base64类型。

好吧所以在python中调用此方法的SINGLE参数是:

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

我的第一个问题是如何在c#中执行此操作?最接近的东西.net必须是一个字典对象,不适用于此。

其次,如何使xml doc成为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>

我完全坚持这个问题。任何帮助将非常感激。

1 个答案:

答案 0 :(得分: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));