在WSO2 ESB 4.6中访问已发布的WS代理时出错:未找到EPR

ern*_*rny 1 wso2esb

我在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.
Run Code Online (Sandbox Code Playgroud)

来源如下:

<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>
Run Code Online (Sandbox Code Playgroud)

我该怎么办4.6.使它工作?

感谢名单.

小智 8

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

BTW目前您可以使用以下解决方法之一.

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

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

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

  3. 我不知道你的后端服务的WSDL定义""为的SOAPAction的值,如果这是你可以修改的后端服务,具有比其他值的情况下""每各项操作.作为JAX-WS服务的示例,您可以使用@WebMethod注释.

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

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