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

Windows Communication Foundation .NET Discussion :

[VB.NET] Service WCF Réception Message


Sujet :

Windows Communication Foundation .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2008
    Messages : 125
    Par défaut [VB.NET] Service WCF Réception Message
    Bonjour a tous,

    Je débute deoucement la programmation de service WCF. J'ai d'ailleur suivi un petit tuto trouvé sur le web.

    Cependant, j'ai un petit soucis avec la réception des messages envoyés par le service. J'arrive bien à les afficher via un MsgBox, mais en aucun cas les afficher dans une listview.

    Merci pour vos réponses.

    Voici les codes :

    Le Serveur :
    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
     
    <ServiceBehavior(ConcurrencyMode:=ConcurrencyMode.Reentrant, InstanceContextMode:=InstanceContextMode.PerSession)>
    Public Class ArkCommServer
    Implements ArkServer
     
    Private client As ArkClient
     
    Sub New()
    client = OperationContext.Current.GetCallbackChannel(Of ArkClient)()
    End Sub
     
    Public Sub RunAction(ByVal action As String, ByVal taskname As String) Implements WCFLibrary.ArkServer.RunAction
    Try
    Select Case action
    Case "READ"
    SendMessage(1, "Action READ démarrée")
    Case "WRITE"
    SendMessage(1, "Action WRITE démarrée")
    Case Else
    SendMessage(2, "Action inconnue.")
    End Select
    Catch ex As Exception
    client.ReceiveMessage(2, ex.Message)
    End Try
    End Sub
     
    Public Sub SendMessage(ByVal type As Integer, ByVal message As String) Implements WCFLibrary.ArkServer.SendMessage
    Try
    Select Case type
    Case 1 'Information
    client.ReceiveMessage(1, "Réponse du serveur : " & message)
    Case 2 'Erreur
    client.ReceiveMessage(2, "Réponse du serveur : " & message)
    End Select
    Catch ex As Exception
    client.ReceiveMessage(2, ex.Message)
    End Try
    End Sub
    ...
    ...
    Et le client :
    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
     
    <CallbackBehavior(ConcurrencyMode:=ConcurrencyMode.Reentrant, UseSynchronizationContext:=False)>
    Public Class frmMain
    Implements ArkClient
     
    Public WCFService As ArkServer
     
    Sub New()
    WCFService = DuplexChannelFactory(Of ArkServer).CreateChannel(Me, New NetTcpBinding(), New EndpointAddress("net.tcp://127.0.0.1:1500))
    End Sub
     
    Public Sub ReceiveMessage(ByVal type As Integer, ByVal message As String) Implements WCFLibrary.ArkClient.ReceiveMessage
    Try
    Select Case type
    Case 1
     
    MsgBox(message, MsgBoxStyle.Information, "Information") '----->S'affiche bien
    Dim lv As New ListViewItem(New String() {"Information", Process.GetCurrentProcess.Id, message}, 0)
    Me.lvLogs.Items.Add(lv) '----->Ne s'affiche pas
    lv.Selected = True
    lv.EnsureVisible()
     
    End Select
    Catch ex As Exception
    msgbox(ex.Message)
    End Try
    End Sub
     
    Public Sub SendAction(ByVal action As String, ByVal taskname As String) Implements WCFLibrary.ArkClient.SendAction
    Try
    listview.items.add("Action envoyée au serveur : " & action)
    WCFService.RunAction(action, taskname)
    Catch ex As Exception
    msgbox(ex.Message)
    End Try
    End Sub
     
    ....
    ....

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2008
    Messages : 125
    Par défaut
    Je pense avoir partiellement résolu mon problème en utilisant les delegate.

    Par contre, mon client fait en WinForm Freeze souvent.

    J'ai essayé de modifier ConcurrencyMode à Multiple et UseSynchronizationContext a False aussi bien sur le service Windows que sur le client mais rien n'y fait

    Avez vous une idée s'il vous plait ?

    Merci beaucoup.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2008
    Messages : 125
    Par défaut
    En fait, j'obtiens l 'erreur suivante au bout d'une minute de freeze :

    Description :
    Cette opération de demande envoyée à http://schemas.microsoft.com/2005/12...sing/Anonymous n'a pas reçu de réponse dans le délai imparti (00:00:59.9843750). Le temps alloué à cette opération fait peut-être partie d'un délai d'attente plus long. Ceci peut être dû au fait que le service est toujours en cours de traitement de l'opération ou qu'il n'a pas pu envoyer un message de réponse. Envisagez d'augmenter le délai d'attente de l'opération (en diffusant le canal/proxy vers IContextChannel et en définissant la propriété OperationTimeout) et vérifiez que le service peut se connecter au client.
    Server stack trace:
    à System.ServiceModel.Dispatcher.DuplexChannelBinder.SyncDuplexRequest.WaitForReply(TimeSpan timeout)
    à System.ServiceModel.Dispatcher.DuplexChannelBinder.Request(Message message, TimeSpan timeout)
    à System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
    à System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
    à System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
    Je pense que j'ai du oublier quelque chose...une faute de newbie peut être ?
    :p

    le plus étonnant c'est que quand j'affiche les messages reçus du serveur par des MsgBox, ça fonctionne sans problème et ça ne provoque aucune erreur...

    Bizarre...

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2008
    Messages : 125
    Par défaut
    C'est bon j'ai résolu mon problème !

    J'ai simplement mis un backgroundWorker pour l'exécution dans un autre thread et tout d'un coup, miracle !


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

Discussions similaires

  1. ASP.NET avec WCF Data Service
    Par DotNET74 dans le forum Services Web
    Réponses: 6
    Dernier message: 14/06/2014, 08h08
  2. Utiliser ASP.NET et service WCF
    Par xamuo dans le forum Windows Communication Foundation
    Réponses: 0
    Dernier message: 08/02/2012, 18h50
  3. Apache et .NET/Service WCF
    Par jkakim dans le forum Windows Communication Foundation
    Réponses: 9
    Dernier message: 01/09/2009, 18h04
  4. Réponses: 7
    Dernier message: 16/04/2008, 16h42
  5. Réponses: 1
    Dernier message: 13/01/2006, 14h18

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