3

タイムアウトをサポートする ksoap2 2.5.4 (Android 2.2 上) を使用しています。リクエストを処理するために Apache 2.2.16 を使用しています。すべて正常に動作しますが、Apache をシャットダウン (または Apache が実行されているリモート PC を切断) しても、通話がタイムアウトすることはありません。別のスレッドを使用して WS を呼び出していますが、このスレッドはこの場合、約 2 分間動作/応答/ストールを停止します。

int MSG_TIMEOUT = 15000;
HttpTransportSE httpTransport;
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
httpTransport = new HttpTransportSE(URL, MSG_TIMEOUT);
httpTransport.debug = true;
httpTransport.call(SOAP_ACTION, envelope);//thread stops responding here

Timer を使用して、定義済みのタイムアウト後にそのスレッドをキャンセルしようとしましたが、機能しませんでした。スレッドはまだ存在し、2 分間待機しています。

TimerTask task;
Timer mTimer;
task = new TimerTask() {
  public void run() {               
    mThread.interrupt();
   }
 };
mTimer = new Timer();
mTimer.schedule(task, MSG_TIMEOUT);

それと関係があるかもしれないこの警告も表示されます(どうすればよいかわかりません):

Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(org.ksoap2.transport.KeepAliveHttpsTransportSE$1) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.

KSOAP を機能させるか、定義済みのタイムアウト後にそのスレッドを中断するようにタイマーを改善する機会はありますか? 答えてくれてありがとう、または何を試してみるか!

4

4 に答える 4

6

ksoap2 API バージョン 2.5.2 以降を使用します。

ここをクリックしてダウンロードできます

そして、HTTPTransport のオブジェクトを作成しながら、次のコードを使用します。

/**
 * Creates instance of HttpTransportSE with set url
 *
 * @param url
 *            the destination to POST SOAP data
 */
public HttpTransportSE(String url) {
    super(url);
}

/**
 * Creates instance of HttpTransportSE with set url
 *
 * @param url
 *            the destination to POST SOAP data
 * @param timeout
 *            timeout for connection and Read Timeouts (milliseconds)
 */
public HttpTransportSE(String url, int timeout) {
    super(url, timeout);
}
于 2011-08-30T05:03:10.960 に答える
0

ソースをダウンロードしてコンパイルしましたか? それとも、完成した JAR ファイルを使用しましたか? 今夜か明日の早朝にテストします。

于 2011-04-15T08:11:36.813 に答える
0

ksoap2-android-assembly-2.5.6-jar-with-dependencies を実行しても同じ問題が発生します。HttpTransportSE に表示される ksoap タイムアウト値は、org.apache.http.client.HttpClient を接続タイムアウトとソケット タイムアウト パラメータとともに使用して達成できるものと同等であると想定していました。

HttpClient クライアント = 新しい DefaultHttpClient(); HttpParams パラメータ = client.getParams(); HttpConnectionParams.setConnectionTimeout(params, CONNECTION_TIMEOUT); HttpConnectionParams.setSoTimeout(params, SOCKET_TIMEOUT);

HttpTransportSEのタイムアウトパラメーターにどのような値を入力しても、最終的に3分後に「操作がタイムアウトしました」というSocketExceptionが発生します。私のサーバーは稼働していますが、リクエストに応答していません。

于 2011-07-01T15:05:13.210 に答える
0

これは、いくつかの状況でタイムアウト値を無視する HttpTransportSE に関する未解決の問題のようです。関連参照:

http://code.google.com/p/ksoap2-android/issues/detail?id=52

http://code.google.com/p/ksoap2-android/issues/detail?id=60&q=httpTransportse%20timeout

于 2011-07-01T15:54:48.530 に答える