Aparentemente, este es un problema bastante experimentado. No estoy seguro de dónde está el problema, o qué necesita ajustarse, pero por mi vida no puedo recuperar nada más que un resultado NULO en mi SoapObject o SoapPrimitive de mi servicio web .NET XML con parámetros.Servicio web Android, KSoap2 y .NET con parámetros = resultado NULO
He intentado todo lo que he encontrado en la red:
- Adición de la .setXmlVersionTag = sin cambios
- Usando SoapObject en lugar de SoapPrimitive = sin cambios
- Usando SoapPrimitive en lugar de SoapObject = ningún cambio
- Usando HttpTransportSE en lugar de AndroidHttppTransport = ningún cambio
- Usando AndroidHttpTransport en lugar de HttpTransportSE = ningún cambio
- Configuración .dotNet = true = ningún cambio
- Extracción de línea de asignación .dotNet = ningún cambio
- Extracción de los dos puntos (toda prefijo http: //) del servicio web = ningún cambio
- Utilización de la clase PropertyInfo en vez de asignación directa = sin cambios
- el uso de la asignación directa en lugar de la clase PropertyInfo = sin cambios
estoy en una pérdida total y es muy frustrante. Tengo control total del servicio web (lo escribí) por lo que cambios menores, si es útil, estoy dispuesto a intentarlo.
Actualmente mi código de la siguiente manera es la siguiente:
public void GetResults()
{
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("lastName", "sm");
request.addProperty("middleName", "");
request.addProperty("firstName", "");
request.addProperty("pageSize", 25);
request.addProperty("pageNumber", 1);
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelope.dotNet = true;
soapEnvelope.setOutputSoapObject(request);
//AndroidHttpTransport aht = new AndroidHttpTransport(URL);
HttpTransportSE aht = new HttpTransportSE(URL);
try
{
aht.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
aht.call(SOAP_ACTION, soapEnvelope);
//SoapObject result = (SoapObject)soapEnvelope.bodyIn;
SoapObject result = (SoapObject)soapEnvelope.getResponse();
//SoapPrimitive result = (SoapPrimitive) soapEnvelope.getResponse();
//Object result = soapEnvelope.getResponse();
Log.d("WS", String.valueOf(result));
}
catch(Exception e)
{
e.printStackTrace();
}
}
y mis globales tener este aspecto:
private static final String SOAP_ACTION = "http://yoda/SearchPerson";
private static final String METHOD_NAME = "SearchPerson";
private static final String NAMESPACE = "http://yoda/";
private static final String URL = "http://yoda/ws.asmx";
sé 'Yoda' está traduciendo correctamente como mi serivce web no parametrizada es trabajando como un campeón sangriento. (Todo es idéntico excepto las llamadas a 'request.addProperty' que obviamente (una parte o la totalidad) del problema en cuestión.)
Si es importante, escribo esto en una plataforma de destino de 1.6 con KSoap2 2.5.2 y se comporta de forma idéntica en todos mis diferentes emuladores de Android.
He olfateado los paquetes con wireshark y parece que el emulador está enviando las cosas correctas pero los resultados que recibe son siempre NULL. (He probado estos parámetros exactos muchas veces en mi sitio web de prueba que utiliza estos servicios web, y todo funciona perfectamente allí).
Entonces, ¿alguien puede tirarme un hueso aquí?
Gracias,
maguas
EDITAR 2010.11.28:
A pesar de que Wireshark me dice que estoy enviando los parámetros parecería que el servicio web no está recibiendo ellos correctamente, o algo similar.Creé un servicio completamente nuevo que se suponía devolvería una cadena simple, cualquiera que fuera el primer parámetro, con "TEST" al final, codificado desde el propio servicio web.
Bueno, cada vez que ejecuto esto (de Android) obtengo un resultado, y siempre es "PRUEBA". No importa cómo formule SoapEnvelope o pase lo que pase como parámetro, siempre recibo "TEST". Por supuesto, cuando invoco el servicio web en el servidor, funciona como un campeón (y mi resultado es "ESTA ES UNA PRUEBA").
Mi servicio web está en Windows Server 2008 con IIS 7. El grupo de aplicaciones se ejecuta en framework v2.0 (no v4.0) con el modo de canal administrado 'Integrado'.
No tengo idea de dónde está la desconexión. ¿KSoap2 está enviando los parámetros incorrectamente? ¿IIS está configurado incorrectamente? ¿Algo más completamente?
Tienes toda la razón en ambas áreas. SOAP es anticuado, desafortunadamente no tengo los conocimientos ni la experiencia suficientes en los servicios WCF y REST para realizar la transición. (A menos que, si conoces un tutorial increíble que no he encontrado ...) – Magua