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 :

Problème appels asynchrones à un WCF avec SilverLight 3


Sujet :

Silverlight

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 15
    Points : 14
    Points
    14
    Par défaut Problème appels asynchrones à un WCF avec SilverLight 3
    Bonjour,

    Voilà j'ai créé un projet WCF (vb.NET) tout bête en suivant un tuto qui renvoie la valeur en Dollars d'une valeur en Euros.

    J'ai développé un client Silverlight (vb.NET) avec appel asynchrone pour recupérer la valeur sous un click bouton :

    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
     
    Partial
    Public Class Page 
    Inherits UserControl 
    Public Sub New() 
    InitializeComponent()
    End Sub 
    Private Sub appelService(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) 
    Dim val As Decimal 
    ' Dim pat As New PageAsyncTask(AddressOf BeginProductRetrieveAsync, AddressOf EndProductRetrieveAsync, Nothing, Nothing) 
    val = 100
    MessageBox.Show(
    "Clicked. Tentative d'appel du service") 
    Dim client As ServiceTest.ServiceDevClient 
    client = 
    New ServiceTest.ServiceDevClient() 
    MessageBox.Show(
    "Avant appel asynchrone") 
    AddHandler client.EuroToUsDollarsCompleted, AddressOf EuroToUsDollarsCallback 
    client.EuroToUsDollarsAsync(val)
    MessageBox.Show(
    "Apres appel asynchrone") 
    End Sub 
    Private Shared Sub EuroToUsDollarsCallback(ByVal sender As Object, ByVal e As ServiceTest.EuroToUsDollarsCompletedEventArgs) 
    Try 
    MessageBox.Show(
    "reponse : " & e.Result) 
    Console.WriteLine(
    "Add Result: {0}", e.Result) 
    Catch ex As Exception 
    MessageBox.Show(
    "Exception dans eurotousdollarscallback " & ex.Message) 
    End Try 
     
    End Sub 
    Public Event EuroToUsDollarsCompleted As System.EventHandler(Of ServiceTest.EuroToUsDollarsCompletedEventArgs) 
    <System.Diagnostics.DebuggerStepThroughAttribute(), _
    System.CodeDom.Compiler.GeneratedCodeAttribute(
    "System.ServiceModel", "3.0.0.0")> _ 
    Partial Public Class EuroToUsDollarsCompletedEventArgs 
    Inherits System.ComponentModel.AsyncCompletedEventArgs 
    Private results() As Object 
    Public Sub New(ByVal results() As Object, ByVal exception As System.Exception, ByVal cancelled As Boolean, ByVal userState As Object) 
    MyBase.New(exception, cancelled, userState) 
    Me.results = results 
    End Sub 
    Public ReadOnly Property Result() As Double 
    Get 
    MyBase.RaiseExceptionIfNecessary() 
    Return CType(Me.results(0), Double) 
    End Get 
    End Property 
    End Class 
    End
    Class
    J'ai même essayé en C# :
    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
     
    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
    Essai 
    {
    public partial class Page : UserControl 
    {
    public Page() 
    {
    InitializeComponent();
    }
    private void appelService(object sender, RoutedEventArgs e) 
    {
    ServiceTest.
    ServiceDevClient client = new ServiceTest.ServiceDevClient("basicHttpBinding_ServiceDevClient"); 
    client.EuroToUsDollarsCompleted += 
    new EventHandler<ServiceTest.EuroToUsDollarsCompletedEventArgs>(client_EuroToUsDollarsCompleted); 
    client.EuroToUsDollarsAsync(
    Convert.ToDecimal(valeurEntree.Text)); 
    }
    void client_EuroToUsDollarsCompleted(object sender, ServiceTest.EuroToUsDollarsCompletedEventArgs e) 
    {
    decimal result = e.Result; 
    this.valeurCalculeeService.Text = result.ToString(); 
    MessageBox.Show(" fin appel "); 
    MessageBox.Show(result.ToString()); 
    }
    }
    }
    Mais rien n'y fait je tombe toujours sur la même erreur au moment où je clique sur le bouton :


    J'ai même essayé d'ajouter crossdomain.xml et clientaccesspolicy.xml mais ça ne change rien.

    Quelqu'un a une idée ?

    Merci d'avance !

  2. #2
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    c'est pourtant typiquement une erreur de crossdomain

    je te renvoie sur mon blog pour plus d'info.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    C'est un service de la même solution et donc tout est en localhost.
    De plus, j'ai exactement le même clientaccesspolicy.xml que sur ton blog et l'erreur persiste

  4. #4
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    tu n'as pas utilisé le nom de ta machine au lieu de localhost quelque part ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Non pas du tout :/

  6. #6
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Apparement, tu passes par Cassini (le serveur Web de VS) donc si ce n'est pas un pb de nom de machine je ne vois pas.

    Que te dis Fiddler sur la question ?

    Tu peux aussi tenter une migration vers IIS, histoire de voir.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Je n'ai pas Fiddler et je ne sais pas comment passer en IIS, comment fait-on ?
    Je débute en WebService et en Silverlight

  8. #8
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Alors voici pour fiddler.

    Fiddler permet d'ecouter le trafic HTTP. Dans ton cas cela va te permettre de voir si il demande un fichier CrossDomain ou ClientAccessPolicy

    pour passer en IIS il faut que tu es IIS d'installer sur ta machine (google devrait t'aider à l'installer). puis dans les propriétés de ton projet Web dans "Start Options" (si ma mémoire est bonne) tu dois pouvoir basculer de Cassini vers IIS.

  9. #9
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Ton application se lance bien sur le port 8731 ? Tu as bien mis le fichier XML à la racine ?

  10. #10
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Ton application se lance bien sur le port 8731 ? Tu as bien mis le fichier XML à la racine ?
    Thomas, c'est possible de mettre un fichier à la racine de Cassini ?

Discussions similaires

  1. Problème de consommation de données WCF avec Silverlight
    Par EdouardTH dans le forum Services Web
    Réponses: 0
    Dernier message: 20/05/2011, 14h52
  2. Déploiement WCF avec Silverlight : comment déployer le svc ?
    Par stivideo dans le forum Windows Communication Foundation
    Réponses: 5
    Dernier message: 14/02/2011, 14h55
  3. Problème de web-service WCF avec EF4
    Par Reminouche dans le forum Entity Framework
    Réponses: 6
    Dernier message: 19/12/2010, 16h42
  4. Appel Asynchrone et WCF
    Par trihanhcie dans le forum ASP.NET
    Réponses: 18
    Dernier message: 02/05/2010, 14h34
  5. Problème déploiement et accès WCF pour Silverlight
    Par tom741 dans le forum Silverlight
    Réponses: 4
    Dernier message: 03/07/2009, 14h51

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