zoukankan      html  css  js  c++  java
  • 通过HttpWebRequest在后台对WebService进行调用

    目录:
      1 后台调用Webservice的业务需求
      2 WebService支持的交互协议
      3 如何配置WebService支持的协议
      4 后台对WebService的调用
      4.1 SOAP 1.1 后台调用实例
      4.2 SOAP 1.2 后台调用实例
      注:本文章的开发环境为VSS2008 .net FrameWork 3.5
      本文章设计到使用的代码示例的WebService 为
      服务路径:http://localhost/WebServiceTest/Service1.asmx
      服务接口:
      [WebMethod]
       public string HelloWorld(string StudentName,string PassWord)
       {
       return "Hello World";
       }
      1 后台调用Webservice的业务需求
       在实际开发环境中,我们常常调用WebService时,通过项目中引用现实部署的WebService的Asmx文件,生成客户端代理类的方式。这种方式将和WebService进行了二次封装,并以代理类的方式进行调用,有利用简单,快捷的开发。
      这种开发方式包含了两个重要的问题
      1) 在开发环境中必须可以访问需要调用的WebService,在开发一些大公司的内网系统时,我们往往在开发环境中访问不到,只仅仅在部署环境中访问。
      2)WebService的接口发生版本变更,我们的应用系统需要重新编译并部署。
       
      在发现以上的困惑后,直觉告诉我们,我们需要一种直接通过交互协议的方式进行访问WebService。就像网页爬虫一样,去交互业务操作。
      
      2 WebService支持的交互协议
       
      WebService支持 三种方式
      1)Http post 方式(注意这种方式只对于本机调试使用,在web服务部署在其他机器上,应用程序不能通过 Http Post方式调用)
       具体交互格式如下:
      POST /WebServiceTest/Service1.asmx/HelloWorld HTTP/1.1
      Host: localhost
      Content-Type: application/x-www-form-urlencoded
      Content-Length: length
      StudentName=string&PassWord=string
      2)SOAP1.1协议 注意Soap协议是基于HTTP的协议,也就是在HTTP的基础上再次封装
      交互格式如下:
      POST /WebServiceTest/Service1.asmx HTTP/1.1
      Host: localhost
      Content-Type: text/xml; charset=utf-8
      Content-Length: length
      SOAPAction: "http://tempuri.org/HelloWorld"
      <?xml version="1.0" encoding="utf-8"?>
      <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
       <soap:Body>
       <HelloWorld xmlns="http://tempuri.org/">
       <StudentName>string</StudentName>
       <PassWord>string</PassWord>
       </HelloWorld>
       </soap:Body>
      </soap:Envelope>
      3)SOAP1.2 协议
      交互格式如下:
      POST /WebServiceTest/Service1.asmx HTTP/1.1
      Host: localhost
      Content-Type: application/soap+xml; charset=utf-8
      Content-Length: length
      <?xml version="1.0" encoding="utf-8"?>
      <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
       <soap12:Body>
       <HelloWorld xmlns="http://tempuri.org/">
       <StudentName>string</StudentName>
       <PassWord>string</PassWord>
       </HelloWorld>
       </soap12:Body>
      </soap12:Envelope>
      3 如何配置WebService支持的协议
      WebService支持的协议 包含两种 Soap1.1 Soap1.2 对于webService 来讲可以通过配置文件配置,支持那些协议,默认的情况下 两种协议都支持。
      具体的配置方式为:
      在配置文件中
      <webServices>
       <protocols>
       <add name="HttpSoap1.2"/>
       <add name="HttpSoap1.1"/>
      </protocols>
      </webServices>
      
      4 后台对WebService的调用
      4.1 SOAP 1.1 后台调用实例
       string str1="/"双引号/""; 
       Console.WriteLine("新开始进行连接测试");
       string param = @"<?xml version=""1.0"" encoding=""utf-8""?>
       <soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
       <soap:Body>
       <HelloWorld xmlns=""http://tempuri.org/"">
       <StudentName>1</StudentName>
       <PassWord>1</PassWord>
       </HelloWorld>
       </soap:Body>
       </soap:Envelope>";
       byte[] bs = Encoding.UTF8.GetBytes(param);
       HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://fox-gaolijun/Short_Message/Service1.asmx");
       myRequest.Method = "POST";
       myRequest.ContentType = "text/xml; charset=utf-8";
       myRequest.Headers.Add("SOAPAction", "http://tempuri.org/HelloWorld");
       myRequest.ContentLength = bs.Length;
       Console.WriteLine("完成准备工作");
       using (Stream reqStream = myRequest.GetRequestStream())
       {
       reqStream.Write(bs, 0, bs.Length);
       }
       
       using (HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse())
       {
       StreamReader sr = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
       responseString = sr.ReadToEnd();
       Console.WriteLine("反馈结果" + responseString);
       } 
       Console.WriteLine("完成调用接口");
       }
       catch (Exception e)
       {
       Console.WriteLine(System.DateTime.Now.ToShortTimeString() + "LBS EXCEPTION:" + e.Message);
       Console.WriteLine(e.StackTrace);
       }
      4.1 SOAP 1.2 后台调用实例
      Console.WriteLine("新开始进行连接测试");
       string responseString;
       string param = @"<?xml version=""1.0"" encoding=""utf-8""?>
       <soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">
       <soap12:Body>
       <HelloWorld xmlns=""http://tempuri.org/"">
       <StudentName>1212</StudentName>
       <PassWord>12121</PassWord>
       </HelloWorld>
       </soap12:Body>
       </soap12:Envelope>";
       byte[] bs = Encoding.UTF8.GetBytes(param);
       HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(" http://fox-gaolijun/Short_Message/Service1.asmx");
       myRequest.Method = "POST";
       myRequest.ContentType = "application/soap+xml; charset=utf-8";
       myRequest.ContentLength = bs.Length;
       
       Console.WriteLine("完成准备工作");
       using (Stream reqStream = myRequest.GetRequestStream())
       {
       reqStream.Write(bs, 0, bs.Length);
       }
       using (HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse())
       {
       StreamReader sr = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
       responseString = sr.ReadToEnd();
       Console.WriteLine("反馈结果" + responseString);
       }
       Console.WriteLine("完成调用接口");
       }
       catch (Exception e)
       {
       Console.WriteLine(System.DateTime.Now.ToShortTimeString() + "LBS EXCEPTION:" + e.Message);
       Console.WriteLine(e.StackTrace);
       }(

    原创实例:

    public string login(MulUsreModel MulUsreItem)
            {
                //ServiceReferenceTest2.WebServiceTestSoapClient ser = new ServiceReferenceTest2.WebServiceTestSoapClient();
                //return ser.login2(MulUsreItem.userModel.UserNameeItem.user,MulUsrModel.PassWord);
                HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://10.116.91.145/mng2/WebService/WebServiceTest.asmx");
                httpWebRequest.Method = "POST";
                httpWebRequest.Timeout = 20000;
                string param = @"<?xml version=""1.0"" encoding=""utf-8""?>
                                <soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">
                                  <soap12:Body>
                                    <login2 xmlns=""http://tempuri.org/"">
                                      <username>1</username>
                                      <password>1</password>
                                    </login2>
                                  </soap12:Body>
                                </soap12:Envelope>";
                byte[] bs = Encoding.UTF8.GetBytes(param);
                httpWebRequest.ContentType = "application/soap+xml; charset=utf-8";
                httpWebRequest.ContentLength = bs.Length;
                using (Stream requestStream = httpWebRequest.GetRequestStream())
                {
                    requestStream.Write(bs, 0, bs.Length);
                }
                using (WebResponse myResponse = httpWebRequest.GetResponse())
                {
                    //在这里对接收到的页面内容进行处理
                    StreamReader sr = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);

                      XDocument rssXDoc = XDocument.Parse(sr.ReadToEnd());
                      return ((System.Xml.Linq.XElement)rssXDoc.Root.LastNode).Value;

    
                }
            }
  • 相关阅读:
    微信WeUI扩展组件
    redis—Spring中redis缓存的简单使用
    Spring整合Mybatis 之分页插件使用
    MD5—加密,加盐
    验证码—原生验证码工具类的使用
    jQuery—$让渡
    android学习笔记42——图形图像处理2——绘图
    android学习笔记41——图形图像处理1
    android学习笔记40——国际化和资源自适应
    android学习笔记39——使用原始资源
  • 原文地址:https://www.cnblogs.com/liuqiyun/p/6867478.html
Copyright © 2011-2022 走看看