1

.NET で作成された Web サービスを利用したい。ソース コードの生成には、Web サービスの WSDL に基づく Axis2 を使用しました。オプションなしで Axis を起動しました。

Web サービスの最初のメソッドを呼び出すことができます。これがWebサービスの認証方式「Connect」です。この後、新しいメソッドを再度呼び出しますが、Web サービスは、接続されていないことを示しています。Web サービスのサポートは、connect メソッドを呼び出した後、Java によって接続が閉じられたためだと教えてくれました。これで、Web サービスは、私が切断されていると想定してセッションを閉じます。

この問題を解決するには、both メソッドの成功した呼び出しで接続をライブで維持する必要があります。しかし、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

答えに従うと、スタブ オブジェクトにメソッドを適用すると、このエラー Exception in thread "main" が発生しました

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)
4

1 に答える 1

2

2つの質問があります。なぜ接続されていないのかわかりませんが、大量のリクエストに対してhttp接続プールを実行できます。

これは、 Axis2ブログの実行方法について説明しているブログです。

また、ここからセットアップのためのいくつかのコードがあります

編集コードを更新します

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);
}
于 2012-08-30T17:36:43.553 に答える