Java调用.Net写的WebService报异常:服务器未能识别 HTTP 头 SOAPAction 的值
来源:互联网 发布:体检宝的数据可信吗 编辑:程序博客网 时间:2024/05/21 09:53
异常及解决方案
使用JAX-WS调用.Net写的WebService报了如下异常:
javax.xml.ws.soap.SOAPFaultException: System.Web.Services.Protocols.SoapException: 服务器未能识别 HTTP 头 SOAPAction 的值: ....网络上很多信息都提示说,给.NET的WebService类(即.asmx文件下的类)添加属性:
[SoapDocumentService(RoutingStyle=SoapServiceRoutingStyle.RequestElement)]即可解决。
但你知道为什么吗?
虽然JAVA和.NET都是实现W3C制定的WebService规范,但其实两者在实现上并没有完全保持一致,在实现SOAP规范1.1中JAX-WS并不需要SOAPAction,但.NET中是需要的,哪怕是空。这就导致了上面的异常。
那么SOAPAction到底是作什么的呢?
SOAPAction 被用来标识SOAP HTTP请求的目的地。
在.NET中的实现原理是这样的:默认情况下,.asmx 处理程序使用 SOAPAction 头的值来执行消息调度。当客户端调用WebService时,.asmx 处理程序会通过查看SOAPAction确定要调用哪个方法。如:
POST /math/math.asmx HTTP/1.1 Host: localhost Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://tempuri.org/Add" <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <Add xmlns="http://tempuri.org/"> <x>33</x> <y>66</y> </Add> </soap:Body> </soap:Envelope>通过SOAPAction可以确定要调用Add方法。
SOAP信息中还有种路由方式那就是使用<Body>XML 元素之后的第一个子元素,如:
POST /math/math.asmx HTTP/1.1 Host: localhost Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "" <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <Add xmlns="http://tempuri.org/"> <x>33</x> <y>66</y> </Add> </soap:Body> </soap:Envelope>当SOAPAction为空时,则使用<soap:Body> 第一个子元素加上其命名空间来路由:http://tempuri.org/Add。这就是上面的设置
RoutingStyle=SoapServiceRoutingStyle.RequestElementSoapServiceRoutingStyle是枚举类型:
- SoapAction :SOAP 消息是根据 SOAPActionHTTP 标头路由的,默认值。
- RequestElement :SOAP 消息是根据 SOAP 消息中 <Body>XML 元素之后的第一个子元素路由的。
解决方案
所以有两种解决方案可以处理这个异常:
- JAX-WS中加入SOAPAction并设置其值为空,可惜JAX-WS没提供相关设置API,但CFX、axis等开源框架提供了API;
- 设置.NET不使用SOAPAction,而使用<Body>XML 元素之后的第一个子元素做为路由
RoutingStyle=SoapServiceRoutingStyle.RequestElement
- Java调用.Net写的WebService报异常:服务器未能识别 HTTP 头 SOAPAction 的值
- Java调用.Net WebService 发生异常:服务器未能识别 HTTP 头 SOAPAction 的值
- Java调用.net的webService产生“服务器未能识别 HTTP 标头 SOAPAction 的值”错误
- 解决:Java调用.net的webService产生“服务器未能识别 HTTP 标头 SOAPAction 的值”错误
- webservice 服务器未能识别 HTTP 头 SOAPAction 的值
- 解决办法:服务器未能识别 HTTP 标头 SOAPAction 的值
- 服务器未能识别 HTTP 标头 SOAPAction 的值
- 解决办法:服务器未能识别 HTTP 标头 SOAPAction 的值
- 服务器未能识别 HTTP 标头 SOAPAction 的值
- axis2 服务器未能识别 HTTP 头 SOAPAction 的值 解决办法
- webservices 服务器未能识别 HTTP 头 SOAPAction 的值
- 解决办法:服务器未能识别 HTTP 标头 SOAPAction 的值
- 服务器未能识别http标头SOAPAction的值
- 服务器未能识别 HTTP 标头 SOAPAction 的值
- 服务器未能识别 HTTP 头 SOAPAction 的值
- 服务器未能识别 HTTP 头 SOAPAction 的值
- 服务器未能识别 HTTP 标头 SOAPAction 的值
- 服务器未能识别 HTTP 头 SOAPAction 的值 解决方案
- 影响世界的100个经典管理定律
- Source Insight查看ARM汇编源程序 && Source Insight打开project窗口出错 && 高亮显示程序 && 标题栏显示全路径 .
- 使用Windows API实现运行时动态获取程序文件版本信息
- bdbus_lxb下载
- hdu3927
- Java调用.Net写的WebService报异常:服务器未能识别 HTTP 头 SOAPAction 的值
- android ndk提高编译速度
- Android Toast自定义
- Web app root system property already set to different value: 'webapp.root'
- Android强制设置横屏或竖屏
- magento常用插件
- VS2010设置编译路径
- 给力的jQuery导航下拉菜单插件
- C++名字隐藏对公有继承的影响