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

Silverlight Discussion :

probleme appel webservice distant


Sujet :

Silverlight

  1. #1
    Membre très actif Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 713
    Par défaut probleme appel webservice distant
    Bonjour, j'ai une appli qui doit appeler un webservice php qui fonctionne avec un clientaccesspolicy.xml sur le root. Dans fiddler je reçois tout sauf l'appel de mon service quand je clique sur le bouton. Le service reference c'est bien passé et la méthode a été reconnue.

    Voici mon 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
    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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
     
    namespace SilverlightApplication6
    {
        public partial class MainPage : UserControl
        {
            public MainPage()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, RoutedEventArgs e)
            {
                ServiceReference1.HelloYouPortClient proxyMonWebService = new ServiceReference1.HelloYouPortClient();
     
                proxyMonWebService.getHelloAsync("nom", "prenom");
                proxyMonWebService.getHelloCompleted += service_getHelloCompleted;
     
                MessageBox.Show("io");
            }
     
            /*
            private void button1_Click(object sender, RoutedEventArgs e)
            {
                MessageBox.Show("io");
     
                ServiceReference1.HelloYouPortClient service =
                    new ServiceReference1.HelloYouPortClient();
                service.getHelloCompleted +=
                    new EventHandler<ServiceReference1.getHelloCompletedEventArgs>(service_getHelloCompleted);
     
                service.getHelloAsync("nom","prenom");
            }
            */
     
            public void service_getHelloCompleted(object sender,
                    ServiceReference1.getHelloCompletedEventArgs e)
            {
                MessageBox.Show(e.Result);
            }
        }
    }
    et mon clientaccesspolicy

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <access-policy>
       <cross-domain-access>
          <policy>
             <allow-from http-request-headers="*">
                <domain uri="*"/>
             </allow-from>
             <grant-to>
                <resource path="/" include-subpaths="true"/>
             </grant-to>
          </policy>
       </cross-domain-access>
    </access-policy>
    Quelqu'un pourrait 'aider ?

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Si le webservice est sur le même domaine Silverlight n'appelera pas le clientaccesspolicies je pense.

    Sinon inverse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    proxyMonWebService.getHelloAsync("nom", "prenom");
                proxyMonWebService.getHelloCompleted += service_getHelloCompleted;
    J'en doute mais il est possible que ton webservice retourne le résultat avant même que le délégué soit remplis par ton service_getHelloCompleted.

  3. #3
    Membre actif Avatar de freezer08
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Février 2011
    Messages : 59
    Par défaut
    Est-ce que ton web service est hébergé en local ?
    Si c'est le cas, c'est normal que tu ne vois rien, Fiddler ne sniffe pas les paquets envoyés en localhost.

    2 astuces pour pallier à ça :
    http://weblogs.asp.net/lorenh/archiv...localhost.aspx
    http://blogs.microsoft.co.il/blogs/s...localhost.aspx

    Et comme l'a noté micka132, effectivement, en toute logique, il vaut mieux s'abonner au callback avant de faire l'appel asynchrone (même si ça ne devrait rien changer ...)

  4. #4
    Membre très actif Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 713
    Par défaut
    Mon service est sur un serveur distant.

    ...par ailleurs le messagebox ne fonctionne pas. J'imagine donc que le probleme doit se situer au niveau de l'appel. Pour info, j'appelle le service en local et ça fonctionne.

    micka132, en inversant ça ne marche pas.

    Je veux dire que j'ai fait un script php en local pour tester sur le service etait accessible depuis le local et c'est le cas ...

  5. #5
    Membre actif Avatar de freezer08
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Février 2011
    Messages : 59
    Par défaut
    Est-ce que tu as lancé ton application en mode debug pour voir si elle exécutait bien le code au clic du bouton ?
    Si Fiddler n'affiche rien et que tu ne rentres jamais dans la méthode Completed, c'est que l'appel n'a jamais été lancé.

  6. #6
    Membre très actif Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 713
    Par défaut
    Je suis bien en mode debug ... Je crois que c'est le cas dont tu parles:

    en rajoutant un message dans le onClick, je ne reçois pas le deuxieme message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                MessageBox.Show("avant");
                ServiceReference1.HelloYouPortClient proxyMonWebService = new ServiceReference1.HelloYouPortClient();
     
               proxyMonWebService.getHelloCompleted += service_getHelloCompleted;
                proxyMonWebService.getHelloAsync("nom", "prenom");
     
     
                MessageBox.Show("io");
    de plus j'ai maintenant un
    KeyNotFoundException :

    The given key was not present in the dictionary.

  7. #7
    Membre actif Avatar de freezer08
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Février 2011
    Messages : 59
    Par défaut
    Il doit s'agir d'un problème venant du ServiceClient.config généré par Visual Studio avec le proxy web service.
    Quand tu instancies ton proxy avec le constructeur par défaut, il va chercher la clé par défaut dans le fichier de config. Vérifie le fichier, ça doit venir de là.

  8. #8
    Membre très actif Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 713
    Par défaut
    Si tu parles du fichier ServiceReferences.ClientConfig, il est vide...

    C'est bien celui là ?

  9. #9
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Je trouve bizzare la maniède d'enregistrer le callback :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    proxyMonWebService.getHelloCompleted += service_getHelloCompleted;
    Normalement c'est plutôt du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    proxyMonWebService.getHelloCompleted +=new EventHandler<getHelloCompletedEventArgs>(service_getHelloCompleted)
    J'avou ne pas savoir la différence.

  10. #10
    Membre actif Avatar de freezer08
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Février 2011
    Messages : 59
    Par défaut
    Je fatigue, j'avais le mauvais nom en effet -_-

    C'est pas normal qu'il soit vide.
    Soit tu spécifies ta config (binding, endpoint) à la mano au moment où tu instancies ton proxy web service, soit tu utilises le ServiceReferences.ClientConfig.

    Je te conseille de regénérer le proxy à partir de ton web service local. Ensuite, t'as plus qu'à modifier le clientconfig pour changer l'url du endpoint, en pointant vers ton service distant.

    Exemple, avec la config en local :

    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
     
    <configuration>
    	<system.serviceModel>
    		<bindings>
    			<basicHttpBinding>
    				<binding name="basicHttpBindingEndPoint" maxBufferSize="2147483647"
    					maxReceivedMessageSize="2147483647">
    					<security mode="None" />
    				</binding>
    			</basicHttpBinding>
    		</bindings>
    		<client>
                <endpoint address="http://localhost/Services/MonService.svc"
                    binding="basicHttpBinding" bindingConfiguration="basicHttpBindingEndPoint"
                    contract="MonServiceReference.IMonService" name="ProductionServiceConfiguration" />
            </client>
    	</system.serviceModel>
    </configuration>
    ... qui devient (cf. balise <endpoint> attribut address) :

    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
     
    <configuration>
    	<system.serviceModel>
    		<bindings>
    			<basicHttpBinding>
    				<binding name="basicHttpBindingEndPoint" maxBufferSize="2147483647"
    					maxReceivedMessageSize="2147483647">
    					<security mode="None" />
    				</binding>
    			</basicHttpBinding>
    		</bindings>
    		<client>
                <endpoint address="http://www.monsite.com/Services/MonService.svc"
                    binding="basicHttpBinding" bindingConfiguration="basicHttpBindingEndPoint"
                    contract="MonServiceReference.IMonService" name="ProductionServiceConfiguration" />
            </client>
    	</system.serviceModel>
    </configuration>

  11. #11
    Membre actif Avatar de freezer08
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Février 2011
    Messages : 59
    Par défaut
    @micka132 : c'est la même chose
    Avec ton 1er exemple, C# fait de l'inférence de type pour instancier ta delegate. Le compilateur transformera de toute façon en ta 2ème ligne.

  12. #12
    Membre très actif Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 713
    Par défaut
    Je n'ai plus d'erreur mais ça ne fonctionne toujours pas... je vais explorer la piste de micka132...

    oops no message se sont croisés.

  13. #13
    Membre actif Avatar de freezer08
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Février 2011
    Messages : 59
    Par défaut
    Mmm ok. Reprenons alors :
    - Tu as regénéré le proxy pour ne plus avoir le message d'erreur ?
    - En mode debug, est-ce que tu passes bien par le getHelloAsync() ?
    - Fiddler ne t'affiche toujours rien ?

  14. #14
    Membre très actif Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 713
    Par défaut
    j'ai de temps en temps une exception :

    Could not find default endpoint element that references contract 'ServiceReference1.HelloYouPort' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element.
    sinon, je ne passe pas par getHelloAsync() et fiddler ne sort rien.

  15. #15
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Que contient le ServiceReferences.clientconfig ?

  16. #16
    Membre très actif Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 713
    Par défaut
    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
    <configuration>
      <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding name="basicHttpBindingEndPoint" maxBufferSize="2147483647"
    					maxReceivedMessageSize="2147483647">
              <security mode="None" />
            </binding>
          </basicHttpBinding>
        </bindings>
        <client>
          <endpoint address="http://inkodeo.be/WebServices/HelloYou.wsdl"
              binding="basicHttpBinding" bindingConfiguration="basicHttpBindingEndPoint"
              contract="ServiceReference1.HelloYouService" name="ProductionServiceConfiguration" />
        </client>
      </system.serviceModel>
    </configuration>
    Ou le contract est Namespace.NomDuService

  17. #17
    Membre actif Avatar de freezer08
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Février 2011
    Messages : 59
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    address="http://inkodeo.be/WebServices/HelloYou.wsdl"
    Le problème vient de là. L'extension .wsdl n'existe pas, et ne sert de toute façon qu'à décrire le contrat des méthodes et données.
    Si tu utilises WCF et le déploiement classique, la bonne extension est ".svc".

  18. #18
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Tu peux également spécifier l'endpoint utilisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var proxyMonWebService = new ServiceReference1.HelloYouPortClient("ProductionServiceConfiguration");

  19. #19
    Membre très actif Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 713
    Par défaut
    freezer08, c'est un service php, au mieux je peux pointer directement sur le serveur... Je vais faire le test.

  20. #20
    Membre très actif Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 713
    Par défaut
    Et ça ne marche toujours pas...
    j'ai toujours un InvalidTypeException avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            private void button1_Click(object sender, RoutedEventArgs e)
            {
                MessageBox.Show("avant");
                //ServiceReference1.HelloYouPortClient proxyMonWebService = new ServiceReference1.HelloYouPortClient();
     
                ServiceReference1.HelloYouPortClient proxyMonWebService = new ServiceReference1.HelloYouPortClient("ProductionServiceConfiguration");
     
                proxyMonWebService.getHelloCompleted += service_getHelloCompleted;
                proxyMonWebService.getHelloAsync("nom", "prenom");
     
                MessageBox.Show("io");
            }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    address="http://inkodeo.be/WebServices/server.php"

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Probleme Appel webservice 4D 2003
    Par maveric dans le forum 4D
    Réponses: 4
    Dernier message: 28/09/2006, 16h39
  2. [Eclipse 3.1][Tomcat][Axis]Probleme execution WebService
    Par beZor dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 08/02/2006, 13h55
  3. [VB.Net] Problème appel fonction par un bouton
    Par balibo dans le forum ASP.NET
    Réponses: 4
    Dernier message: 25/11/2005, 10h48
  4. Probleme de connection distante
    Par scaleo dans le forum Outils
    Réponses: 3
    Dernier message: 16/09/2005, 17h55
  5. [MFC] débutant probleme appel de fonction
    Par Gloubi99 dans le forum MFC
    Réponses: 9
    Dernier message: 30/08/2005, 15h40

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