WebService 中操作 HttpRequest / HttpResponse

客户端: (详见注释)

[c-sharp] view plaincopy
 
  1. // 创建一个DataTable  
  2. DataTable data = new DataTable("Project");  
  3. data.Columns.Add("Name");  
  4. data.Columns.Add("Birthday");  
  5. data.Rows.Add(new object[] { "Wendy", "1978/03/11" });  
  6. data.Rows.Add(new object[] { "Philip", "2000/11/05" });  
  7. data.Rows.Add(new object[] { "Felix", "1999/08/04" });  
  8. using (var ms = new MemoryStream())  
  9. {  
  10.     // 将DataTable用Xml格式写入流  
  11.     data.WriteXml(ms, XmlWriteMode.WriteSchema);  
  12.     var client = new WebClient();  
  13.     // 定义HttpRequest的Content-Type(xml,json等)  
  14.     client.Headers.Add("Content-Type", "text/xml");  
  15.     var url = "http://localhost:2609/Service1.asmx/SendXml";  
  16.     // Send HttpRequest  
  17.     var resp = client.UploadData(url, "POST", ms.ToArray());  
  18.     var strResp = System.Text.Encoding.UTF8.GetString(resp);  
  19.     MessageBox.Show(strResp);  
  20. }  



服务端:

[c-sharp] view plaincopy
 
      1. [WebMethod]  
      2. public void SendXml()  
      3. {  
      4.     // 获得客户端RAW HttpRequest  
      5.     var inputStream = HttpContext.Current.Request.InputStream;  
      6.     // 定义Response返回的格式是:Json  
      7.     var response = HttpContext.Current.Response;  
      8.     response.ContentType = "text/json";  
      9.     //var strXml = "";  
      10.     //using (var sr = new StreamReader(inputStream))  
      11.     //    strXml = sr.ReadToEnd();  
      12.     try  
      13.     {  
      14.         DataTable data = new DataTable();  
      15.         using (var xr = XmlReader.Create(inputStream))  
      16.             data.ReadXml(xr);  
      17.         // 将读入Xml的DataTable的行数返回客户端  
      18.         string count = "/"" + data.Rows.Count + "/"";  
      19.         response.BinaryWrite(System.Text.Encoding.UTF8.GetBytes(count));  
      20.     }  
      21.     catch (Exception ex)  
      22.     {  
      23.         response.BinaryWrite(System.Text.Encoding.UTF8.GetBytes(ex.Message));  
      24.     }  
      25. }  
客户端输出""3""
      1. PS: 如果客户端的HttpRequest满足SOAP序列化格式,WebService会为WebMethod将消息反序列化成参数。相对应的客户端代理类也是通过将消息反序列化成对象供客户端使用。

  转载自:http://blog.csdn.net/fangxing80/article/details/6279233

posted @ 2015-02-01 16:22  清幽紫竹  Views(378)  Comments(0Edit  收藏  举报