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

  • 相关阅读:
    SCAU 12新生赛 H 拥挤的华农校巴
    C#实现让CPU占用率曲线听你的指挥 可指定运行核心
    追MM与设计模式的有趣见解
    FTP操作类
    怎么知道页面被放大缩小了
    SerialPort同步和异步数据读取
    Java Web 应用程序转换为 ASP.NET
    ASP.NET中进行消息处理(MSMQ)
    解压缩文件类
    怎样成为优秀的软件模型设计者?
  • 原文地址:https://www.cnblogs.com/turnip/p/11764555.html
Copyright © 2011-2022 走看看