2012-06-15 5 views
0

J'apprends comment créer une application Android et webservice en utilisant: Eclipse IDE ksoap2 Version 2.6.5 avec dépendances Visual Studio 2010Android ksoap2 Microsoft Webservice - incapable de passer des paramètres à WebService

ma méthode était de suivez ce grand tutoriel: http://www.youtube.com/watch?v=v9EowBVgwSo&feature=related

le didacticiel fonctionne correctement avec le service Web de test w3schools. J'ai ensuite essayé d'écrire mon propre service web et j'ai utilisé le service web helloworld fourni dans Visual Studio pour commencer. J'ai recommandé mon code pour pointer vers le nouveau service web (publié sur mon ordinateur portable de développement) et l'ai exécuté sur mon combiné en mode débogage.

La communication avec le service Web est correcte lors de l'appel du service Web HelloWorld(). il renvoie même un résultat de simpleMethod() mais n'inclut pas le paramètre que je lui ai passé. par exemple. Lors de l'appel de simpleMethod, Iam a renvoyé la chaîne suivante: "Hello"

Je pense que c'est un problème avec le webservice car cela fonctionne pour le service web de test de w3schools mais je suis bloqué et j'apprécierais de l'aide.

mon code suivant:

Webservice:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Services; 

namespace WMCMobileWebService 
{ 
    /// <summary> 
    /// Summary description for Service1 
    /// </summary> 
    [WebService(Namespace = "http://testuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [System.Web.Script.Services.ScriptService] 
    public class Service1 : System.Web.Services.WebService 
    { 

     [WebMethod] 
     public string HelloWorld() 
     { 
      return "Hello World"; 
     } 

     [WebMethod] 
     public string simpleMethod(String srt) 
     { 
      return "Hello " + srt; 
     } 
    } 
} 

application Android MainActivity:

package com.clcltd.soaptest; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

import org.ksoap2.SoapEnvelope; 
import org.ksoap2.serialization.PropertyInfo; 
import org.ksoap2.serialization.SoapObject; 
import org.ksoap2.serialization.SoapPrimitive; 
import org.ksoap2.serialization.SoapSerializationEnvelope; 
import org.ksoap2.transport.HttpTransportSE; 

public class SoapTestActivity extends Activity { 
    private static final String SOAP_ACTION = "http://testuri.org/simpleMethod"; 
    private static final String METHOD_NAME = "simpleMethod"; 
    private static final String NAMESPACE = "http://tempuri.org/"; 
    private static final String URL = "http://192.168.2.22/wmcmobilewebservice/Service1.asmx"; 
    PropertyInfo pi; 
    TextView tv, tvc; 
    String str; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     tv = (TextView) findViewById(R.id.textView1); 
     tvc = (TextView) findViewById(R.id.textView2); 
     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

     str = "Andy"; 

     pi = new PropertyInfo(); 
     pi.setName("srt"); 
     pi.setValue(str); 
     pi.type = PropertyInfo.STRING_CLASS; 

     request.addProperty(pi); 

     SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     soapEnvelope.dotNet = true; 
     soapEnvelope.setOutputSoapObject(request); 

     HttpTransportSE aht = new HttpTransportSE(URL); 
     try{ 
      aht.call(SOAP_ACTION, soapEnvelope); 
      SoapPrimitive resultString = (SoapPrimitive) soapEnvelope.getResponse(); 
      tv.setText("Status: " + resultString); 
      tvc.setText(request.toString()); 
     }catch (Exception e) 
     { 
      e.printStackTrace(); 
      tv.setText("Error" + e.toString()); 
     } 
    } 
} 

Lorsque vous exécutez le code ci-dessus, je reçois la sortie suivante sur mon écran:

Statut: Bonjour simple eMethod {srt = Andy; }

Je pense que le résultat soit:

Statut: Bonjour Andy

Toutes les idées?

+0

Avez-vous essayé d'appeler ce service avec un client SOAP (comme SOAPuI)? Quelle est la réponse SAOP? – OguzOzkeroglu

+0

Pas encore, mais sur votre conseil je suis en train de télécharger SOAPUI maintenant. J'ai utilisé la fonction de test intégrée pour le webservice qui renvoie "Hello Andy" avec succès. Cependant, cela est effectué localement sur l'ordinateur portable de développement et non à partir de l'émulateur/combiné Android. – agrodude

+0

Grâce à SOAPUI, le webservice me permet d'obtenir un résultat satisfaisant. – agrodude

Répondre

0

J'ai passé un certain temps à ce sujet, mais à la fin je trouve un autre tutoriel (http://sarangasl.blogspot.co.uk/2010/09/create-simple-web-service-in-visual.html) détaillant comment utiliser le webservice KSOAP2 sur une ancienne version de KSOAP.

Le tutoriel inclut un lien vers le code qui contient une ancienne version de KSOAP.

A titre de test, j'ai mis la dernière version de KSOAP dans ce nouveau projet et il a cessé de fonctionner, il semble donc que mon problème était lié à la version après tout.

Espérons que pointer les autres dans ce tutoriel les aidera.

0

Pour recevoir une chaîne, essayez ceci:

SoapObject res = (SoapObject)soapEnvelope.getResponse(); 
tv.setText("Status: " + res.toString()); 
Questions connexes