在使用SoapUI测试WCF服务时出现SOAP Action不匹配的错误。

20

我正在使用SOAPUI测试一个WCF服务,并且输入了样本输入。当我运行时,我会得到一个SOAP异常,如下所示:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
   <s:Header>
     <a:Action s:mustUnderstand="1">http://www.w3.org/2005/08/addressing/fault</a:Action>
   </s:Header>
<s:Body>
 <s:Fault>
     <s:Code>
        <s:Value>s:Sender</s:Value>
        <s:Subcode>
           <s:Value>a:ActionMismatch</s:Value>
        </s:Subcode>
     </s:Code>
     <s:Reason>
        <s:Text xml:lang="en-US">The SOAP action specified on the message, '', does not match the HTTP SOAP Action, 'http://XXX.XX.XXXX/IXXXXXX/AddOrderInfromation'.</s:Text>
     </s:Reason>
     <s:Detail>
        <a:ProblemHeaderQName>a:Action</a:ProblemHeaderQName>
     </s:Detail>
  </s:Fault>
 </s:Body>
</s:Envelope>

在博客中,他们要求添加Soap Action。如何在我的请求中添加Soap Action:

 <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wkus="http://XXX.XX.XXXX/IXXXXXX">
  <soap:Header />
  <soap:Body>
  <ns1:AddOrderInfromation>
     <!--Optional:-->
     <ns1:inputsting>
<ns1:AddOrderInfromation>
  <ns1:OrderNo>4500146</ns1:OrderNo>
  <ns1:OrderDate>08/22/2014</ns1:OrderDate>
  <ns1:TotalItems>1</ns1:TotalItems>         
</ns1:AddOrderInfromation>
 </ns1:inputsting>
 </ns1:AddOrderInfromation>

请提供建议。谢谢您的帮助。

5个回答

37

这很可能是一个 WS-A 寻址问题。

在您的请求的 WS-A 标签中,检查 启用WS-A寻址。 您还可能需要检查 添加默认was:To


可能需要尝试其他的WS-A addressing设置。在我的情况下,我不得不将WS-A version200408更改为200508 - MiguelSlv

7
您的Web服务返回了一个SOAPFault,表示Web服务期望一个SOAP Action http头。为了在SOAPUI中的SOAP请求中添加一个SOAP action,您需要添加一个名为SOAPAction的HTTP头。请按照以下步骤执行:
  • 在SOAP测试请求的底部有一些选项卡(Header(0)Attachments(0)...),打开Header(0)选项卡。
  • 然后使用“+”添加按钮,添加一个名称为SOAPAction的头和您的值:

enter image description here

希望这能帮到您。


是的,没错。您能否回复如何使用Java客户端添加此内容。我使用Apache Cxf从wsdl生成了存根。 - james2611nov
@james2611nov 看一下这个问题,它解释了使用CXF在HTTP头中添加SOAPHeader的可能方法。如果这不符合您的要求,请尝试提出自己的问题,并更详细地描述您的确切问题。希望这可以帮助您 :) - albciff
我在这里发布了。https://dev59.com/Qonda4cB1Zd3GeqPC7fH 谢谢。 - james2611nov

6

我也曾遇到这个问题,通过在SoapUI中启用WS-A addressing解决了它。 来自SoapUI的截图


4

这个错误也会因为xml请求中的语法不正确而发生。

例如:如果缺少闭合标签,它将抛出相同的错误。

    </soap:Body>
</soap:Envelope>

在下面的代码中:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wkus="http://XXX.XX.XXXX/IXXXXXX">
    <soap:Header />
    <soap:Body>
        <ns1:AddOrderInfromation>
            <ns1:inputsting>
                <ns1:AddOrderInfromation>
                    <ns1:OrderNo>4500146</ns1:OrderNo>
                    <ns1:OrderDate>08/22/2014</ns1:OrderDate>
                    <ns1:TotalItems>1</ns1:TotalItems>         
                </ns1:AddOrderInfromation>
            </ns1:inputsting>
        </ns1:AddOrderInfromation>

如果出现意外的语法,例如:

    <ns1:OrderNo>4500146**<ns1:OrderNo>**

替代

    <ns1:OrderNo>4500146**</ns1:OrderNo>**

或者这个

    <ns1:**OrderNo**4500146</ns1:OrderNo>

替代

    <ns1:**OrderNo>**4500146</ns1:OrderNo>

0

我刚遇到了类似的问题。我是通过以下方式解决的:

https://blabla.com/xyz.svc?wsdl -->在浏览器中打开wsdl网址,您将看到方法内部的一些操作;

enter image description here

我使用Python进行开发,并添加了以下soapAction;

headers = {'Content-type': 'text/xml;charset=UTF-8',
           'SOAPAction': 'http://tempuri.org/IArasCargoIntegrationService/GetQueryXML'
           }

它起作用了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接