• java 跟.net webservice 互通问题(2)


    昨天跟国外的公司联调webservice回调环境,还是报错:

    soapStatus = 1 -

    <faultcode>soap:Client</faultcode>

    <faultstring>The request element <postSLOrderStatus xmlns='http://b2b.level3.com/voip/order/v4_1/'> was not recognized.</faultstring>

    <detail></detail>

    看来.net 跟java的调用真是存在问题,这两天经过同事帮忙,决定先在本地测试,我获得了他们发送的soap 包,

    找到了一篇资料,通过httpwebRequest来访问web service,如下:

    目录:

      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);
                }

     注意.net 的webservice 的nameplace 应该跟java webservice那边的web service nameplace相同,不然调用不能成功

  • 相关阅读:
    Kubernetes K8S之Helm部署、使用与示例
    Kubernetes K8S之鉴权RBAC详解
    多图详解Go的sync.Pool源码
    多图详解Go的互斥锁Mutex
    5.深入Istio源码:Pilot-agent作用及其源码分析
    ribbon源码分析
    nacos注册中心源码流程分析
    nacos配置中心使用
    基于nacos注册中心的ribbon定制规则
    golang调用百度音转文websocket服务“invalid frame type”错误排查及解决
  • 原文地址:https://www.cnblogs.com/encounter/p/2188787.html
Copyright © 2020-2023  润新知