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

                           通过HttpWebRequest在后台对WebService进行调用

    目录:

    1  后台调用Webservice的业务需求

    2 WebService支持的交互协议

    如何配置WebService支持的协议

    后台对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时,通过项目中引用现实部署的WebServiceAsmx文件,生成客户端代理类的方式。这种方式将和WebService进行了二次封装,并以代理类的方式进行调用,有利用简单,快捷的开发。

    这种开发方式包含了两个重要的问题

    1 在开发环境中必须可以访问需要调用的WebService,在开发一些大公司的内网系统时,我们往往在开发环境中访问不到,只仅仅在部署环境中访问。

    2WebService的接口发生版本变更,我们的应用系统需要重新编译并部署。

       

    在发现以上的困惑后,直觉告诉我们,我们需要一种直接通过交互协议的方式进行访问WebService。就像网页爬虫一样,去交互业务操作。

     

     

    2 WebService支持的交互协议

    WebService支持 三种方式

    1Http 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

     

    2SOAP1.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>

     

    3SOAP1.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>

     

    如何配置WebService支持的协议

    WebService支持的协议 包含两种 Soap1.1 Soap1.2 对于webService 来讲可以通过配置文件配置,支持那些协议,默认的情况下 两种协议都支持。

    具体的配置方式为:

    在配置文件中

    <webServices>

     <protocols>

        <add name="HttpSoap1.2"/>

        <add name="HttpSoap1.1"/>

    </protocols>

    </webServices>

     

     

    后台对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);

                }

     

    ---------------------------------------------------------------

    返回结果格式:

    SOAP1.2的反馈格式
    ——————————————————————————
    <?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>
    <HelloWorldResponse xmlns="http://tempuri.org/">
    <HelloWorldResult>string</HelloWorldResult>
    </HelloWorldResponse>
    </soap12:Body>
    </soap12:Envelope>
    ————————————————————

    Soap 1.1的反馈格式
    ————————————————————
    <?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>
    <HelloWorldResponse xmlns="http://tempuri.org/">
    <HelloWorldResult>string</HelloWorldResult>
    </HelloWorldResponse>
    </soap:Body>
    </soap:Envelope>

  • 相关阅读:
    SQLSERVER排查CPU占用高的情况
    bootstrap布局两列或者多列表单
    ASP.NET Redis 开发
    .NET 环境中使用RabbitMQ
    EasyNetQ介绍
    .Net使用RabbitMQ详解
    ASp.net中Froms验证方式
    全国-城市-百度地图中心点坐标
    IIS7.0下 HTTP 错误 404.15
    asp.net报错“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”的解决办法
  • 原文地址:https://www.cnblogs.com/fx2008/p/2247799.html
Copyright © 2011-2022 走看看