zoukankan      html  css  js  c++  java
  • WebService 中操作 HttpRequest / HttpResponse (一)

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

    客户端: (详见注释)

    // 创建一个DataTable
    DataTable data = new DataTable("Project");
    data.Columns.Add("Name");
    data.Columns.Add("Birthday");
    data.Rows.Add(new object[] { "Wendy", "1978/03/11" });
    data.Rows.Add(new object[] { "Philip", "2000/11/05" });
    data.Rows.Add(new object[] { "Felix", "1999/08/04" });
    using (var ms = new MemoryStream())
    {
        // 将DataTable用Xml格式写入流
        data.WriteXml(ms, XmlWriteMode.WriteSchema);
        var client = new WebClient();
        // 定义HttpRequest的Content-Type(xml,json等)
        client.Headers.Add("Content-Type", "text/xml");
        var url = "http://localhost:2609/Service1.asmx/SendXml";
        // Send HttpRequest
        var resp = client.UploadData(url, "POST", ms.ToArray());
        var strResp = System.Text.Encoding.UTF8.GetString(resp);
        MessageBox.Show(strResp);
    }


    服务端:

    [WebMethod]
    public void SendXml()
    {
        // 获得客户端RAW HttpRequest
        var inputStream = HttpContext.Current.Request.InputStream;
        // 定义Response返回的格式是:Json
        var response = HttpContext.Current.Response;
        response.ContentType = "text/json";
        //var strXml = "";
        //using (var sr = new StreamReader(inputStream))
        //    strXml = sr.ReadToEnd();
        try
        {
            DataTable data = new DataTable();
            using (var xr = XmlReader.Create(inputStream))
                data.ReadXml(xr);
            // 将读入Xml的DataTable的行数返回客户端
            string count = "/"" + data.Rows.Count + "/"";
            response.BinaryWrite(System.Text.Encoding.UTF8.GetBytes(count));
        }
        catch (Exception ex)
        {
            response.BinaryWrite(System.Text.Encoding.UTF8.GetBytes(ex.Message));
        }
    }

    客户端输出""3""

    PS: 如果客户端的HttpRequest满足SOAP序列化格式,WebService会为WebMethod将消息反序列化成参数。相对应的客户端代理类也是通过将消息反序列化成对象供客户端使用。
    ————————————————
    版权声明:本文为CSDN博主「机器人」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/fangxing80/article/details/6279233

  • 相关阅读:
    将博客部署到k3s中
    docker/docker swarm学习
    windows共享文件夹使用中的问题(SMB协议)
    洛谷P1280 尼克的任务 题解 动态规划/最短路
    CF1B.Spreadsheets(电子表格) 题解 模拟
    洛谷P1595 信封问题 题解 错排问题
    洛谷P1809 过河问题 经典贪心问题
    CF1238E.Keyboard Purchase 题解 状压/子集划分DP
    洛谷P2719 搞笑世界杯 题解 概率DP入门
    Treap(树堆)入门
  • 原文地址:https://www.cnblogs.com/turnip/p/11764555.html
Copyright © 2011-2022 走看看