Java Axis2创建持久连接

Java Axis2创建持久连接,java,wsdl,axis2,keep-alive,Java,Wsdl,Axis2,Keep Alive,我想使用.NET中的Web服务。为了生成源代码,我使用了基于web服务WSDL的Axis2。我在没有选择的情况下启动了Axis 我可以调用webservice的第一个方法。这是web服务的身份验证方法“Connect”。在此之后,我再次调用了一个新方法,但Web服务表明我不再连接。web服务的支持告诉我这是因为在我调用connect方法之后,连接被java关闭。这样,Web服务假设我断开了连接并关闭了会话 为了解决这个问题,我对这两个方法的successif调用应该在live中保持连接。但是,我

我想使用.NET中的Web服务。为了生成源代码,我使用了基于web服务WSDL的Axis2。我在没有选择的情况下启动了Axis

我可以调用webservice的第一个方法。这是web服务的身份验证方法“Connect”。在此之后,我再次调用了一个新方法,但Web服务表明我不再连接。web服务的支持告诉我这是因为在我调用connect方法之后,连接被java关闭。这样,Web服务假设我断开了连接并关闭了会话

为了解决这个问题,我对这两个方法的successif调用应该在live中保持连接。但是,我不确定Axis2是否建议使用这种功能,是真的吗

如何保持不同通话之间的连接

以下是我的java代码:

WinbooksWebServiceStub stub = new WinbooksWebServiceStub("http://myUrl/Service.asmx");
Connect c = new Connect();
c.setKey("KEY");
c.setUser("USER");
c.setPass("PSW");

ConnectResponse resp = stub.connect(c);
ConnectParser connecterParser = new ConnectParser();//works and return the Token

HelloWorld h = new HelloWorld();
HelloWorldResponse Hresp = stub.helloWorld(h); //the result tell me that I'm not connected
如果我遵循答案,我在存根对象上应用方法,我在线程“main”中得到了这个错误异常


你有两个问题要问。我不确定您的应用程序为什么没有连接,但您可以为大量请求创建http连接池

这里有一个博客,讨论如何做到这一点

此外,这里还有一些来自的设置代码

编辑更新代码


Thx,我试过你的解决方案,但我错了。我在另一个答案中写下了错误的信息。对不起,我没有放弃,因为这让我很困扰。若要重用连接,请在调用connect之前调用此连接,因为它用于打开的套接字。我对池的设置有问题,我会解决的。。。stub._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.REUSE_http_CLIENT,新布尔值(true));编辑代码。现在应该可以了。只需记住在调用任何例程之前设置上下文属性。此外,注释中的上述一行将默认为您提供两个连接。
org.apache.axis2.AxisFault: Attempted read on closed stream.
at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430) 
at org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:64)
at org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:179)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:145)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:108)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:67)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:354)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:421)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
at com.logidrive.ws.WinbooksWebServiceStub.connect(WinbooksWebServiceStub.java:4251)
at Main.main(Main.java:44) Caused by: java.io.IOException: Attempted read on closed stream.
at org.apache.commons.httpclient.AutoCloseInputStream.isReadAllowed(AutoCloseInputStream.java:183)
at org.apache.commons.httpclient.AutoCloseInputStream.read(AutoCloseInputStream.java:107)
at java.io.FilterInputStream.read(FilterInputStream.java:116)
at org.apache.axiom.om.util.DetachableInputStream.read(DetachableInputStream.java:147)
at java.io.FilterInputStream.read(FilterInputStream.java:116)
at java.io.PushbackInputStream.read(PushbackInputStream.java:169)
at org.apache.axis2.builder.BuilderUtil.getCharSetEncoding(BuilderUtil.java:294)
at org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:51)
import org.apache.axis2.client.Stub;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.params.HttpConnectionManagerParams;

public static void setContextProperties(Stub stub) {

    // Set the max connections to 20 and the timeout to 20 seconds
    MultiThreadedHttpConnectionManager multiThreadedHttpConnectionManager = new MultiThreadedHttpConnectionManager();

    HttpConnectionManagerParams params = new HttpConnectionManagerParams();
    params.setDefaultMaxConnectionsPerHost(20);
    params.setMaxTotalConnections(20);
    params.setSoTimeout(20000);
    params.setConnectionTimeout(20000);
    multiThreadedHttpConnectionManager.setParams(params);

    HttpClient httpClient = new HttpClient(multiThreadedHttpConnectionManager);

    stub._getServiceClient().getServiceContext().getConfigurationContext().setProperty(HTTPConstants.CACHED_HTTP_CLIENT, httpClient);
}