Apparemment, il s'agit d'un problème assez fréquent. Je ne suis pas sûr de l'origine du problème ou de ce qui doit être ajusté, mais pour la vie de moi, je ne peux rien récupérer d'autre qu'un résultat NULL à mon SoapObject ou à SoapPrimitive à partir de mon service Web XML .NET avec paramètres.Service Web Android, KSoap2 et .NET w/parameters = résultat NULL
J'ai essayé tout ce que j'ai trouvé sur le net:
- Ajout du .setXmlVersionTag = pas de changement
- En utilisant SoapObject au lieu de SoapPrimitive = aucun changement
- En utilisant SoapPrimitive au lieu de SoapObject = aucun changement
- en utilisant HttpTransportSE au lieu de AndroidHttppTransport = aucun changement
- en utilisant AndroidHttpTransport au lieu de HttpTransportSE = aucun changement
- Réglage .dotnet = true = pas de changement
- Retrait ligne d'affectation .dotnet = pas de changement
- Retrait du côlon (ensemble préfixe http: //) du service Web = pas de changement
- En utilisant à la place la classe PropertyInfo d'affectation directe = pas de changement
- Utiliser l'affectation directe au lieu de la classe PropertyInfo = pas de changement
Je suis à une perte totale et il est assez frustrant. J'ai le contrôle total du service web (je l'ai écrit) donc des changements mineurs, si utile, je suis prêt à essayer.
Actuellement mon code comme suit est la suivante:
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();
}
}
et mes GLOBALS ressembler à ceci:
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";
Je sais 'yoda' est traduit correctement mon serivce web non-paramétrés est travaillant comme un champion sanglant. (Tout est identique sauf les appels 'request.addProperty' qui sont évidemment (en tout ou en partie) du problème.)
Si c'est important, j'écris ceci sur une plate-forme cible 1.6 avec KSoap2 2.5.2 et il se comporte de manière identique sur tous mes différents émulateurs Android. J'ai reniflé les paquets avec wireshark et l'émulateur semble envoyer le bon truc mais les résultats qu'il reçoit sont toujours NULL. (J'ai testé ces paramètres à plusieurs reprises sur mon site Web de test qui utilise ces services Web, et tout fonctionne parfaitement là-bas.)
Alors, quelqu'un peut-il me jeter un os ici?
Merci,
Maguá
EDIT 2010.11.28:
Même si Wireshark me dit que j'envoie les paramètres, il semblerait que le service Web ne reçoit pas les correctement, ou quelque chose de similaire.J'ai créé un tout nouveau service supposé renvoyer une chaîne simple, quel que soit le premier paramètre, avec "TEST" à la fin, codé en dur à partir du service web lui-même.
Eh bien, chaque fois que je lance ceci (depuis Android), j'obtiens un résultat, et c'est toujours "TEST". Peu importe comment je formule le SoapEnvelope ou peu importe ce que je passe en paramètre, je reçois toujours "TEST". Bien sûr, lorsque j'appelle le service web sur le serveur, il fonctionne comme un champion (et mon résultat est "C'EST UN TEST").
Mon service Web est sur Windows Server 2008 avec IIS 7. Le pool d'applications s'exécute sur le framework v2.0 (et non sur v4.0) avec le mode de pipeline géré «Integrated».
Je ne sais pas où se trouve la déconnexion. KSoap2 envoie-t-il les paramètres incorrectement? IIS est-il mal configuré? Quelque chose d'autre entièrement?
Vous avez absolument raison dans les deux zones. SOAP est archaïque, malheureusement je ne connais pas assez les services WCF et REST pour faire la transition. (Sauf si vous connaissez un tutoriel incroyable que je n'ai pas trouvé ...) – Magua