我尝试使用XML-RPC .NET库和C#在远程服务器上执行某些操作。我没有使用此协议的经验,但大多数示例似乎很简单。但我尝试与之通信的服务器似乎解析的命令与我见过的大多数示例略有不同。
所有调用都是使用'perform_actions'
函数进行的,并且它需要一个与其一起作为参数的操作列表。幸运的是,有一些相当不错的文档包含了一些代码示例,但这些示例是在Ruby / Perl中完成的,我没有经验。我已经尝试将这些内容翻译成C#,我相信我已经走上了正确的道路,但我始终遇到错误"Server returned a fault exception: [400] Invalid request: expected list of actions."
我当前的代码
[XmlRpcUrl("https://DOMAIN/admin/rpc")]
public interface iFace : IXmlRpcProxy
{
[XmlRpcMethod("perform_actions")]
XmlRpcStruct[] perform_actions(XmlRpcStruct struc);
}
public void GetData()
{
XmlRpcStruct actions = new XmlRpcStruct();
actions.Add("name", "registrations.accounts.list");
iFace proxy = XmlRpcProxyGen.Create<iFace>();
proxy.Credentials = new NetworkCredential("USERNAME", "PASSWORD");
XmlRpcStruct[] response = proxy.perform_actions(actions);
}
这是一个来自API文档的Ruby示例,我试图复制它的功能
require 'xmlrpc/client'
url = 'https://user:passwd@qmanage.example.com/admin/rpc'
c = XMLRPC::Client.new_from_uri(url)
# Call the action to list the access groups.
ags = c.call('perform_actions', [{
'name' => 'network.accessgroups.list',
'args' => {}
}])
服务器似乎无法识别我发送的XmlRpcStruct
,因为错误似乎是抱怨未收到操作列表。 (如果我没有发送任何参数,我会收到同样的错误)。但是,如果我将XmlRpcStruct
更改为常规字符串数组,则会抱怨期望结构,因此数据不会被完全忽略。
是否有人能够帮助我解决问题,或者有人知道为什么会返回此错误?
答案 0 :(得分:0)
最后设法弄清楚我的困境。似乎我必须传递一组XmlRpcStruct
而不是单数XmlRpcStruct
,以下解决了我的问题:
XmlRpcStruct[] actions = new XmlRpcStruct[1];
XmlRpcStruct action = new XmlRpcStruct();
action.Add("name", "registrations.accounts.list");
actions[0] = action;
我刚刚将actions
作为参数传递给perform_actions
函数。