简体   繁体   English

难以构建XML-RPC.NET客户端(与Moodle一起使用)

[英]Difficulty Building XML-RPC.NET Client (To use with Moodle)

I am using the CookComputing XML-RPC Library in an attempt to build a C# console client in order to execute API methods on Moodle (an open-source Learning management system). 我正在使用CookComputing XML-RPC库来构建C#控制台客户端,以便在Moodle(一个开源学习管理系统)上执行API方法。 The server is using ZEND XML-RPC. 服务器正在使用ZEND XML-RPC。

When I run the code, I get a TypeLoadException was Unhandled , referring to this line: 当我运行代码时,我得到一个TypeLoadException是Unhandled ,引用这一行:

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

"Inheritance security rules violated while overriding member: 'CookComputing.XmlRpc.XmlRpcFaultException.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)'. Security accessibility of the overriding method must match the security accessibility of the method being overriden." “重写成员时违反了继承安全规则:'CookComputing.XmlRpc.XmlRpcFaultException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)'。重写方法的安全性可访问性必须与方法的安全性可访问性相匹配被覆盖。“

My Client code is: 我的客户端代码是:

...
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());
    }
  }

} }

The API documentation for the method I want to utilize is: 我想要使​​用的方法的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
} 
)} 
)

Any suggestions would be helpful, including if I am passing in the token in the right spot? 任何建议都会有所帮助,包括我是否在正确的位置传递令牌?

TIA. TIA。

A possible cause of the TypeLoadException is rebuilding XML-RPC.NET as .NET 4.0 assembly. TypeLoadException的一个可能原因是将XML-RPC.NET重建为.NET 4.0程序集。 If you do this you need to include the following line of code: 如果这样做,您需要包含以下代码行:

[assembly: SecurityRules(SecurityRuleSet.Level1)]

This applies the .NET 2 security transparency rules to the assembly. 这将.NET 2安全透明度规则应用于程序集。

如上所述,在以下情况下向AssemblyInfo.cs添加附加信息对我有用: - Visual Studio Express 2010 - XML-RPC.net的目标框架:4.0(完整,非客户端) - XML-RPC版本:v2.5.0

通过使用较新的Visual Studio 2010支持的XML-RPC构建以及上面建议的相应安全性调整,似乎已解决了此问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM