0

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

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

好的,所以在 python 中这个方法调用的 SINGLE 参数是:

 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>

我完全被这个问题困住了。任何帮助将非常感激。

4

1 回答 1

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));
于 2012-06-02T01:19:14.263 回答