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

Posted

技术标签:

【中文标题】教程:简单的 WCF XML-RPC 客户端【英文标题】:Tutorial: Simple WCF XML-RPC client 【发布时间】: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,下一步是什么? :)

【问题讨论】:

【参考方案1】:

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

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

    从此页面下载 WCF 的 XML-RPC:http://vasters.com/clemensv/PermaLink,guid,679ca50b-c907-4831-81c4-369ef7b85839.aspx(下载链接在页面顶部) 创建一个以 .NET 4.0 Full 框架为目标的空项目(否则 System.ServiceModel.Web 稍后将不可用) 将 Microsoft.Samples.XmlRpc 项目从存档添加到您的项目 添加对 Microsoft.Samples.XmlRpc 项目的引用 添加对 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 简明扼要。但这对我不起作用。我收到“无法识别的消息版本”错误。请参阅我的答案以获得对我有用的解决方案。 请编辑你的帖子,这样我就可以给你投票了(出了点问题,它说只有你编辑你的帖子我才能给你投票,呵呵)

以上是关于教程:简单的 WCF XML-RPC 客户端的主要内容,如果未能解决你的问题,请参考以下文章

WCF入门教程

WCF最简单的一次通信(有部分參考,多爲原創)

快速入门系列--WCF--03RESTFUL服务与示例

WCF系列教程之WCF客户端异常处理

Microsoft WCF 测试客户端错误

Apache xml-rpc 客户端和服务器实现