【问题标题】:Tutorial: Simple WCF XML-RPC client教程:简单的 WCF XML-RPC 客户端
【发布时间】:2011-02-22 03:14:48
【问题描述】:

更新:我在下面的答案中提供了完整的代码示例。

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

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

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

因此,有两个示例方法,一个没有任何参数,另一个带有简单的字符串参数,两者都返回字符串(仅作为示例)。服务通过 http 公开。

Aaand,下一步是什么? :)

【问题讨论】:

    标签: c# wcf client xml-rpc


    【解决方案1】:

    受 Doobi 回答的启发,我查找了有关该主题的更多信息(示例),并得出以下发现。

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

    1. 从此页面下载 WCF 的 XML-RPC:http://vasters.com/clemensv/PermaLink,guid,679ca50b-c907-4831-81c4-369ef7b85839.aspx(下载链接在页面顶部)
    2. 创建一个以 .NET 4.0 Full 框架为目标的空项目(否则 System.ServiceModel.Web 稍后将不可用)
    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

    <?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】:

      最简单的方法是使用 WCF 通道工厂

          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

      编辑:编辑;)

      【讨论】:

      • +1 简明扼要。但这对我不起作用。我收到“无法识别的消息版本”错误。请参阅我的答案以获得对我有用的解决方案。
      • 请编辑你的帖子,这样我就可以给你投票了(出了点问题,它说只有你编辑你的帖子我才能给你投票,呵呵)
      猜你喜欢
      • 2016-09-15
      • 2016-10-13
      • 2011-02-11
      • 1970-01-01
      • 2012-03-18
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多