zoukankan      html  css  js  c++  java
  • C# 通过模拟http请求来调用soap、wsdl

    C#调用webservice的方法很多,我说的这种通过http请求模拟来调用的方式是为了解决C#调用java的远程API出现各种不兼容问题。

    由于远程API不在我们的控制下,我们只能修改本地的调用代码来适应远程API。

    在以上情况下,我们就通过模拟http请求来去调用webservice。

    首先,我们要分析调用端口时,我们发送出去的数据。

    先抓个包看看,这里,我们没有办法用Fiddler来监听SOAP协议的内容,但是SOAP还是基于http协议的。

    用更底层的工具是能够抓到的。这里可以去百度一下,工具很多。

    不过我找了一个java写的,监听SOAP协议的小工具。《戳我下载》http://download.csdn.net/detail/a406502972/9460758

    抓到包了之后,直接post就行了,简单易懂,直接上代码:

     1         static string data = @"发送的内容";
     2         private static string contentType = "text/xml; charset=UTF-8";
     3         private static string accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-silverlight-2-b1, */*";
     4         private static string userAgent = "Axis2";
     5         /// <summary>
     6         /// 提交数据
     7         /// </summary>
     8         /// <param name="url"></param>
     9         /// <param name="cookie"></param>
    10         /// <param name="param"></param>
    11         /// <returns></returns>
    12         public static string PostWebContent(string url, CookieContainer cookie, string param) {
    13             byte[] bs = Encoding.ASCII.GetBytes(param);
    14             var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
    15             httpWebRequest.CookieContainer = cookie;
    16             httpWebRequest.ContentType = contentType;
    17             httpWebRequest.Accept = accept;
    18             httpWebRequest.UserAgent = userAgent;
    19             httpWebRequest.Method = "POST";
    20             httpWebRequest.ContentLength = bs.Length;
    21             using (Stream reqStream = httpWebRequest.GetRequestStream()) {
    22                 reqStream.Write(bs, 0, bs.Length);
    23             }
    24             var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
    25             Stream responseStream = httpWebResponse.GetResponseStream();
    26             string html = "";
    27             if (responseStream != null) {
    28                 StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);
    29                 html = streamReader.ReadToEnd();
    30                 streamReader.Close();
    31                 responseStream.Close();
    32                 httpWebRequest.Abort();
    33                 httpWebResponse.Close();
    34             }
    35             return html;
    36         }
  • 相关阅读:
    APIO2007 动物园
    SCOI2010 股票交易
    USACO13NOV No Change G
    洛谷 P3694 邦邦的大合唱站队
    洛谷 P6196 3月月赛 ERR1 代价
    洛谷月赛 ERR1 代价
    Splay 学习笔记
    HNOI2009 梦幻布丁
    乘法逆元
    【洛谷】【二分答案+最短路】P1462 通往奥格瑞玛的道路
  • 原文地址:https://www.cnblogs.com/likeli/p/5275279.html
Copyright © 2011-2022 走看看