代码之家  ›  专栏  ›  技术社区  ›  mr.b Scott Lystig Fritchie

教程:简单WCF XML-RPC客户端

  •  13
  • mr.b Scott Lystig Fritchie  · 技术社区  · 14 年前

    我已经构建了自己的小型定制XML-RPC服务器,并且由于我希望在服务器端和客户端都保持简单,所以我想要完成的是使用WCF创建一个尽可能简单的客户端(最好是C语言)。

    假设通过XML-RPC公开的服务契约如下:

    [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
    }
    

    啊,接下来呢?:)

    2 回复  |  直到 11 年前
        1
  •  14
  •   mr.b Scott Lystig Fritchie    14 年前

    受杜比回答的启发,我查阅了更多关于这个问题的信息(例子),得出了以下发现。

    创建简单WCF XML-RPC客户端的步骤:

    1. 从此页下载用于WCF的XML-RPC: http://vasters.com/clemensv/PermaLink,guid,679ca50b-c907-4831-81c4-369ef7b85839.aspx (下载链接位于页面顶部)
    2. 创建一个以
    3. Microsoft.Samples.XmlRpc 从归档文件到项目的项目
    4. 添加对Microsoft.Samples.XmlRpc项目的引用
    5. 添加对System.ServiceModel和System.ServiceModel.Web的引用

    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");
            }
        }
    }
    

    请求/响应消息示例

    <?xml version="1.0" encoding="utf-8"?>
    <methodCall> 
        <methodName>Hello</methodName> 
        <params> 
            <param> 
                <value> 
                    <string>World</string> 
                </value> 
            </param> 
        </params> 
    </methodCall> 
    

    响应XML

    <?xml version="1.0" encoding="utf-8"?>
    <methodResponse> 
        <params> 
            <param> 
                <value> 
                    <string>Hello, World!</string> 
                </value> 
            </param> 
        </params> 
    </methodResponse> 
    
        2
  •  6
  •   Doobi    14 年前

    最简单的方法是使用WCF channelfactory

        IStuffService client = new ChannelFactory<IStuffService>(
            new BasicHttpBinding(),
            *"Stick service URL here"*)
            .CreateChannel();
    

    只需调用

    var response = client.YourOperation(params)
    

    更多详情请参见: http://msdn.microsoft.com/en-us/library/ms734681.aspx

    edit:edited ;)