Apache CXF无法发送由以下内容引起的消息:java.net.SocketException:连接重置

时间:2017-12-04 15:15:38

标签: java apache web-services soap cxf

我正在运行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

为了避免这种情况,我想只为这个WS消费使用connection = close标头。

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

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

我在wireshark上看到标题得到正确的值:

Connection: close\r\n

但是,当java.xml.ws.Service的约束器初始化wsdl url时,首次调用WS(看起来像导入xsd' s):

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

我在Wireshark上看到下一个标题:

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标头来发送连接=关闭在HTTP级别执行的所有请求?

1 个答案:

答案 0 :(得分:0)

不,在我看来,你只能减少问题,而不是消除它。问题似乎是在.NET方面;关闭连接是不正确的。