IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

WCF et Application Android


Sujet :

Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 55
    Points : 21
    Points
    21
    Par défaut WCF et Application Android
    Bonjour à tous,

    Je désire faire une application Android toute bête utilisant un WebService WCF.
    La méthode de mon WS que je veux utiliser est celle-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Public Function Request(ByRef research As String) As String Implements IService1.Request
            Dim chaine As String = ""
            Dim lstElement As DbDataReader
     
     
            If String.IsNullOrEmpty(_connex.ConnectionString) Then
                '_connex.ConnectionString = "Data Source=VMD-META-DEMO\SQLEXPRESS;Persist Security Info=True;User ID=*****;Password=*****;"
                _connex.ConnectionString = "Data Source=VMD-SWIIP;Persist Security Info=True;User ID=****;Password=****;"
            End If
            If _connex.Type = clsConnectionBD.BDDType.NA Then
                _connex.Type = clsConnectionBD.BDDType.SQLServer
            End If
            _connex.Open()
            lstElement = _connex.ExecSelectToDR("SELECT NOM_INF, CMT_INF, RSP_INF, REG_INF FROM T_INF WHERE NOM_INF = '" + research + "' AND IDE_LANG = 1")
     
            While lstElement.Read()
                Dim nomItem As String = lstElement.Item("NOM_INF").ToString
                Dim cmtItem As String = lstElement.Item("CMT_INF").ToString
                Dim rspItem As String = lstElement.Item("RSP_INF").ToString
                Dim regItem As String = lstElement.Item("REG_INF").ToString
     
                chaine = nomItem + " ; " + cmtItem + " ; " + rspItem + " ; " + regItem
            End While
     
            Return chaine
        End Function
    Actuellement, j'arrive à faire communiquer mon service et mon application UNIQUEMENT si j'utilise une fonction sans paramètre (par exemple qui renvoie une chaîne de caractères toute bête).
    Lorsque je veux utiliser ma méthode avec mon argument de type String, j'ai cette erreur:

    AnyType{} blablabla
    Voici mon code côté client Java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    public class TestActivity extends Activity 
    {
     
          private static final String  SOAP_ACTION = "http://tempuri.org/IService1/Request";
          private static final String  METHOD_NAME = "Request";
          //private static final String METHOD_NAME = "IService1_Request_InputMessage";
          private static final String  NAMESPACE   = "http://tempuri.org/";
          private static final String  URL   = "http://******/webservicema/Service1.svc?wsdl";
          //private static final String URL   = "http://****/webservicema/WebService1.asmx";
          private EditText editText;
          private Button button;
          private String research="";
     
          /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle icicle) 
        {
     
          super.onCreate(icicle);
     
            setContentView(R.layout.main);
            //récupération de l'EditText grâce à  son ID
            editText = (EditText) findViewById(R.id.EditTextPrenom);
     
            //récupération du bouton grâce à  son ID
            button = (Button) findViewById(R.id.ButtonEnvoyer);
            //On applique un écouteur d'événement au clique sur le bouton
            button.setOnClickListener(
     
                new OnClickListener() {
                public void onClick(View v) {
                    //on récupère le texte écrit dans l'EditText
                      research = editText.getText().toString();
                      //Appel de la fonction SOAP (Webservice)
                      String soapResult = soap("research", research);
                      //Affichage du résultat
                      soapResult = "Résultat du mot clé " + research + " : " + soapResult;
                    //Toast.makeText(this,  "Bonjour " + research + " !", Toast.LENGTH_LONG).show();
                    ((TextView)findViewById(R.id.TextViewHello)).setText(soapResult);
                }
            }
            );
     
        }
     
        //public static SoapObject soap (String property, String value) throws IOException, XmlPullParserException
        public static String soap (String property, String value)
          {
                // Création de la requête SOAP
                SoapObject request = new SoapObject (NAMESPACE, METHOD_NAME);
                //Ajout de propriété: addProperty(nom de variable, valeur) -> Le nom de la variable vient du fichier WSDL
                if (property != null)
                      request.addProperty(property, value);
                //Toutes les données demandées sont mises dans une enveloppe.
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope (SoapEnvelope.VER11);
                //Préparation de la requête
                envelope.bodyOut = request;
                envelope.dotNet = true;
                envelope.setOutputSoapObject (request);
                HttpTransportSE androidHttpTransport = new HttpTransportSE (URL);
                //Ceci est optionnel, on l'utilise pour savoir si nous voulons ou non utiliser 
                //un paquet "sniffer" pour vérifier le message original (androidHttpTransport.requestDump)
                androidHttpTransport.debug = true; 
     
                //Envoi de la requête
                try {
                      androidHttpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
                      androidHttpTransport.call (SOAP_ACTION, envelope);
                } catch (IOException e) {
                      // TODO Auto-generated catch block
                      //e.printStackTrace();
                      return "erreur IOException";
                } catch (XmlPullParserException e) {
                      // TODO Auto-generated catch block
                      //e.printStackTrace();
                      return "erreur XmlPullParserException";
                }
                //Obtention du résultat
                try {
                      String soapResult = envelope.getResponse().toString();
                      return soapResult;
                      //return androidHttpTransport.responseDump;
                } catch (SoapFault e) {
                      // TODO Auto-generated catch block
                      //return e.toString();
                      return "erreur SoapFault";
                }
                //return "erreur";
          }
    }
    Je pense qu'il doit y avoir un soucis avec la méthode "AddProperty"..
    Je suis totalement novice dans le dév Android.. pouvez-vous m'aider ?

    Merci d'avance.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 55
    Points : 21
    Points
    21
    Par défaut
    Pour vous expliquer rapidement le rôle de mon appli: entrer un mot en recherche qui va faire ressortir les résultats d'une BDD (clause WHERE de la requête).

    Mon contrat de service: http://extranet.synergy.fr/webservic...vice1.svc?wsdl

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 55
    Points : 21
    Points
    21
    Par défaut
    Hello les gars,

    J'ai avancé un petit peu. Lorsque je mets en dur ma recherche ça marche, mais via le paramètre rien ne s'affiche.
    Je pense vraiment que cela vienne de la méthode AddProperty.. j'ai retourné tout le web et rien ne semble fonctionner

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 55
    Points : 21
    Points
    21
    Par défaut
    Je crois être sur une bonne piste.
    Avant d'utiliser ma méthode addProperty, j'ajoute ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PropertyInfo pi = new PropertyInfo();
     
    pi.setName("i";);
    pi.setValue(5);
    request.addProperty(pi);
    Le problème est que addProperty veut absolument qu'on lui passe deux arguments. Comment contourner le problème ?

  5. #5
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    C'est du SOAP ?

    Pourquoi ne pas utiliser les fonctions/objects stub générées à partir du WSDL ?

    OK... KSOAP-2 j'imagine....

    Documentation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     SoapObject	addProperty(PropertyInfo propertyInfo, java.lang.Object value) 
              Adds a property (parameter) to the object.
     SoapObject	addProperty(java.lang.String name, java.lang.Object value) 
              Adds a property (parameter) to the object.
    Dans tous les cas, la "value" est à passer...

    Sniff la requête passée, pour voir si elle part bien avec les bonnes données.
    Si c'est le cas, rajoute du log coté serveur pour vérifier que tu recois bien tout comme il faut.

    Par contre il va falloir blinder un peu coté serveur, parceque là... tu autorise du SQL-Injection... par exemple avec le parametre:
    "' or (delete from T_INF) or NOM_INF='"
    Ca risque de faire du mal

    En général on utilise des requêtes paramétrées (histoire de pas faire de SQL injection justement).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 55
    Points : 21
    Points
    21
    Par défaut
    Merci beaucoup pour ta réponse.
    Au niveau de l'affichage sur mon portable j'ai bien:

    Résultat du mot clé MON_MOT_CLE : ; ; ;

    Donc mon mot clé est bien pris en compte, sauf que du côté webservices, je n'ai pas la réponse attendue.
    J'ai testé mon webservices avec une appli console dans visual studio, et j'ai bien le résultat de la requête.. mais avec le client java ça ne passe pas.

    Concernant la méthode addProperty. Le 1er paramètre c'est bien le nom du paramètre DANS notre webservices ?
    Le 2ème étant la valeur que nous lui passons ?

    J'ai l'impression que ça claque ici.
    Merci d'avance

  7. #7
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Oui d'ou ma question de sniffer la requete....

    Par exemple en utilisant un proxy sous eclipse (déclarer le webservice comme pointant sur le eclipse, qui forwardera au vrai webservice), comme ca tu verras toutes les données qui passent (URL, Payload, headers, ...).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 55
    Points : 21
    Points
    21
    Par défaut
    Merci pour ta réponse.
    Par contre pour sniffer, je n'ai jamais fait ça. Je vais regarder sur google

Discussions similaires

  1. Scenario Online avec WCF dans application mobile
    Par requinham dans le forum Windows Communication Foundation
    Réponses: 0
    Dernier message: 03/04/2009, 09h38
  2. WCF Service Application : kézako ?
    Par pot2yaourt dans le forum C#
    Réponses: 0
    Dernier message: 17/03/2009, 15h01
  3. WCF Service Application Avec XML
    Par clavelski dans le forum Windows Communication Foundation
    Réponses: 1
    Dernier message: 20/02/2009, 11h07
  4. WCF et applications natives
    Par despeludo dans le forum Windows Communication Foundation
    Réponses: 4
    Dernier message: 15/11/2007, 11h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo