• WebService 中操作 HttpRequest / HttpResponse (一)


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

    客户端: (详见注释)

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



    服务端:

     1 [WebMethod]  
     2 
     3 public void SendXml()  
     4 
     5 {  
     6 
     7     // 获得客户端RAW HttpRequest   
     8 
     9     var inputStream = HttpContext.Current.Request.InputStream;  
    10 
    11     // 定义Response返回的格式是:Json   
    12 
    13     var response = HttpContext.Current.Response;  
    14 
    15     response.ContentType = "text/json";  
    16 
    17     //var strXml = "";   
    18 
    19     //using (var sr = new StreamReader(inputStream))   
    20 
    21     //    strXml = sr.ReadToEnd();   
    22 
    23     try  
    24 
    25     {  
    26 
    27         DataTable data = new DataTable();  
    28 
    29         using (var xr = XmlReader.Create(inputStream))  
    30 
    31             data.ReadXml(xr);  
    32 
    33         // 将读入Xml的DataTable的行数返回客户端   
    34 
    35         string count = "/"" + data.Rows.Count + "/"";  
    36 
    37         response.BinaryWrite(System.Text.Encoding.UTF8.GetBytes(count));  
    38 
    39     }  
    40 
    41     catch (Exception ex)  
    42 
    43     {  
    44 
    45         response.BinaryWrite(System.Text.Encoding.UTF8.GetBytes(ex.Message));  
    46 
    47     }  
    48 
    49 }  



    客户端输出""3""

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

  • 相关阅读:
    git
    uniapp
    laravel
    laravel
    js
    js -上传文件获取名字赋值
    laravel
    持续集成
    持续集成
    持续集成
  • 原文地址:https://www.cnblogs.com/pigddyou/p/3003762.html
Copyright © 2020-2023  润新知