我正在运行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级别执行的所有请求?
答案 0 :(得分:0)
不,在我看来,你只能减少问题,而不是消除它。问题似乎是在.NET方面;关闭连接是不正确的。