Pregunta

Tengo una configuración de servicio web de ASMX en Microsoft Azure e intento enviar datos al servicio web y recibir salida utilizando una aplicación Android. Para este propósito, estoy usando la biblioteca KSOAP.

En el servicio web, estoy revisando si las cuerdas son nulas. Si lo son, devuelvo un código de error "2405"

[WebMethod]
        public string LoginUser(string auth_token, string username)
        {
            // All these tests performed, so someone from outside of out application
            // scope does not attempt to abuse our webservice.
            #region Check for nulls
            if (string.IsNullOrEmpty(auth_token))
                return "2405";
            if (string.IsNullOrEmpty(username))
                return "2405";
            #endregion
        }

En mi aplicación de Android, estoy enviando los datos, pero el servicio web todavía devuelve el código de error 2405, lo que significa que los datos no se envían.

El siguiente es mi código de Android:

        SoapObject request = new SoapObject(NAMESPACE, method_name);

        PropertyInfo pi = new PropertyInfo();
        pi.setName("auth_token");
        pi.setValue("TestAuth");
        request.addProperty(pi);

        PropertyInfo pe = new PropertyInfo();
        pe.setName("username");
        pe.setValue("TestUser");
        request.addProperty(pe);

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

        envelope.setOutputSoapObject(request);
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
        androidHttpTransport.call(SOAP_ACTION, envelope);

Lamento poder proporcionarle el espacio de nombres, el nombre de método, la URL, etc. está en contra de la política de la empresa y espero que lo comprenda. :)

Sin embargo, repasaré el error nuevamente. Después de llamar al código de Android anterior, el servicio web devuelve 2405, que según el código ASMX es cuando alguno de los valores de TWOS es nulo.

ACTUALIZAR: Depuggué la solicitud SOAP (androidhttptransport.debug = true) y obtuve los siguientes resultados para SolicitDump y Responsedump.

Volcado de solicitud

<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
            xmlns:d="http://www.w3.org/2001/XMLSchema" 
            xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" 
            xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
  <v:Header />
  <v:Body>
    <LoginUser xmlns="http://tempuri.org" id="o0" c:root="1">
      <auth_token i:type="d:string">TestAuth</auth_token>
      <username i:type="d:string">TestUser</username>
    </LoginUser>
  </v:Body>
</v:Envelope>

abundante

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
               xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <LoginUserResponse xmlns="http://tempuri.org/">
      <LoginUserResult>2405</LoginUserResult>
    </LoginUserResponse>
  </soap:Body>

</soap:Envelope>

Actualización 2
Esto es lo que El servidor espera:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <LoginUser xmlns="http://tempuri.org/">
      <auth_token />
      <username />
    </LoginUser>
  </soap:Body>
</soap:Envelope>

Esto es lo que el La aplicación de Android está enviando:

<?xml version="1.0" encoding="utf-8"?>
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance"     xmlns:d="http://www.w3.org/2001/XMLSchema"  xmlns:c="http://schemas.xmlsoap.org/soap/encoding/"     xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
<v:Header />
    <v:Body>
        <LoginUser xmlns="http://tempuri.org" id="o0" c:root="1">
            <auth_token i:type="d:string">TestAuth</auth_token>
            <username i:type="d:string">TestUser</username>
        </LoginUser>
    </v:Body>
</v:Envelope>

Además de esto, he agregado la siguiente línea al código de Android:

androidHttpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>");

¡POR FAVOR AYUDA!

¡Muchas gracias!

¿Fue útil?

Solución

Pude borrar el error ... el problema fue que no tenía una barra invertida después del URI del espacio de nombres ... la razón por la que no lo hice es que con la barra inalcanzada obtuve el error "La secuencia no contiene elementos". ... ahora, sin embargo, tengo errores diferentes ... si necesito ayuda, publicaré en StackOverflow ... gracias por la generosa ayuda :)

Para ser claro, el espacio de nombres deber Tenga AA Back -stagin al final, para que el servidor reciba cualquier parámetro.

Otros consejos

Hola
Hay dos de las formas de resolver su problema: uno es el uso de PropertyInfo o, en segundo lugar, mis caminos: Agregar directamente el parámetro para solicitar el parámetro.

Primeras formas:

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

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

Segunda formas:

    SoapObject request = new SoapObject(NAMESPACE, method_name);
    request.addProperty("auth_token","TestAuth");
    request.addProperty("username","TestUser");

Pruebe este código, funcionará.

en el espacio de nombres te ayuda a escribir el http con capital h, como este

en lugar de espacio de nombres = "http://tempuri.org/"; Pruebe este espacio de nombres = "http://tempuri.org";

Al menos en mi caso ha ayudado. ¡Espero que un cuerpo ayude!

Gabriel

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top