Apache CXF 无法发送消息,原因是:java.net.SocketException:连接重置

Apache CXF Could not send message caused by: java.net.SocketException: Connection reset

我是 运行 tomcat 服务器,正在尝试使用 .NET SOAP WS。 apache.cxf.

.NET WS 在其一侧有集群,当其中一台机器上执行重启时,我得到

javax.xml.ws.WebServiceException: Could not send Message.
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:148)
...
Caused by: java.net.SocketException: Connection reset

为了避免这种情况,我想使用 connection=close header 仅用于此 WS 消耗。

因此,在创建 SOAP 消息时,我发送

HTTPConduit conduit = (HTTPConduit) iMyFlowWSClient.getConduit();
    conduit.getClient().setConnection(ConnectionType.CLOSE);

而且我在 wireshark 上看到 header 得到了正确的值:

Connection: close\r\n

但是,当 java.xml.ws.Service 的构造函数初始化 wsdl url 时执行第一次调用 WS(看起来像 xsd 的导入):

protected Service(java.net.URL wsdlDocumentLocation, QName serviceName) {
    delegate = Provider.provider().createServiceDelegate(wsdlDocumentLocation,
            serviceName,
            this.getClass());
}

我在 Wireshark 上看到下一个 headers:

Hypertext Transfer Protocol
    GET /MyFlow.svc?wsdl HTTP/1.1\r\n
    Content-Type: text/xml\r\n
    Accept: */*\r\n
    User-Agent: Apache CXF 3.0.0\r\n
    Cache-Control: no-cache\r\n
    Pragma: no-cache\r\n
    Host: 123.123.12.34\r\n
    Connection: keep-alive\r\n
    \r\n
    [Full request URI: http://123.123.12.34/MyFlow.svc?wsdl]

而且我相信是什么让这种与 WS 的联系保持活力。

是否有任何解决方案来配置 apache.cxf headers 发送 connection=close on all 在 HTTP 级别执行的请求?

不,在我看来,您只能减少问题,而不能消除问题。问题似乎出在.NET 方面;关闭连接不知何故不正确。