Difficulty Creating an XML-RPC.NET Client (for use with Moodle)

I am using the XML-RPC CookComputing library in an attempt to create a C # console client to execute API methods in Moodle (an open source control system). The server uses ZEND XML-RPC.

When I run the code, I get a TypeLoadException that was unhandled by referring to this line:

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

"Inheritance security rules that are violated when overriding an element: 'CookComputing.XmlRpc.XmlRpcFaultException.GetObjectData (System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext).' The security accessibility of the overriding method should be consistent with the security accessibility of the overriding method."

My client code:

 ... 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 documentation for the method I want to use:

 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 go to the token in the right place?

TIA.

+4
source share
3 answers

This problem seems to have been resolved using the new version of XML-RPC supported by Visual Studio 2010, combined with the appropriate security settings recommended above.

0
source

A possible reason for a TypeLoadException is to restore XML-RPC.NET as a .NET 4.0 assembly. If you do this, you need to include the following line of code:

 [assembly: SecurityRules(SecurityRuleSet.Level1)] 

This applies to the .NET 2 security transparency rules for assembly.

+5
source

Adding additional information to AssemblyInfo.cs, as described above, worked for me in the following situation: - Visual Studio Express 2010 - Target structure for XML-RPC.net: 4.0 (full, not client) - XML-RPC version: v2. 5.0

+1
source

All Articles