Сложность создания клиента XML-RPC.NET (для использования с Moodle)

Я использую библиотеку CookComputing XML-RPC, пытаясь создать консольный клиент C# для выполнения методов API в Moodle (система управления обучением с открытым исходным кодом). Сервер использует ZEND XML-RPC.

Когда я запускаю код, я получаю исключение TypeLoadException was Unhandled, ссылаясь на эту строку:

System.Object myResults = proxy.moodle_user_get_user_by_id(myUserIds);

"Правила безопасности наследования нарушены при переопределении члена: "CookComputing.XmlRpc.XmlRpcFaultException.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)". Доступность переопределяющего метода с точки зрения безопасности должна соответствовать доступности с точки зрения безопасности переопределяемого метода."

Код моего клиента:

...
using CookComputing.XmlRpc;


[XmlRpcUrl("http://moodle.ourcompany.com/webservice/xmlrpc/server.php?wstoken=somereallylongtokenstring")]
public interface IMoodleUserGetUsersById : IXmlRpcProxy
{
    [XmlRpcMethod("moodle_user_get_users_by_id")]
    System.Object moodle_user_get_user_by_id(int[] userIds);
}

namespace Moodle_test_api1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Testing XML-RPC Services for Moodle!");

            IMoodleUserGetUsersById proxy = XmlRpcProxyGen.Create<IMoodleUserGetUsersById>();

        int[] myUserIds = {11, 12};
        System.Object myResults = proxy.moodle_user_get_user_by_id(myUserIds);

        //Console.WriteLine("Trying Function: {0}:{1}", proxy.ToString());
    }
  }

}

Документация по API для метода, который я хочу использовать:

moodle_user_get_users_by_id: Get users by id.


Arguments
---------
userids (Required)

General structure

list of ( 
int   //user ID
)

XML-RPC (PHP structure)

[userids] =>
    Array 
        (
        [0] => int
        )

Response:

  General structure
  -----------------
list of ( 
object {
id double   //ID of the user
username string   //Username policy is defined in Moodle security config
firstname string   //The first name(s) of the user
lastname string   //The family name of the user
email string   //An email address - allow email as root@localhost
auth string   //Auth plugins include manual, ldap, imap, etc
confirmed double   //Active user: 1 if confirmed, 0 otherwise
idnumber string   //An arbitrary ID code number perhaps from the institution
lang string   //Language code such as "en", must exist on server
theme string   //Theme name such as "standard", must exist on server
timezone string   //Timezone code such as Australia/Perth, or 99 for default
mailformat int   //Mail format code is 0 for plain text, 1 for HTML etc
description string   //User profile description
descriptionformat int   //User profile description format
city string   //Home city of the user
country string   //Home country code of the user, such as AU or CZ
customfields  Optional //User custom fields (also known as user profil fields)
list of ( 
object {
type string   //The name of the custom field
value string   //The value of the custom field
} 
)} 
)

Любые предложения будут полезны, в том числе, если я передаю токен в правильном месте?

ТИА.


person Ray    schedule 30.08.2011    source источник


Ответы (3)


Возможная причина TypeLoadException — перестроение XML-RPC.NET как сборки .NET 4.0. Если вы это сделаете, вам нужно включить следующую строку кода:

[assembly: SecurityRules(SecurityRuleSet.Level1)]

Это применяет к сборке правила прозрачности безопасности .NET 2.

person Charles Cook    schedule 31.08.2011
comment
Это не похоже на решение проблемы. Я создаю для .NET 4.0, и добавление этого в AssemblyInfo.cs приводит к тому же исключению. - person Ray; 06.09.2011
comment
Это сработало для меня для .NET 4.6.2 либо для xmlrpc.net v2.5.0, либо для v3.0.0.270 - после того, как я поместил [assembly: SecurityRules(SecurityRuleSet.Level1)] в файл AssemblyInfo.cs проекта xmlrpc и файлы моего основного проекта. - person gridtrak; 07.06.2017

Добавление дополнительной информации в AssemblyInfo.cs, как описано выше, помогло мне в следующей ситуации: - Visual Studio Express 2010 - Целевая платформа для XML-RPC.net: 4.0 (полная, не клиентская) - Версия XML-RPC: v2.5.0

person Björn    schedule 13.10.2011

Эта проблема, по-видимому, была решена с помощью более новой поддерживаемой Visual Studio 2010 сборки XML-RPC в сочетании с соответствующими настройками безопасности, рекомендованными выше.

person Ray    schedule 06.09.2011