2009-10-12 54 views
1
[WebInvoke(Method = "PUT", UriTemplate = "users/{username}")] 
    [OperationContract] 
    void PutUser(string username, User newValue);//update a user 

我有一个更新用户方法定义如上所示。然后我使用HttpWebRequest来测试这个方法,但是我怎么能通过这个HttpWebResquest传递User对象呢? 以下代码是我到目前为止得到的。传递对象与WCF RESTful

 string uri = "http://localhost:8080/userservice/users/userA"; 
    HttpWebRequest req = WebRequest.Create(uri) as HttpWebRequest; 
    req.Method = "PUT"; 
    req.ContentType = " application/xml"; 
    req.Proxy = null; 

回答

1

在WCF/REST中,您不传递对象,而是传递消息。

如果我这样做,作为第一步,我将创建一个与服务交互的WCF客户端。我将检查由WCF客户端传递的消息,然后使用HttpWebRequest复制该消息。

+0

谢谢你的提示 – 2009-10-12 06:41:42

3
string uri = "http://localhost:8080/userservice/users/userA"; 
    string user = "<User xmlns=\"http://schemas.datacontract.org/2004/07/RESTful\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><DOB>2009-01-18T00:00:00</DOB><Email>[email protected]</Email><Id>1</Id><Name>Sample User</Name><Username>userA</Username></User>"; 
     byte[] reqData = Encoding.UTF8.GetBytes(user); 

     HttpWebRequest req = WebRequest.Create(uri) as HttpWebRequest; 
     req.Method = "POST"; 
     req.ContentType = " application/xml"; 
     req.ContentLength = user.Length; 
     req.Proxy = null; 
     Stream reqStream = req.GetRequestStream(); 
     reqStream.Write(reqData, 0, reqData.Length); 

     HttpWebResponse resp = req.GetResponse() as HttpWebResponse; 
     string code = resp.StatusCode.ToString(); 

     //StreamReader sr = new StreamReader(resp.GetResponseStream()); 
     //string respStr = sr.ReadToEnd(); 
     Console.WriteLine(code); 
     Console.Read(); 

我找到了解决办法,我需要构造XML字符串我想通过,然后将其写入流