服务器无法识别HTTP标头SOAPAction启动的值

时间:2011-10-31 22:03:07

标签: c# web-services

我有一个简单的网络方法。当我打电话给我时,我得到以下错误。

  

服务器无法识别HTTP标头SOAPAction启动的值。

我们从java客户端调用webmethod,然后将以下代码添加到标题中。

addRequestHeader("SOAPAction", "initiate"); 

如何将其添加到服务器代码(C#)的标题中?

1 个答案:

答案 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参数   与服务期望的不符。