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代理类更爽啊啊~

posted @ 2017-09-09 17:46  长沙大鹏  阅读(6811)  评论(3编辑  收藏  举报