Я пытаюсь выполнить некоторые действия на удаленном сервере, используя библиотеку XML-RPC .NET и C#. У меня нет опыта использования этого протокола, но большинство примеров кажутся довольно простыми. Но сервер, с которым я пытаюсь связаться, похоже, анализирует команды немного иначе, чем большинство примеров, которые я видел.
Все вызовы выполняются с использованием функции 'perform_actions'
, и она ожидает список действий вместе с ней в качестве параметра. К счастью, есть довольно приличная документация с некоторыми примерами кода, но эти примеры сделаны на Ruby/Perl, с которыми у меня нет опыта. Я пытался перевести их на С#, и я считаю, что нахожусь на правильном пути, но постоянно получаю ошибку"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);
}
И вот пример Ruby из документации API, который я пытался воспроизвести, который является функциональным
require 'xmlrpc/client'
url = 'https://user:[email protected]/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
на обычный массив строк, он будет жаловаться на ожидание структуры, поэтому данные не будут полностью игнорироваться.
Кто-нибудь может помочь мне в правильном направлении с моей проблемой или кто-нибудь знает, почему возвращается эта ошибка?