Ошибка при вызове веб-службы (.svc) в Android через ksoap2

Я получаю следующую ошибку при запуске моего проекта Android, в котором я вызываю веб-сервис через KSOAP2.

"ожидается:END_TAG{http://schemas.xmlsoap.org/soap/envelope/}Тело (позиция:END_TAGhttp://schemas.xmlsoap.org/soap/envelope/}s:fault>@1:742 в java.io.InputStreamReader@44ea98d0"

Вот мой код Java:

public class LoginWebService extends Activity{

    private static final String NAMESPACE = "http://tempuri.org/" ;
    private static final String URL = "http://192.168.1.103/InspectWcf/InspectServiceWcf.svc";
    private static final String CheckUserAuthentication_SOAP_ACTION = 
            "http://tempuri.org/IInspectService/CheckUserAuthenticationResponse";
    private static final String METHOD_NAME = "CheckUserAuthentication";
    EditText useridText,passText;
    TextView errorText;
    Button loginButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        useridText = (EditText)findViewById(R.id.userEditText);
        passText = (EditText)findViewById(R.id.passEditText);
        errorText = (TextView)findViewById(R.id.errorTextView);
        loginButton = (Button)findViewById(R.id.loginButton);

        loginButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                CheckAuthentication();
            }
        });
    }

    public void CheckAuthentication(){
        SoapObject request = new SoapObject(NAMESPACE,METHOD_NAME);
    //  SoapObject parameter = new SoapObject(NAMESPACE, "CheckUserAuthentication");

        request.addProperty("username", "survaa");
        request.addProperty("password", "survaa");

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        Log.d("envelope",envelope.toString());
        envelope.dotNet=true;
        envelope.setOutputSoapObject(request);

        Log.d("envelope", envelope.toString());
        HttpTransportSE httpt = new HttpTransportSE(URL);
        Log.d("httpt",httpt.toString());
        try{
            httpt.call(CheckUserAuthentication_SOAP_ACTION , envelope);
            Log.d("httpt",httpt.toString());

            SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
        //  String str = result.toString();
        //  Log.d("result", result.toString());
            if(result != null){
                errorText.setText("Correct UserId or Password");

            }
            else{
                errorText.setText("Invalid UserId or Password");

            }
        }
        catch(Exception e){

            errorText.setText(e.getMessage());

        }
    }
}

person himanshu    schedule 18.11.2011    source источник


Ответы (3)


Ну и два варианта:

а) Ошибка связана со строками NAMESPACE, SOAP_ACTION, METHOD_NAME. Но если вы их проверили, то:

б) Ошибка связана с вашим веб-сервисом.

По моему опыту (Ksoap2 и Axis2), ошибка «ожидаемый:END_TAG» возникает, когда клиент успешно отправил запрос, но не вызвал метод getResponse().

Есть ли у вас инструмент для проверки обмена сообщениями SOAP? Вы можете использовать tcpdump, например, для мониторинга трафика SOAP:

$sudo tcpdump -i eth0 -A -s 8080 -l 'dst host localhost and port 8080'

(eth0 и порт 8080 могут отличаться для вас)

Если ваш веб-сервис возвращает примитивный объект (int, boolean и т. д.), вы можете использовать:

Object response = envelope.getResponse();

Если возвращается сложный объект (строка и т. д.), то:

SoapObject response = (SoapObject)envelope.getResponse();

(Извините за мой английский).

person Marcos    schedule 28.11.2011


По моему опыту, эта ошибка возникает, когда мы не вводим правильные записи для веб-служб, таких как SOAP_ACTION, METHOD_NAME, NAMESPACE или URL. Поделитесь кодом, если можно.

person Code_Life    schedule 18.11.2011
comment
Попробуйте действие Soap как NAMESPACE + METHOD_NAME : tempuri.org/CheckUserAuthenticationResponse - person Code_Life; 18.11.2011
comment
Извините, мой плохой .. это должно быть tempuri.org/CheckUserAuthentication - person Code_Life; 18.11.2011

Я думаю, что ваш SOAP_ACTION неверен, он должен быть

http://tempuri.org/CheckUserAuthentication

Это оно. это означает NAMESPACE+"/"+METHODNAME

Спасибо

person Udaykiran    schedule 18.11.2011
comment
вы проверили сервис в мыльном интерфейсе!! - person Udaykiran; 18.11.2011