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

API standards et tierces Android Discussion :

Problème d'appel Web Service


Sujet :

API standards et tierces Android

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Points : 90
    Points
    90
    Par défaut Problème d'appel Web Service
    Bonjour bonsoir tout le monde.

    pour mon souci l'intitulé est clair. pour détailler :

    je développe un web service en .Net C#, plus précisément un wcf, dont voici le code :
    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
     
    public class ServiceTest : IServiceTest
        {
            static List<Menu> lstMenu;
     
            public int getNombreMenu()
            {
                Console.WriteLine("demande de comptabilité");
                if (lstMenu == null)
                    lstMenu = new List<Menu>();
     
                return (lstMenu.Count);
            }
        }
     
    [ServiceContract(Namespace="NabService.test")]
        public interface IServiceTest
        {
     
            [OperationContract]
            int getNombreMenu();
        }
    et dans mon app.config j'ai ceci entre autre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <host>
              <baseAddresses>
                <add baseAddress="http://localhost:8732/IServiceTest"/>
              </baseAddresses>
            </host>
    Celui ci marche bien, avec un client .Net j'intérroge bien mon WS.

    En revanche coté android, j'utilise android studio, avec un émulateur. j'ai mis en place 3 solutions pour intérroger mon ws :

    1ere
    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
     
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
     
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet=true;
            envelope.setOutputSoapObject(request);
     
            HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
            androidHttpTransport.debug=true;
     
            boolean bError = false;
     
            try
            {
                if(androidHttpTransport == null)
                    tv.setText("httpTransport nul");
                else
                {
                    androidHttpTransport.call(SOAP_ACTION,envelope);
                    tv.setText("envoi de requete ok");
                }
     
            }
            catch (Exception  exp)
            {
                tv.setText("erreur d'envoi de requete " + exp.getMessage());
                bError = true;
            }
    le code fonctionne, pas d'erreur particulière, sauf celle du catch.

    2eme version :

    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
     
    InputStream StreamReponse = null;
            try {
                // Ouverture de la connexion
                URL url = new URL(URL);
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
     
                // Connexion à l'URL
                urlConnection.connect();
     
                // Si le serveur nous répond avec un code OK
                if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                    StreamReponse = urlConnection.getInputStream();
                }
            }
            catch (Exception e)
            {
                return null;
            }
    la version du tuto sur ce site meme.

    3eme :

    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
     URL myurl = null;
     
            try {
                myurl = new URL(URL + "/getNombreMenu");
                Toast.makeText(getApplicationContext(), "URL ok",Toast.LENGTH_LONG).show();
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                URLConnection myconn =myurl.openConnection();
                Toast.makeText(getApplicationContext(), "instance connexion",Toast.LENGTH_LONG).show();
                InputStream in= new BufferedInputStream(myconn.getInputStream());
                Toast.makeText(getApplicationContext(), "reception flux",Toast.LENGTH_LONG).show();
    ...
    rien qu'a ce niveau je sors en erreur

    pour info voici mon parametrage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private static final String NAMESPACE = "NabService.test";
        private static final String URL = "http://10.0.2.2:8732/IServiceTest";
        private static final String METHOD_NAME = "getNombreMenu";
        private static final String SOAP_ACTION = "NabService.test/IServiceTest/getNombreMenu";
    Celui ci me semble ok d'après le wsdl.

    j'ai bien la permission d'accès au web sur mon manifest, mon navigateur se connecte bien a internet depuis l'émulateur, et j'ai essayé d'appeler mon web service depuis le navigateur mais erreur quand meme.

    si quelqu'un aurait une solution à m'avancer j'y serai très attentif.

    si vous avez besoin de plus d'infos n'hésitez pas.

    Merci d'avance pour votre aide

  2. #2
    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
    Déjà... en cas d'erreur, toujours faire un Log....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Log.e(TAGDEMACLASSE,"Erreur à tel ou tel endroit",exception);
    Ce qui permettra d'avoir l'erreur (et surtout la stacktrace associée) dans le logcat.

    Donc bon... ben il nous faudrait l'erreur pour avancer ^^
    Là ça pourrait très bien un "NullPointerException", un "DivisionByZeroException" ou un "ExternalTemperatureTooHotToWorkCorrectlyException"
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Points : 90
    Points
    90
    Par défaut
    Merci nicroman pour ton intervention ! j'avoue qu'un rien m'a permis de résoudre mon problème. suffisait de bien récupérer mon erreur pour avancer dans ma résolution de problème.

    en fait je passais par des Toast pour savoir plus ou moins la où ca plantait, mais sans avoir trop d'informations non plus. je capturais mal mes exceptions, donc avec le Log et une bonne gestion des exceptions j'ai pu mieux cibler mon problème qui était en réalité un souci de threading. voici l'erreur qui remontait avec mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    android.os.NetworkOnMainThreadException
    j'y ai integré mon code dans un thread en utilisant les AsyncTask et c'était reglé ;-)

    donc Merci nicroman, de m'avoir orienté sur les Log, problème résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème avec les web service client
    Par Jack-Ob dans le forum NetBeans
    Réponses: 2
    Dernier message: 22/07/2009, 10h40
  2. Appel Web Service en C++ sous AIX
    Par qiqi1111 dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 16/03/2009, 13h57
  3. [Axis 2] : pb appel web services avec paramètre à null
    Par Foub dans le forum Services Web
    Réponses: 1
    Dernier message: 06/01/2009, 07h31
  4. Problème appel Web Service SharePoint
    Par bugmenot dans le forum Windows
    Réponses: 0
    Dernier message: 14/09/2007, 15h09
  5. [2.0][C#] appel web service
    Par lenoil dans le forum Services Web
    Réponses: 1
    Dernier message: 09/10/2006, 08h24

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