1

我在 4.5.1 和 4.6 中部署了完全相同的 WS-proxy。使用 4.5.1 它可以正常工作,但是使用 4.6 我得到:

ERROR - AxisEngine The endpoint reference (EPR) for the Operation not found is /services/registro.registroHttpSoap11Endpoint and the WSA Action = . If this EPR was previously reachable, please contact the server administrator.

来源如下:

<proxy xmlns="http://ws.apache.org/ns/synapse" name="registro" transports="http" statistics="disable" trace="disable" startOnLoad="true">
  <target>
    <outSequence>
      <send/>
    </outSequence>
    <endpoint>
      <address uri="http://localhost:15080/SIGEM_RegistroPresencialWS/services/ServicioRegistroWebService"/>
    </endpoint>
   </target>
   <publishWSDL uri="http://localhost:15080/SIGEM_RegistroPresencialWS/services/ServicioRegistroWebService?wsdl"/>
   <description></description>
</proxy>

我必须为 4.6 做什么。让它工作?

谢谢。

4

2 回答 2

8

为了增强 ESB 性能,从 ESB 4.6.0 版本开始默认启用直通传输,而 ESB 4.5.1 不是这种情况。您的代理服务似乎依赖于基于 SOAP 主体的调度,但直通传输不支持基于 SOAP 主体的调度。基于 SOAP 主体的调度构建消息主体并使用第一个元素的本地名称进行调度,这会严重影响代理性能,这就是直通传输不支持它的原因。我们正在为未来的 ESB 版本修复此限制,同时不会失去直通传输的任何优势。

顺便说一句,目前您可以使用以下解决方法之一。

  1. 向代理服务发送消息时,将操作名称附加到端点 URL

    例如 -http://serverName/app/serviceName/operationName

  2. 修改客户端代码以发送预期的 SOAPAction 值(如 Try-It 案例)

  3. 我不确定您的后端服务的 WSDL 将“”定义为 SOAPAction 的值,如果是这种情况,您可以将后端服务修改为每个操作都具有“”以外的值。作为 JAX-WS 服务的示例,您可以为此使用 @WebMethod 注释。

例如 - @WebMethod(action="XXXX")

注意:如果您的后端 WSDL 为 SOAPAction 定义了“”以外的值,而您的客户端使用 SOAPAction="" 发送消息,则客户端违反了服务合同,需要在客户端级别进行修复。

于 2013-03-21T19:47:23.043 回答
0

我在使用 wso2 ESB 4.7 时也遇到了同样的问题,而且 Web 服务也是我为公司开发的。

对我有用的是将soapAction属性添加到wsdl soap:operation元素,如下所示。

<soap:operation soapAction="http://localhost:8080/MyWebApp/services/hello" style="document"/>
于 2013-10-21T09:19:25.727 回答