Update: I have provided complete code example in answer below.
I have built my own little custom XML-RPC server, and since I'd like to keep things simple, on both server and client side, what I would like to accomplish is to create a simplest possible client (in C# preferably) using WCF.
Let's say that Contract for service exposed via XML-RPC is as follows:
[ServiceContract]
public interface IContract开发者_运维技巧
{
[OperationContract(Action="Ping")]
string Ping(); // server returns back string "Pong"
[OperationContract(Action="Echo")]
string Echo(string message); // server echoes back whatever message is
}
So, there are two example methods, one without any arguments, and another with simple string argument, both returning strings (just for sake of example). Service is exposed via http.
Aaand, what's next? :)
Inspired by Doobi's answer, I looked up some more info (examples) on the subject, and came up with the following findings.
Steps to create simple WCF XML-RPC client:
- Download XML-RPC for WCF from this page: http://vasters.com/clemensv/PermaLink,guid,679ca50b-c907-4831-81c4-369ef7b85839.aspx (download link is at the top of page)
- Create an empty project which targets .NET 4.0 Full framework (or else System.ServiceModel.Web won't be available later on)
- Add Microsoft.Samples.XmlRpc project from the archive to your project
- Add reference to Microsoft.Samples.XmlRpc project
- Add references to System.ServiceModel and System.ServiceModel.Web
Example code
using System;
using System.ServiceModel;
using Microsoft.Samples.XmlRpc;
namespace ConsoleApplication1
{
// describe your service's interface here
[ServiceContract]
public interface IServiceContract
{
[OperationContract(Action="Hello")]
string Hello(string name);
}
class Program
{
static void Main(string[] args)
{
ChannelFactory<IServiceContract> cf = new ChannelFactory<IServiceContract>(
new WebHttpBinding(), "http://www.example.com/xmlrpc");
cf.Endpoint.Behaviors.Add(new XmlRpcEndpointBehavior());
IServiceContract client = cf.CreateChannel();
// you can now call methods from your remote service
string answer = client.Hello("World");
}
}
}
Example request/response messages
Request XML
<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>Hello</methodName>
<params>
<param>
<value>
<string>World</string>
</value>
</param>
</params>
</methodCall>
Response XML
<?xml version="1.0" encoding="utf-8"?>
<methodResponse>
<params>
<param>
<value>
<string>Hello, World!</string>
</value>
</param>
</params>
</methodResponse>
The easiest way is to use a WCF channelfactory
IStuffService client = new ChannelFactory<IStuffService>(
new BasicHttpBinding(),
*"Stick service URL here"*)
.CreateChannel();
And execute the request by simply calling
var response = client.YourOperation(params)
More details here: http://msdn.microsoft.com/en-us/library/ms734681.aspx
edit:edited ;)
精彩评论