我有一个简单的网络方法。当我打电话给我时,我得到以下错误。
服务器无法识别HTTP标头SOAPAction启动的值。
我们从java客户端调用webmethod,然后将以下代码添加到标题中。
addRequestHeader("SOAPAction", "initiate");
如何将其添加到服务器代码(C#)的标题中?
答案 0 :(得分:0)
我决定在这里发布我自己的答案,因为我已经失去了几个小时,而且我认为,尽管这个问题的答案已被接受(http://stackoverflow.com/questions/352174/server -did-not-recognition-of-http-header-soapaction / 14084341#14084341)非常好,并指出我正确的方向(是的,它有一个投票),它不够详细解释什么我的申请是错的,至少在我的情况下。
我在OpenESB 2.2中运行BPEL模块,而我的复合应用程序的测试用例失败,出现以下错误:
Caused by: System.Web.Services.Protocols.SoapException: Server did not recognize the value of HTTP Header SOAPAction: .
在做了一些研究后,我注意到外部WSDL具有解决此问题所需的所有线索,例如,我使用以下Web服务通过Web服务编排来验证信用卡号:{ {3}}
如果你检查
<wsdl:binding name="CCCheckerSoap" type="tns:CCCheckerSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="ValidateCardNumber">
<soap:operation soapAction="http://www.webservicex.net/ValidateCardNumber" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
...
但是,一旦您创建了复合应用程序并使用调用此外部WSDL服务的BPEL构建项目,由于某种原因(错误?),复合应用程序服务程序集(CASA)绑定的XML生成为空soapAction参数:
<binding name="casaBinding1" type="ns:CCCheckerSoap">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="ValidateCardNumber">
<soap:operation soapAction="" style="document"/>
<input>
<soap:body use="literal"/>
</input>
将适当的soapAction(http://www.webservicex.net/ValidateCardNumber)复制到此参数后,应用程序的测试用例将正确并返回预期的Soap响应。
<soap:operation soapAction="http://www.webservicex.net/ValidateCardNumber" style="document"/>
所以,这是一个更具体的解决方案,我决定根据此博客文章中的信息进行记录:http://www.webservicex.net/CreditCard.asmx?WSDL。
这意味着(至少在我的情况下)您正在访问Web服务 使用SOAP并在HTTP请求中传递SOAPAction参数 与服务期望的不符。