Android - аутентификация Ksoap2 в веб-сервисе .Net - PullRequest
1 голос
/ 16 августа 2011

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

Я скачал защищенный WebService (этот пример запроса учетных данных) с: Безопасность веб-сервисов

[WebMethod]
public string HelloWorld()
{
    return "Hello " + Context.User.Identity.Name;
}

Я вызываю webMethod с базовым кодом, и поэтому я получаю ошибку, где-то мне нужно передать имя пользователя и пароль , но я не знаю, как . Есть ссылки, которые используют NTCredentials, envelope.headerOut и HeaderProperty (класс, которого у меня нет), я пробую все и ничего.

public String getStringWebService()
{
    String namespaceServicio;
    String nombreMetodo;

    namespaceServicio = "http://tempuri.org/";              
    nombreMetodo = "HelloWorld";        
    accionSoap = namespaceServicio + nombreMetodo;

    urlServicio = "http://???.???.???/Prueba/Autenticacion/AuthTestSvc/Service1.asmx";

    SoapObject request = new SoapObject(namespaceServicio, nombreMetodo);                       
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
            SoapEnvelope.VER11);
    envelope.bodyOut = request; 
    envelope.dotNet = true;
    envelope.encodingStyle = SoapEnvelope.XSD;

    HttpTransportSE ht = new HttpTransportSE(urlServicio);

    ht.debug = true;
    String cad = "";
    try
    {
       String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
         " <soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
         " <soap:Header>" +
         " <AUTHHEADER xmlns=\"http://tempuri.org/\" />" +
         " <username>test</username> " +
         " <password>test</password> " +
         " </AUTHHEADER> " + 
         " </soap:Header> " +
         " <soap:Body> " +
         " <SENSITIVEDATA xmlns=\"http://tempuri.org/\"> " +
         " </soap:Body> " + 
         " </soap:Envelope> ";
       ht.setXmlVersionTag(xml);
       ht.call(accionSoap, envelope);       
       cad = ht.responseDump;          
       return cad;
    }
    catch(Exception e)
    {
       throw new Exception(e.toString());
    }
}

Исключение возникает в httpTransportSE.call (soapAction, envelope), потому что, как я говорю, я не передаю имя пользователя и пароль

org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/envelope/}Envelope (position:START_TAG <html>@1:6 in java.io.InputStreamReader@44f13428)

В ht.responseDump я получаю в html код:

401 - Unauthorized: Access is denied due to invalid credentials.
You do not have permission to view this directory or page using the credentials that you supplied

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

Я использовал ksoap2-Android 2.5.2, поэтому я не мог использовать класс HeaderProperty, я перешел на ksoap2-Android 2.5.7 и перешел по этой ссылке: Аутентификация Http Webservice - KSOAP2 на Android Это работает для меня.

0 голосов
/ 16 августа 2011

Это замечательное руководство показывает, как использовать вместе веб-сервисы Ksoap и .net. пошагово автор пишет код (например, мыльный объект, конверт, затем транспорт и т. д.).

Удачи.

...