2010-11-08 89 views
2

我正嘗試向我的WCF服務發送HTTPWebRequest POST XML數據。
但是,當我在服務中設置斷點時,它被擊中,但當我嘗試讀取它時,我的widgetStream爲空。即使我從StreamReader中讀取它。如何使用HttpWebRequest將XML流發佈到wcf http rest服務

有誰知道我在做什麼錯?

我的WCF服務是這樣的:

[WebInvoke(UriTemplate = "widgets", Method = "POST"] 
    public void CreateWidget(Stream widgetStream) 
    { 
     try 
     { 
      XElement e = XElement.Load(widgeStream); 
      //... 
     } 
     catch (Exception ex) 

      throw; 
     } 
    } 

我的客戶正試圖XML資源,像這樣連接,並張貼到HTTP網址:

public static void CreateWidget(Widget myWidget) 
{ 
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost:29858/myservice/widgets"); 
    request.Method = "POST"; 
    request.ContentType = "text/xml"; 
    string xml = myWidget.ToXML().ToString(); 
    request.ContentLength = xml.Length; 
    Stream s = request.GetRequestStream(); 
    StreamWriter sr = new StreamWriter(s); 
    sr.Write(xml); 
    sr.Close(); 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
} 

如果任何人都可以請幫助那會不勝感激!

回答

1
[WebInvoke(UriTemplate = "widgets", Method = "POST", RequestFormat=WebMessageFormat.Xml, BodyStyle=WebMessageBodyStyle.Bare] 
[XmlSerializerFormat]  
public void CreateWidget(XElement widget){...} 

試試這個對你的服務。本週我剛剛遇到類似的問題。我沒有嘗試過使用HTTPWebRequest對象,但我可以使用Fiddler將原始XML發佈到服務。

您可能需要將客戶端上的Content-Type更改爲「application/xml」而非「text/xml」。