2011-10-27 44 views
2

我建立一個RESTful服務,如下面2種方法(注:我ASPNETCompatilibilityMode設置爲true):客戶如何通過參數的REST風格的WCF服務

[WebInvoke] 
string TestMethodA() 
{ 
     string test = HttpContext.Current.Request.Form["xml"]; 
} 

[WebInvoke] 
string TestMethodB(string res) 
{ 
     string xml = res; 
} 

現在在構建客戶端時爲了通過參數來治法i執行以下操作:

request.AddParameter("xmlString", HttpUtility.HtmlEncode(requestBody)); 

以及用於發送消息給我方法b執行以下操作:

request.AddParameter("text/xml",requestBody, ParameterType.RequestBody); 

現在的問題是:

客戶如何知道如何傳遞參數?客戶端不知道服務器的實現。

發送請求的客戶端正在使用RestSharp Api。

+0

您的服務具有基礎架構知識(在這種情況下,HTTP在查看請求主體中),這通常並不理想。爲什麼不只是讓TestMethodA接受一個字符串,然後總是以同樣的方式調用你的方法?這樣,即使沒有託管在http綁定上,您的服務也能正常工作,並且客戶端只需要一種方法就可以知道如何調用該服務。 – kmp

回答

0

由於MethodB()接受一個字符串,WCF不知道它應該是什麼樣子。它可以是XML,JSON,自由文本等等。在您的實施中,您只需記錄如何格式化請求並將其提供給正在實施客戶端的人員。

更好的方法是創建一個C#對象,用適當的序列化屬性標記它,並將其用作MethodB()的參數。例如:

[DataContract] 
public class MyDataContract{ 

    [DataMember] 
    public string SomeString{get;set;} 

    [DataMember] 
    public int SomeNumber{get;set;}  
} 

public void MethodB(MyDataContract arguments){ 
    //do stuff 

} 

這將允許WCF基礎結構自動分析參數。您也可以讓WCF從此自動生成幫助文檔。

相關問題