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

本文介绍了解决Java调用WebService时出现的“服务器未能识别HTTP头SOAPAction”的错误方法,通过设置正确的SOAPActionURI来解决该问题,并进一步提供了一个示例代码。当遇到“无法识别请求元素”的错误时,还需检查命名空间。


在用java发送给webservice服务器的时候报如下错误:
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Client
faultSubcode: 
faultString: 服务器未能识别 HTTP 头 SOAPAction 的值: 。
faultActor: 
faultNode: 
faultDetail: 
{http://xml.apache.org/axis/}stackTrace:服务器未能识别 HTTP 头 SOAPAction 的值: 。
解决办法:
Call call = (Call)service.createCall();

//加入如下的方法:在调用的时候直接写
call.setSOAPActionURI(http://rb-ht.com/方法名);


写好的调用的例子如下:
public static String invokeRemoteAddr(String wsdl, String method,
Object[] objects) throws Exception {
Service service = new Service();
Call call;
try {
call = (Call) service.createCall();
call.setSOAPActionURI("http://tempuri.org/receiveDataTask");
call.setTargetEndpointAddress(wsdl);
call.setOperationName(method);// WSDL里面描述的接口名称
call.addParameter("orig",
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);// 接口的参数
call.addParameter("sign",
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);// 接口的参数
call.setReturnType(org.apache.axis.encoding.XMLType.AXIS_VOID);// 设置返回类型
call.invoke(objects);
return "end";
} catch (ServiceException e) {
throw new Exception(e);
}


}


如果修改后还是有错误:

    1.java调用错误变成了:faultString: 无法识别请求元素 <GetTestQuestions xmlns=''>。    
解决办法:这个时候仔细检查targetNameSpace命名空间是否正确、配置正确后、即可

当出现 `System.Web.Services.Protocols.SoapException: Server did not recognize the value of HTTP Header SOAPAction` 异常时,通常表明客户端发送的 `SOAPAction` HTTP 服务器端期望的命名空间或操作不匹配。解决此类问题可以从以下几个方面入手: ### 1. 检查 SOAPAction 的格式和内容 `SOAPAction` 通常应为 `"命名空间#操作名"` 的格式。例如: ``` SOAPAction: "http://example.com/ns#MyOperation" ``` 如果命名空间或操作名称拼写错误,或者服务器端未定义该操作,则会引发此异常。确保客户端请求中的 `SOAPAction` 与服务端定义的 Web 服务接口一致 [^1]。 ### 2. 验证 Web 服务定义(WSDL) 使用 WSDL 文件生成客户端代理类时,确保 WSDL 文件是最新的,并且与服务器端服务定义一致。若服务端接口发生变更而客户端未更新代理类,则可能导致 `SOAPAction` 不匹配的问题 [^2]。 ### 3. 使用 SoapHeaderAttribute 自定义命名空间 在服务端的 WebMethod 上使用 `SoapDocumentMethodAttribute` 明确定义 `Action` 和 `ResponseAction` 属性,以确保服务器能正确识别传入的 `SOAPAction` 。例如: ```csharp [WebMethod] [SoapDocumentMethod(Action = "http://example.com/ns/MyOperation", ResponseAction = "http://example.com/ns/MyOperationResponse")] public string MyOperation(string input) { return input; } ``` 该方式可避免因默认命名空间导致的识别失败 [^1]。 ### 4. 检查 Web 服务部署和 IIS 配置 确保 Web 服务正确部署,且 IIS 应用程序池的 .NET Framework 版本与项目目标框架兼容。若服务未正确加载,也可能导致服务器无法识别任何 `SOAPAction` [^3]。 ### 5. 使用 Fiddler 或 Wireshark 抓包调试 通过抓包工具查看实际请求中的 `SOAPAction` 内容,确认其是否与服务端定义一致。这有助于排查因客户端动态生成信息而导致的格式错误 [^2]。 ### 6. 检查服务端日志和事件查看器 在服务器端查看应用程序日志或 Windows 事件查看器,定位更详细的错误信息。例如,.NET 运行时可能记录更具体的解析错误或命名空间不匹配信息 [^3]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值