WebService 中操作 HttpRequest / HttpResponse (一) - Lullaby's Blog - 博客频道 - CSDN.NET

来源:互联网 发布:linux进入数据库命令 编辑:程序博客网 时间:2024/06/05 04:14

原文链接

REST WCF 使得我们调用Web服务时,可以通过HttpRequest的交互简单完成。那么老版的WebService能否做到呢?WebService中通过HttpContext.Current.Rquest/Response,我们一样也可以改造WebMethod。

客户端: (详见注释)

[c-sharp] view plain copy
  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 plain copy
  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""

PS: 如果客户端的HttpRequest满足SOAP序列化格式,WebService会为WebMethod将消息反序列化成参数。相对应的客户端代理类也是通过将消息反序列化成对象供客户端使用。

0 0
原创粉丝点击