我在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做些什么。使它工作?
感谢名单。
答案 0 :(得分:8)
为了增强ESB性能,默认情况下已启用直通传输,从ESB 4.6.0版本开始,而不是ESB 4.5.1的情况。看来你的代理服务依赖于基于SOAP体的调度,但传递传输不支持基于SOAP体的调度。基于SOAP体的调度构建消息体并使用第一个元素的本地名称来调度哪种效果严重影响代理性能,这是传递传输中不支持的原因。我们正在为未来的ESB版本修复此限制而不会失去传递传输的任何优势。
BTW目前您可以使用以下解决方法之一。
向代理服务发送消息时,将操作名称附加到端点URL
例如 - http://serverName/app/serviceName/operationName
修改客户端级代码以发送预期的SOAPAction值(如试用案例)
我不确定您的后端服务的WSDL是否定义为“”作为SOAPAction的值,如果是这种情况,您可以修改后端服务以使每个操作的值不是“”。作为JAX-WS服务的示例,您可以使用@WebMethod注释。
例如 - @WebMethod(action =“XXXX”)
注意:如果您的后端WSDL在客户端使用SOAPAction =“”发送消息时为SOAPAction定义了除“”以外的值,则客户端违反服务合同,需要在客户端级别修复。
答案 1 :(得分:0)
我遇到了与wso2 ESB 4.7相同的问题,我也为公司开发了Web服务。
对我来说有用的是将 soapAction 属性添加到wsdl soap:operation 元素,如下所示。
<soap:operation soapAction="http://localhost:8080/MyWebApp/services/hello" style="document"/>