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

  • 相关阅读:
    Thrift在微服务中的使用
    MySQL 必知必会
    IDEA 内使用 git
    分布式锁
    LeetCode 图
    LeetCode 位运算
    LeetCode 数组
    LeetCode 字符串
    LeetCode 哈希表
    LeetCode 栈和队列
  • 原文地址:https://www.cnblogs.com/turnip/p/11764555.html
Copyright © 2011-2022 走看看