0

私はアンドロイドが初めてで、wcf Web サービスを呼び出したいと思っていました。ksoap2 ライブラリが見つかり、見つかった例を適用するように指定しました。アプリは次のエラー メッセージで失敗しました: java.net.SocketTimeoutException: 接続タイムアウト。次のように manafist ファイルにユーザー権限を設定しました。

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>

また、エミュレータ設定アプリ -> ワイヤレスとネットワーク -> モバイル ネットワーク -> アクセス ポイント名から、プロキシ、ポート、ユーザー名、およびパスワードを追加しました。また、実行構成から追加のエミュレータ コマンド ライン オプションに次の行を追加しました。

-dns-server ns15.unitechost.in

それでもうまくいきませんでした。

アップデート

次のコマンドで AVD を起動するときに、コマンド ラインからプロキシ設定を構成しました。

emulator -avd <avd_name> [-<option> [<value>]] ... [-<qemu args>]

今、私は次の例外を受け取りました:

org.xmlpull.v1.XmlPullParserException: unexpected type (position:TEXT HTTP/1.1 500 Int...@11:1 in java.io.InputStreamReader@40531d48)

ksoap2 を使用して .asmx Web サービスを使用する例を見てきましたが、これは .svc Web サービスでも実行できますか? 添付のコードを使用しています。例の場合:

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class Main extends Activity {
    /** Called when the activity is first created. */

    private static final String SOAP_ACTION = "http://tempuri.org/Istock/getCountry";
    private static final String OPERATION_NAME = "getCountry";
    private static final String WSDL_TARGET_NAMESPACE = "http://tempuri.org/";
    private static final String SOAP_ADDRESS = "http://127.0.0.1:8080/Service1.svc";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView textView = new TextView(this);
        setContentView(textView);
        SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,
        OPERATION_NAME);
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
        SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);
        HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
        try
        {

        httpTransport.call(SOAP_ACTION, envelope);
        Object response = envelope.getResponse();
        textView.setText(response.toString());
        System.out.println(response.toString());
        }
        catch (Exception exception)
        {
        String exceptionStr=exception.toString();
        textView.setText(exceptionStr);
        System.out.println(exceptionStr);
        Log.i("TAG",exceptionStr);
        }

    }

}

ありがとう、

4

4 に答える 4

0

これは少し遅れているかもしれませんが、これが私にとってそれを修正したものです:

HttpTransportSE androidHttpTransport = new HttpTransportSE(URL,60000);

タイムアウト値である 2 番目のパラメーターに注意してください。

この値のスケールがわからないことは認めざるを得ませんが、これはミリ秒単位で測定されると思います。

于 2012-05-02T15:13:13.933 に答える
0

接続タイムアウトは、次の場合に発生します。

  • 要求されたサーバーの IP アドレスが正常に検出されました
  • 接続確立パケットは IP アドレスにディスパッチされます
  • 宛先アドレスは意図的にそれらを無視するか、受信しません

接続タイムアウトと同様に接続が拒否されますが、この場合、宛先システムは実際にパケットを送り返し、「離れてください。接続しようとしているポートで実行されているサービスはありません」と言っています。

接続タイムアウトは、ネットワーク環境で予期される動作です。ネットワーク接続の信頼性が低い可能性があるモバイル環境では、これはさらに期待されます。これは、サーバーが特定の秒数の間応答に失敗したことを意味します。

于 2011-05-09T06:44:52.913 に答える
0

Android から localhost または 127.0.0.1 を使用してローカル マシンにアクセスすることはできません。Yout ローカル マシンにアクセスするには、10.0.2.2 を使用する必要があります。

実際、AndroidをWCFサービスに正しく接続できませんでした...

于 2011-06-12T19:31:39.797 に答える
0

これを追加 :

StrictMode.ThreadPolicy policy = new   StrictMode.ThreadPolicy.Builder().permitAll().build(); 
        StrictMode.setThreadPolicy(policy);
于 2017-04-05T15:23:49.173 に答える