Вызов веб-службы .NET с помощью ksoap2 в Android, результат не возвращается

Я пытался вызвать простой веб-сервис .NET (HelloWorld) через Android, используя ksoap2 (я уже пробовал и преуспел для другого веб-сервиса). но для этого требуется аутентификация, поэтому я искал, как добавить заголовок для аутентификации, но, тем не менее, у меня нет результата в моем текстовом представлении.

SoapObject Request = new SoapObject(NAMESPACE,METHOD_NAME);  
List<HeaderProperty> headers = new ArrayList<HeaderProperty>();
headers.add(new HeaderProperty("Authorization", "Basic"+Base64.encode("Username:Password".getBytes())));


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

        HttpTransportSE aht = new HttpTransportSE(URL);


        try{
            aht.call(SOAP_ACTION,envelope,headers);
            SoapPrimitive resultString = (SoapPrimitive)envelope.getResponse();

            tv.setText("yo :" + resultString);

        }
    catch(Exception e){
        e.printStackTrace();
    }

У меня также есть ошибка в моем журнале:

ОШИБКА: Ошибка прикрепления темы, но я не думаю, что это источник

вот wsdl для метода HelloWorld:

>     <wsdl:types>
>     <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
>     <s:element name="HelloWorld">
>     <s:complexType/>
>     </s:element>
>     <s:element name="HelloWorldResponse">
>     <s:complexType>
>     <s:sequence>
>     <s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult" type="s:string"/>
>     </s:sequence>
>     </s:complexType>
>     </s:element>

my problem. Have anyone encountered this kind of problem , or my code is wrong at some point ?


person Labraiki    schedule 18.02.2013    source источник
comment
если метод .net ws имеет какой-либо параметр? это запрос   -  person Android_coder    schedule 18.02.2013
comment
я так не думаю, это просто тестирование Helloworld, поэтому я не добавлял свойство в свой запрос   -  person Labraiki    schedule 18.02.2013
comment
я добавляю код, если вам нужно его использовать... Надеюсь, это поможет вам..   -  person Android_coder    schedule 18.02.2013
comment
Надеюсь, это поможет. stackoverflow.com/questions/3564467/soap -wev-service-on-android/   -  person Rajnikant    schedule 18.02.2013


Ответы (2)


Попробуй это:

 SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                        SoapEnvelope.VER11);    
request.addProperty("requst_name",request_value);//if you have any request add here..                   
 envelope.setOutputSoapObject(request);
 envelope.implicitTypes = true;
 envelope1.dotNet = true;
 int Timeout = 60000;
 HttpTransportSE androidHttpTransport = new HttpTransportSE(URL, Timeout);
 androidHttpTransport.debug = true;
                try {

                    androidHttpTransport.call(SOAP_ACTION, envelope);
                    Object response = envelope.getResponse();
                    String res=response.toString();
                    }

                    }catch (XmlPullParserException e) {

                        e.printStackTrace();
                    } catch (SocketTimeoutException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
person Android_coder    schedule 18.02.2013
comment
Я попробовал ваш код, но тоже безрезультатно, никаких исключений не обнаружено, кажется, что код в порядке, но мое текстовое представление не отображает результат. я попытался установить свое текстовое представление, чтобы проверить его внутри себя, попробуйте блок catch: tv.setText(yo :); и он по-прежнему отображает только текст, когда я запускаю приложение, что это значит? - person Labraiki; 18.02.2013
comment
Вы можете опубликовать свой файл wsdl - person Android_coder; 18.02.2013
comment
Хорошо, я добавлю это к моему вопросу - person Labraiki; 18.02.2013
comment
Вы распечатали эту строку res=response.toString();? - person Android_coder; 18.02.2013
comment
в моем нет, но когда я использовал ваш код, я сделал. как вы можете объяснить, что даже когда я установил: tv.setText(yo:), он не отображался, как будто блок try catch игнорируется! - person Labraiki; 18.02.2013
comment
использовал этот код System.out.println(Result: +res); после этой строки String res=response.toString(); - person Android_coder; 18.02.2013
comment
В консоли ничего о res не отображается! - person Labraiki; 18.02.2013
comment
Ответ объекта = конверт.getResponse(); замените эту строку на SoapObject response = (SoapObject)envelope.bodyIn; - person Android_coder; 18.02.2013
comment
Вы можете дать мне свой адрес электронной почты, чтобы я мог отправить вам это? (Потому что вам понадобится мой логин и пароль) - person Labraiki; 18.02.2013
comment
не смог найти. в любом случае вот подробности demo.digiparc.com/autocomplete.asmx логин: mLabraiki pass: 123456 - person Labraiki; 18.02.2013
comment
Я использовал некоторые журналы, очевидно, проблема в этой строке: aht.call(SOAP_ACTION,envelope); я тоже поймал исключение: org.xmlpull.v1.XmlPullParserException: ожидается: START_TAG {schemas.xmlsoap.org /soap/envelope}Конверт (позиция:START_TAG ‹html›@1:6 в java.io.InputStreamReader@45f9a5d0) - person Labraiki; 18.02.2013

.Вот как я получаю доступ к веб-сервису .net. В моем случае я отправляю 2 параметра имя пользователя и пароль, где служба вернет строку в соответствии с базой данных. Если вы не передаете какие-либо параметры, удалите параметры, которые я упомянул, и добавьте только это

PropertyInfo pi = new PropertyInfo();
    pi.setType(String.class);
    request.addProperty(pi);

еще

 public String Call(String username, String password) {
    SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,
            OPERATION_NAME);

    PropertyInfo pi = new PropertyInfo();
    pi.setName("username");
    pi.setValue(username);
    pi.setType(String.class);
    request.addProperty(pi);

    pi = new PropertyInfo();
    pi.setName("password");
    pi.setValue(password);
    pi.setType(String.class);
    request.addProperty(pi);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
            SoapEnvelope.VER11);

    envelope.dotNet = true;

    envelope.setOutputSoapObject(request);

    HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
    Object response = null;

    try {

        httpTransport.call(SOAP_ACTION, envelope);
        response = envelope.getResponse();
    }

    catch (Exception exception) {
        response = exception.toString();
    }

    return response.toString();
}
person Amalan Dhananjayan    schedule 18.02.2013
comment
Мой веб-сервис не требует параметров (по крайней мере, для метода HelloWrold), но требует аутентификации перед доступом к нему. - person Labraiki; 18.02.2013