Не удается подключиться к службе WCF на Android - PullRequest
4 голосов
/ 23 декабря 2009

Я пытаюсь подключиться к службе .NET WCF в Android с помощью kSOAP2 (v 2.1.2), но я получаю фатальное исключение всякий раз, когда пытаюсь выполнить вызов службы. У меня возникли трудности с поиском ошибки, и я не могу понять, почему это происходит. Код, который я использую ниже:

package org.example.android;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransport;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;

public class ValidateUser extends Activity {
    private static final String SOAP_ACTION = "http://tempuri.org/mobile/ValidateUser";
    private static final String METHOD_NAME = "ValidateUser";
    private static final String NAMESPACE = "http://tempuri.org/mobile/";    
    private static final String URL = "http://192.168.1.2:8002/WebService.Mobile.svc"; 

     /** Called when the activity is first created. */  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);     
        setContentView(R.layout.validate_user);

        Intent intent = getIntent();

        Bundle extras = intent.getExtras();

        if (extras == null) {
            this.finish();
        }
        String username = extras.getString("username");
        String password = extras.getString("password");                               

        Boolean validUser = false;


        try {
            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
            PropertyInfo uName = new PropertyInfo();
            uName.name = "userName";

            PropertyInfo pWord = new PropertyInfo();
            pWord.name = "passWord";

            request.addProperty(uName, username);
            request.addProperty(pWord, password);

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet = true;
            envelope.setOutputSoapObject(request);

            HttpTransport androidHttpTransport = new HttpTransport(URL);
            androidHttpTransport.call(SOAP_ACTION, envelope); // error occurs here

            Integer userId = (Integer)envelope.getResponse();
            validUser = (userId != 0);
        } catch (Exception ex) {

        }               
    }

    private void exit () {
        this.finish();
    }
}

РЕДАКТИРОВАТЬ: удалить старые следы стека. Таким образом, первая проблема заключалась в том, что программе не удалось открыть соединение из-за отсутствия методов или библиотек из-за использования vanilla kSOAP2, а не модифицированной библиотеки для Android (kSOAP2-Android). Второй проблемой была проблема с настройками. В Манифесте я не добавил следующую настройку:

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

У меня сейчас проблема с XMLPullParser, которую мне нужно выяснить.

12-23 10: 58: 06.480: ОШИБКА / SOCKETLOG (210): add_recv_stats recv 0

12-23 10: 58: 06.710: WARN / System.err (210): org.xmlpull.v1.XmlPullParserException: неожиданный тип (позиция: END_DOCUMENT ноль @ 1: 0 в java.io.InputStreamReader@433fb070)

12-23 10: 58: 06.710: WARN / System.err (210): в org.kxml2.io.KXmlParser.exception (KXmlParser.java:243)

12-23 10: 58: 06.720: WARN / System.err (210): в org.kxml2.io.KXmlParser.nextTag (KXmlParser.java:1363)

12-23 10: 58: 06.720: WARN / System.err (210): в org.ksoap2.SoapEnvelope.parse (SoapEnvelope.java:126)

12-23 10: 58: 06.720: WARN / System.err (210): в org.ksoap2.transport.Transport.parseResponse (Transport.java:63)

12-23 10: 58: 06.720: WARN / System.err (210): в org.ksoap2.transport.HttpTransportSE.call (HttpTransportSE.java:100)

12-23 10: 58: 06.730: WARN / System.err (210): в org.example.android.ValidateUser.onCreate (ValidateUser.java:68)

12-23 10: 58: 06.730: WARN / System.err (210): в android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1122)

12-23 10: 58: 06.730: WARN / System.err (210): в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2104)

12-23 10: 58: 06.730: WARN / System.err (210): в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2157)

12-23 10: 58: 06.730: WARN / System.err (210): в android.app.ActivityThread.access $ 1800 (ActivityThread.java:112)

12-23 10: 58: 06.730: WARN / System.err (210): в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1581)

12-23 10: 58: 06.730: WARN / System.err (210): в android.os.Handler.dispatchMessage (Handler.java:88)

12-23 10: 58: 06.730: WARN / System.err (210): в android.os.Looper.loop (Looper.java:123)

12-23 10: 58: 06.730: WARN / System.err (210): в android.app.ActivityThread.main (ActivityThread.java:3739)

12-23 10: 58: 06.730: WARN / System.err (210): в java.lang.reflect.Method.invokeNative (Native Метод)

12-23 10: 58: 06.730: WARN / System.err (210): в java.lang.reflect.Method.invoke (Method.java:515)

12-23 10: 58: 06.730: WARN / System.err (210): в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:739)

12-23 10: 58: 06.730: WARN / System.err (210): в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:497)

12-23 10: 58: 06.730: WARN / System.err (210): в dalvik.system.NativeStart.main (Native Метод)

Ответы [ 2 ]

1 голос
/ 06 октября 2011

Была такая же проблема и обнаружил это: http://code.google.com/p/ksoap2-android/issues/detail?id=35

См. Комментарии 15 и 17.

Они предлагают вам обернуть вызов в "androidHttpTransport.call (SOAP_ACTION, envelope);" в try / catch и попробуйте снова в случае ошибки.

OR

Установите системное свойство "http.keepAlive" на "false".

Позже в этом выпуске кто-то предлагает использовать «KeepAliveHttsTransport».

Для меня (я признаю, что это грязно) try / catch сработало просто отлично.

РЕДАКТИРОВАТЬ опечатку

0 голосов
/ 23 декабря 2009

Получил это работает. Были некоторые проблемы, как упомянуто выше с файлом Manifest. Кроме того, параметры NAMESPACE, SOAP_ACTION и URL были неверными. Для NAMESPACE требовалось предварительно добавить к нему «uri:», как и SOAP_ACTION. В URL-адресе должна быть указана конечная точка, поэтому вместо http://192.168.1.2:8002/WebService.Mobile.svc она должна быть http://192.168.1.2:8002/WebService.Mobile.svc/Mobile. Решены проблемы с подключением, просто нужно выяснить, что происходит с передачей данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...