2010-05-20 51 views
13

更新:我在下面的答案中提供了完整的代碼示例。教程:簡單的WCF XML-RPC客戶端

我建立我自己的小的自定義XML-RPC服務器,因爲我希望讓事情變得簡單,在兩個服務器和客戶端,我想做到的是創造一個儘可能簡單的客戶端(在C#最好)使用WCF。

假設合同通過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 
} 

所以,有兩個實例方法,一個不帶任何參數,另一個簡單的字符串參數,都返回一個字符串(只是爲了舉例)。服務通過http暴露。

Aaand,接下來是什麼? :)

回答

13

受Doobi's的啓發回答,我查了一些關於這個主題的更多信息(例子),並提出了以下發現。從這個頁面

  1. 下載XML-RPC爲WCF:

    步驟來創建簡單的WCF XML-RPC客戶端http://vasters.com/clemensv/PermaLink,guid,679ca50b-c907-4831-81c4-369ef7b85839.aspx(下載鏈接是在頁面的頂部)

  2. 創建一個空的項目,該項目的目標.NET 4.0完全框架(或者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> 
+0

看起來不錯,很好找。 – Doobi 2010-05-21 10:41:20

6

最簡單的方法是通過簡單地調用

var response = client.YourOperation(params) 

更多細節在這裏使用WCF的ChannelFactory

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

和執行請求: http://msdn.microsoft.com/en-us/library/ms734681.aspx

編輯:編輯; )

+0

+1短期和中肯。但它不適合我。我收到「無法識別的消息版本」錯誤。查看我的答案,找到適合我的解決方案。 – 2010-05-21 09:07:50

+0

請編輯你的帖子,讓我可以upvote你(出錯了,它說,只有當你編輯你的帖子,我可以upvote你,呵呵) – 2010-05-21 09:08:31