2011-07-25 222 views
2

有一個自我託管的WCF REST服務,需要發送一個xml郵件消息給它。似乎這個問題似乎被問及幾次回答,但在嘗試了每個解決方案後,我仍然沒有取得任何成功。發送xml數據到WCF REST服務

服務器:接口

[ServiceContract] 
public interface ISDMobileService 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", BodyStyle=WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Xml, ResponseFormat=WebMessageFormat.Xml)] 
    int ProcessMessage(string inputXml); 
} 

服務器:類

public class Service : ISDMobileService 
{ 
    public int ProcessMessage(string inputXml) 
    { 
     Console.WriteLine("ProcessMessage : " + inputXml); 
     return 0; 
    } 
} 

服務器:接待來自小提琴手

class Program 
{ 
    static void Main(string[] args) 
    { 
     WebServiceHost   host = new WebServiceHost(typeof(Service), new Uri("http://172.16.3.4:7310")); 
     WebHttpBinding   webbind = new WebHttpBinding(WebHttpSecurityMode.None); 

     ServiceEndpoint   ep  = host.AddServiceEndpoint(typeof(ISDMobileService), webbind, ""); 
     ServiceDebugBehavior stp  = host.Description.Behaviors.Find<ServiceDebugBehavior>(); 
     stp.HttpsHelpPageEnabled = false; 

     host.Open(); 
     Console.WriteLine("Service is up and running. Press 'Enter' to quit >>>"); 
     Console.ReadLine(); 

     host.Close(); 
    } 
} 

fiddler request

請求,而不在T什麼他的「Request Body」工作得很好,並在Service類的ProcessMessage方法中觸發斷點,「請求正文」中的任何數據變體 例如:test || <inputXml> test </inputXml > || inputXml =「test」|| <?xml version =「1.0」encoding =「UTF-8」? > <inputXml>測試</inputXml >等給出了HTTP/1.1 400錯誤的請求

會明白這個

回答

3

任何幫助,有幾件事情:

  • 由於您使用WebServiceHost,你不需要明確添加服務端點(在您的Main中調用host.AddServiceEndpoint(...)
  • 該操作需要string參數;如果您想發送它n XML,你需要將字符串包裝在適當的元素中。試試這個機構,它應該工作:

身體:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">This is a string encoded in XML</string> 

你也可以把它在不同的格式,如JSON。這個請求也應該可以工作

POST http://.../ProcessMessage 
Host: ... 
Content-Type: application/json 
Content-Length: <the actual length> 

"This is a string encoded in JSON" 
+0

完美的工作,非常感謝 – Maxim