服务器未能识别 HTTP 头 SOAPAction 的值

来源:互联网 发布:炉石dk算法术还是随从 编辑:程序博客网 时间:2024/05/21 19:39

日志

小玩子
加博友关注她
她的网易微博

最新日志

  • 美国人最爱用的个性短语集锦
  • 英语下午茶:从现在开始,由
  • 由于未能创建 Microsoft Vis
  • 结构实现接口 C#中类与结构
  • SQL SERVER 2005字符串转换
  • 将整型数字转换为大写汉字

该作者的其他文章

    博主推荐

      相关日志

        随机阅读

        • 善待自己 从心开始
        • 现在的年青夫妻为啥不敢要孩子?
        • 男人的“燃烧”底线
        • 不妨测量一下自己的性品位
        • 【引用】开启人体自愈机能
        • 解析麦当娜献唱2012超级碗的高级定制造型

        首页推荐

        • 一位渴望出轨的女性公关
        • 史记中记载古代淫乱场面
        • 清末代皇太后退位后生活
        • 酒后乱性能征服女人吗?
        • 日本的性教育堪比性虐待
        • 潘采夫:录像厅的三级片
        更多>>


        服务器未能识别 HTTP 头 SOAPAction 的值 

        2010-10-25 14:44:48|  分类:错误大集合 |  标签:|字号订阅

        今天用CXF去调用.net写的一个webservice服务报错,网上搜个解决办法,做个记录

        服务器未能识别 HTTP 头 SOAPAction 的值 - 小玩子 - 世界任我行!

        解决办法:服务器未能识别 HTTP 标头 SOAPAction 的值

        本文主要探讨跨平台调用 Web Service 出现: " 服务器未能识别 HTTP 标头 SOAPAction 的值 " 的解决办法。

        症状一:

        Web Service + ASP.NET 应用程序部署到服务器默认目录中,在 IE 中用 http://< 服务器地址 >/< 程序目录名 >/< 默认启动页面名 > 发 生 “ 服务器未能识别 HTTP 标头 SOAPAction 的值 ” 错误。

        症状二:

        在 Java 平台上调用 .NET Web Service 的服务时,出现 " 服务器未能识别 HTTP 标头 SOAPAction 的值 " 。

        症状三:

        在 Java 平台下调用 .NET WEB Service ,出现数据时有时无。

        解决对策:

        给 .NET 的 WebService 类(即 .asmx 文件下的类)添加属性 [SoapDocumentService(RoutingStyle=SoapServiceRoutingStyle.RequestElement)]

        以下是NET代码,

        using System;
        using System.Collections;
        using System.ComponentModel;
        using System.Data;
        using System.Web;
        using System.Web.Services;
        using System.Web.Services.Protocols;

        namespace WebService
        {
            /// <summary>
            /// Service1 的摘要说明
            /// </summary>
            [WebService(Namespace = "http://tempuri.org/")]
            [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
            [ToolboxItem(false)]
            // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
            // [System.Web.Script.Services.ScriptService]
            [SoapDocumentService(RoutingStyle = SoapServiceRoutingStyle.RequestElement)]
            public class Service1 : System.Web.Services.WebService
            {

                [WebMethod]
                public string HelloWorld()
                {
                    return "Hello World";
                }
                [WebMethod]
                public USER GetObj()
                {
                    USER user = new USER();
                    user.Name = "习明凡";
                    user.Pass = "123456";
                    return user;
                }
            }
        }

        小知识:

        什么是 SoapAction ?它在 WSDL 中有何作用?

        SOAPAction HTTP request header 被用来标识 SOAP HTTP 请求的目的地,其值是个 URI 地址。 SOAP 发送并不限制格式、 URI 特征或其必须可解析,那么在这种情况下,发送一个 HTTP SOAP 请求时,其 HTTP 客户端必须使用 / 指明 SOAPAction HTTP request header 。

        SOAPAction header 的内容可以被用在服务端,诸如:防火墙适当的过滤基于 HTTP 的 SOAP 请求消息等场景。 SOAPAction header 的值为空串 ("") 表示 SOAP 消息的目的地由 HTTP 请求的 URI 标识;无值则表示没有指定这条消息的目的地。

        java代码:


        import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
        import org.tempuri.Service1Soap;
        import org.tempuri.USER;

        public class Test {

        public static void main(String[] args) {
         
           JaxWsProxyFactoryBean soapFactoryBean = new JaxWsProxyFactoryBean();
           soapFactoryBean.setAddress("http://10.8.0.143/webservice/Service1.asmx");
           soapFactoryBean.setServiceClass(Service1Soap.class);
           Object o = soapFactoryBean.create();
           Service1Soap soap = (Service1Soap)o;
           System.out.println(soap.helloWorld());
         
           USER user = soap.getObj();
           System.out.println(user.getName());
        }
        }