zoukankan      html  css  js  c++  java
  • C#使用Http的Post方式请求webservice

    webservice是以前比较流行的跨系统、跨语言、跨平台的数据交互技术。最近工作中调用Java作为服务端开放的webser,
    我是通过VS205生成webservice工具类的方式进行接口调用的。用这种方式的理由是对自身的工程项目影响较小,系统
    生成一个工具了,只需要将此工具类放置对应的目录下并包含在项目中即可。
    这种方式看似很好,但是我最近的这个项目出现一个奇怪的问题,就是用webservice工具类调用接口返回值居然是null,
    用SoapUI测试却是正常返回了数据,于是我使用Postman测试了下,发现Postman也返回了数据,不过返回的xml数据需要
    html转义下。 网上搜索了下,大概意思是指java服务端在将java对象进行序列化过程中可能有指定的数据类型与C#序列化存在差异。
    反正意思大概是这个意思,我在想竟然Postman可以交互,那我直接用http请求得了。

    用http请求,直接将soapUI中的入参在代码中拼接好即可,如下:

     1  /// <summary>
     2         /// 生成Http Post入参
     3         /// </summary>
     4         /// <param name="post"></param>
     5         /// <returns></returns>
     6         private string CreateHttpRequest(string post)
     7         {
     8             StringBuilder sb = new StringBuilder();
     9             sb.Append(@"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:exc=访问地址'>");
    10             sb.Append("<soapenv:Header/>");
    11             sb.Append("<soapenv:Body>");
    12             sb.Append("<exc:HisWxEccute>");
    13             sb.Append("<exc:xmlString>");
    14             sb.Append(post);
    15             sb.Append("</exc:xmlString>");
    16             sb.Append("</exc:HisWxEccute>");
    17             sb.Append("</soapenv:Body>");
    18             sb.Append("</soapenv:Envelope>");
    19             return sb.ToString();
    20         }
    View Code

    使用方法:

    1  string input = CreateHttpRequest(req);              
    2  string result = WebRequestHelper.Current.HttpPost(Url, input, Encoding.UTF8, Encoding.UTF8);

    感觉这种方式比生产webservice代理类更爽啊啊~

  • 相关阅读:
    Hbase与Maven工程的Spring配置笔记
    CentOS7.0+Hadoop2.7.2+Hbase1.2.1搭建教程
    利用Python进行博客图片压缩
    Qt下Armadillo矩阵函数库的添加
    Qt下Eigen矩阵函数库的添加
    OpenCV2.4.13+VS2013配置方法
    OpenCV2.4.13+Qt5.6.2配置方法
    异想家Win10系统安装的软件与配置
    异想家Win7系统安装的软件与配置
    STM32学习笔记:基础例子
  • 原文地址:https://www.cnblogs.com/hunanzp/p/7498853.html
Copyright © 2011-2022 走看看