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 :

Chat VB.NET WCF


Sujet :

Windows Communication Foundation .NET

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Par défaut Chat VB.NET WCF
    Bonjour,

    Je viens de traduire le chat http://badger.developpez.com/tutorie...atez-avec-WCF/ en VB.NET

    Ca a l'air de marcher, mes clients se connectent bien au channel et l'hote les affiche correctement mais les messages ne sont pas transmis. Chaque client recoit seulement le message qu'il envoie, de la meme facon, les messages qui disent qu'un nouveau client est connecté ne passent pas. Est ce que quelqu un a deja eu ce probleme ?

    Voici mon code pour ChatWCF.vb

    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
     
    Imports System
    Imports System.Collections.Generic
    Imports System.Linq
    Imports System.Text
     
    Imports System.ServiceModel
    Imports System.Threading
    Imports ChatContracts
     
    Namespace ChatServices
     
        <ServiceBehavior(InstanceContextMode:=InstanceContextMode.PerSession, ConcurrencyMode:=ConcurrencyMode.Single)> Public Class ChatWCF
            Implements IChatWCF
     
            Event ChatMessageEvent As ChatMessageEventHandler
            Delegate Sub ChatMessageEventHandler(ByVal sender As Object, ByVal e As ChatMessageEventArgs)
     
            Event ConnexionEvent As ConnexionEventHandler
            Delegate Sub ConnexionEventHandler(ByVal sender As Object, ByVal e As ConnexionEventArgs)
     
            Event DeconnexionEvent As DeconnexionEventHandler
            Delegate Sub DeconnexionEventHandler(ByVal sender As Object, ByVal e As DeconnexionEventArgs)
     
            'pour rappeler le client
            Private callback As IChatWCFRappel = Nothing
     
            'pseudo de l'utilisateur
            Private pseudoUtilisateur As String = Nothing
     
            'liste des utilisateurs connectés
            Dim listeUtilisateurs As List(Of String) = New List(Of String)
     
            Public Sub DemarrerSession(ByVal pseudo As String) Implements IChatWCF.DemarrerSession
     
                Console.WriteLine("User " & pseudo & " is attempting to connect")
                callback = OperationContext.Current.GetCallbackChannel(Of IChatWCFRappel)()
                pseudoUtilisateur = pseudo
     
                SyncLock (listeUtilisateurs)
     
                    listeUtilisateurs.Add(pseudo)
     
                    AddHandler ChatMessageEvent, AddressOf ChatMessageHandler 'on s'abonne à la réception de nouveaux messages
                    AddHandler ConnexionEvent, AddressOf ConnexionHandler 'on s'abonne à la connexion de nouveaux utilisateurs
                    AddHandler DeconnexionEvent, AddressOf DeconnexionHandler 'on s'abonne à la déconnexion d'utilisateurs
                    Dim cea As ConnexionEventArgs = New ConnexionEventArgs() 'on informe les utilisateurs de la connexion d'un nouveau venu
                    cea.Utilisateur = Me.pseudoUtilisateur
                    RaiseEvent ConnexionEvent(Me, cea)
                    AddHandler OperationContext.Current.Channel.Closing, AddressOf Channel_Closing
     
                    Console.WriteLine("User {0} is connected", pseudoUtilisateur)
                End SyncLock
            End Sub
     
            '//le client ferme le canal
            Private Sub Channel_Closing(ByVal sender As Object, ByVal e As EventArgs)
     
                Console.WriteLine("{0} closed channel", pseudoUtilisateur)
                ' //si on n'est pas passé par FermerSession avant
                SyncLock (listeUtilisateurs)
     
                    If listeUtilisateurs.Contains(Me.pseudoUtilisateur) Then
                        FermerSession()
                    End If
                End SyncLock
            End Sub
     
            Public Sub FermerSession() Implements IChatWCF.FermerSession
     
                SyncLock (listeUtilisateurs)
     
                    ' //on désabonne le client
                    RemoveHandler ChatMessageEvent, AddressOf ChatMessageHandler
                    RemoveHandler ConnexionEvent, AddressOf ConnexionHandler
                    RemoveHandler DeconnexionEvent, AddressOf DeconnexionHandler
     
                    listeUtilisateurs.Remove(Me.pseudoUtilisateur)
                End SyncLock
     
                '  //on informe les utilisateurs de la déconnexion 
                Dim dea As DeconnexionEventArgs = New DeconnexionEventArgs()
                dea.Utilisateur = Me.pseudoUtilisateur
     
                Try
                    RaiseEvent DeconnexionEvent(Me, dea)
                Catch ex As Exception
     
                End Try
     
     
     
                Console.WriteLine("User {0} is disconnected", Me.pseudoUtilisateur)
            End Sub
     
     
     
            Public Sub EnvoyerMessage(ByVal message As String) Implements IChatWCF.EnvoyerMessage
     
                'on informe les utilisateurs d'un nouveau message
                Dim mea As ChatMessageEventArgs = New ChatMessageEventArgs()
                mea.Message = message '//le message
                mea.Utilisateur = Me.pseudoUtilisateur '//l'expéditeur
                RaiseEvent ChatMessageEvent(Me, mea)
                Console.WriteLine(mea.Utilisateur & ":" & mea.Message)
            End Sub
     
            Public Sub Test() Implements IChatWCF.test
                Console.WriteLine("Test")
            End Sub
     
            'méthode appelée quand l'évènement ChatMessageEvent est déclanché
            Private Sub ChatMessageHandler(ByVal sender As Object, ByVal e As ChatMessageEventArgs) ' Handles Me.ChatMessageEvent
                callback.ReceptionMessage(e.Utilisateur, e.Message)
            End Sub
     
            'méthode appelée quand l'évènement DeconnexionEvent est déclanché
            Private Sub DeconnexionHandler(ByVal sender As Object, ByVal e As DeconnexionEventArgs) ' Handles Me.DeconnexionEvent
     
                callback.deconnexionUtilisateur(e.Utilisateur)
            End Sub
     
            'méthode appelée quand l'évènement ConnexionEvent est déclanché
            Private Sub ConnexionHandler(ByVal sender As Object, ByVal e As ConnexionEventArgs) ' Handles Me.ConnexionEvent
                callback.connexionUtilisateur(e.Utilisateur)
            End Sub
     
            Class ChatMessageEventArgs
                Inherits EventArgs
     
                Private _message As String
                Private _utilisateur As String
     
                Public Property Message() As String
                    Get
                        Return _message
                    End Get
                    Set(ByVal Value As String)
                        _message = Value
                    End Set
                End Property
                Public Property Utilisateur() As String
                    Get
                        Return _utilisateur
                    End Get
                    Set(ByVal Value As String)
                        _utilisateur = Value
                    End Set
                End Property
            End Class
     
            Class DeconnexionEventArgs
                Inherits EventArgs
     
                Private _utilisateur As String
                Public Property Utilisateur() As String
                    Get
                        Return _utilisateur
                    End Get
                    Set(ByVal Value As String)
                        _utilisateur = Value
                    End Set
                End Property
            End Class
     
            Class ConnexionEventArgs
                Inherits EventArgs
                Private _utilisateur As String
                Public Property Utilisateur() As String
                    Get
                        Return _utilisateur
                    End Get
                    Set(ByVal Value As String)
                        _utilisateur = Value
                    End Set
                End Property
            End Class
     
        End Class
    End Namespace

  2. #2
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Je lis mal le Vb mais comme ça je dirais que ça vient de la déclaration des évènements. Dans le code C# ils sont Static. Dans le code VB je ne vois pas l'équivalent (Shared il me semble).

    Le fait de les rendre Static permet à toutes les instances de ChatWCF d'être notifié du même evènement. C'est pas la seul technique pour le faire mais c'est celle que j'ai utilisée.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Par défaut
    Très bien vu, c'etait ca ! Merci beaucoup ! Très bon article aussi, j'ai appris beaucoup de choses.

    Voici le code VB.NET corrigé si ca peut servir à quelqu'un :

    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
     
     
    Imports System
    Imports System.Collections.Generic
    Imports System.Linq
    Imports System.Text
     
    Imports System.ServiceModel
    Imports System.Threading
    Imports ChatContracts
     
    Namespace ChatServices
     
        <ServiceBehavior(InstanceContextMode:=InstanceContextMode.PerSession, ConcurrencyMode:=ConcurrencyMode.Single)> Public Class ChatWCF
            Implements IChatWCF
     
            Shared Event ChatMessageEvent As ChatMessageEventHandler
            Delegate Sub ChatMessageEventHandler(ByVal sender As Object, ByVal e As ChatMessageEventArgs)
     
            Shared Event ConnexionEvent As ConnexionEventHandler
            Delegate Sub ConnexionEventHandler(ByVal sender As Object, ByVal e As ConnexionEventArgs)
     
            Shared Event DeconnexionEvent As DeconnexionEventHandler
            Delegate Sub DeconnexionEventHandler(ByVal sender As Object, ByVal e As DeconnexionEventArgs)
     
            'pour rappeler le client
            Private callback As IChatWCFRappel = Nothing
     
            'pseudo de l'utilisateur
            Private pseudoUtilisateur As String = Nothing
     
            'liste des utilisateurs connectés
            Shared listeUtilisateurs As List(Of String) = New List(Of String)
     
            Public Sub DemarrerSession(ByVal pseudo As String) Implements IChatWCF.DemarrerSession
     
                Console.WriteLine("User " & pseudo & " is attempting to connect")
                callback = OperationContext.Current.GetCallbackChannel(Of IChatWCFRappel)()
                pseudoUtilisateur = pseudo
     
                SyncLock (listeUtilisateurs)
     
                    listeUtilisateurs.Add(pseudo)
     
                    AddHandler ChatMessageEvent, AddressOf ChatMessageHandler 'on s'abonne à la réception de nouveaux messages
                    AddHandler ConnexionEvent, AddressOf ConnexionHandler 'on s'abonne à la connexion de nouveaux utilisateurs
                    AddHandler DeconnexionEvent, AddressOf DeconnexionHandler 'on s'abonne à la déconnexion d'utilisateurs
                    Dim cea As ConnexionEventArgs = New ConnexionEventArgs() 'on informe les utilisateurs de la connexion d'un nouveau venu
                    cea.Utilisateur = Me.pseudoUtilisateur
                    RaiseEvent ConnexionEvent(Me, cea)
                    AddHandler OperationContext.Current.Channel.Closing, AddressOf Channel_Closing
     
                    Console.WriteLine("User {0} is connected", pseudoUtilisateur)
                End SyncLock
            End Sub
     
            '//le client ferme le canal
            Private Sub Channel_Closing(ByVal sender As Object, ByVal e As EventArgs)
     
                Console.WriteLine("{0} closed channel", pseudoUtilisateur)
                ' //si on n'est pas passé par FermerSession avant
                SyncLock (listeUtilisateurs)
     
                    If listeUtilisateurs.Contains(Me.pseudoUtilisateur) Then
                        FermerSession()
                    End If
                End SyncLock
            End Sub
     
            Public Sub FermerSession() Implements IChatWCF.FermerSession
     
                SyncLock (listeUtilisateurs)
     
                    ' //on désabonne le client
                    RemoveHandler ChatMessageEvent, AddressOf ChatMessageHandler
                    RemoveHandler ConnexionEvent, AddressOf ConnexionHandler
                    RemoveHandler DeconnexionEvent, AddressOf DeconnexionHandler
     
                    listeUtilisateurs.Remove(Me.pseudoUtilisateur)
                End SyncLock
     
                '  //on informe les utilisateurs de la déconnexion 
                Dim dea As DeconnexionEventArgs = New DeconnexionEventArgs()
                dea.Utilisateur = Me.pseudoUtilisateur
     
                Try
                    RaiseEvent DeconnexionEvent(Me, dea)
                Catch ex As Exception
     
                End Try
     
     
     
                Console.WriteLine("User {0} is disconnected", Me.pseudoUtilisateur)
            End Sub
     
     
     
            Public Sub EnvoyerMessage(ByVal message As String) Implements IChatWCF.EnvoyerMessage
     
                'on informe les utilisateurs d'un nouveau message
                Dim mea As ChatMessageEventArgs = New ChatMessageEventArgs()
                mea.Message = message '//le message
                mea.Utilisateur = Me.pseudoUtilisateur '//l'expéditeur
                RaiseEvent ChatMessageEvent(Me, mea)
                Console.WriteLine(mea.Utilisateur & ":" & mea.Message)
            End Sub
     
            Public Sub Test() Implements IChatWCF.test
                Console.WriteLine("Test")
            End Sub
     
            'méthode appelée quand l'évènement ChatMessageEvent est déclanché
            Private Sub ChatMessageHandler(ByVal sender As Object, ByVal e As ChatMessageEventArgs) ' Handles Me.ChatMessageEvent
                callback.ReceptionMessage(e.Utilisateur, e.Message)
            End Sub
     
            'méthode appelée quand l'évènement DeconnexionEvent est déclanché
            Private Sub DeconnexionHandler(ByVal sender As Object, ByVal e As DeconnexionEventArgs) ' Handles Me.DeconnexionEvent
     
                callback.deconnexionUtilisateur(e.Utilisateur)
            End Sub
     
            'méthode appelée quand l'évènement ConnexionEvent est déclanché
            Private Sub ConnexionHandler(ByVal sender As Object, ByVal e As ConnexionEventArgs) ' Handles Me.ConnexionEvent
                callback.connexionUtilisateur(e.Utilisateur)
            End Sub
     
            Class ChatMessageEventArgs
                Inherits EventArgs
     
                Private _message As String
                Private _utilisateur As String
     
                Public Property Message() As String
                    Get
                        Return _message
                    End Get
                    Set(ByVal Value As String)
                        _message = Value
                    End Set
                End Property
                Public Property Utilisateur() As String
                    Get
                        Return _utilisateur
                    End Get
                    Set(ByVal Value As String)
                        _utilisateur = Value
                    End Set
                End Property
            End Class
     
            Class DeconnexionEventArgs
                Inherits EventArgs
     
                Private _utilisateur As String
                Public Property Utilisateur() As String
                    Get
                        Return _utilisateur
                    End Get
                    Set(ByVal Value As String)
                        _utilisateur = Value
                    End Set
                End Property
            End Class
     
            Class ConnexionEventArgs
                Inherits EventArgs
                Private _utilisateur As String
                Public Property Utilisateur() As String
                    Get
                        Return _utilisateur
                    End Get
                    Set(ByVal Value As String)
                        _utilisateur = Value
                    End Set
                End Property
            End Class
     
        End Class
    End Namespace

  4. #4
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Si c'est exactement le même code, tu pourrais m'envoyer la solution Visual Studio que je la mette dans la partie téléchargement de l'article (si tu veux bien sûr).
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Par défaut
    Je l'ai integré dans un projet qui n'a pas vocation à faire du chat et un peu adapté maintenant... (rajouté la fonction qui recupere les utilisateurs, elle n'est pas shared expres )

    Je te copie ici les 3 classes + un bout du coté client, il faudrait juste faire l'interface graphique du client.

    A+

    ChatWCF.vb

    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
     
    Imports System
    Imports System.Collections.Generic
    Imports System.Linq
    Imports System.Text
     
    Imports System.ServiceModel
    Imports System.Threading
    Imports ChatContracts
     
    Namespace ChatServices
     
        <ServiceBehavior(InstanceContextMode:=InstanceContextMode.PerSession, ConcurrencyMode:=ConcurrencyMode.Single)> Public Class ChatWCF
            Implements IChatWCF
     
            Shared Event ChatMessageEvent As ChatMessageEventHandler
            Delegate Sub ChatMessageEventHandler(ByVal sender As Object, ByVal e As ChatMessageEventArgs)
     
            Shared Event ConnexionEvent As ConnexionEventHandler
            Delegate Sub ConnexionEventHandler(ByVal sender As Object, ByVal e As ConnexionEventArgs)
     
            Shared Event DeconnexionEvent As DeconnexionEventHandler
            Delegate Sub DeconnexionEventHandler(ByVal sender As Object, ByVal e As DeconnexionEventArgs)
     
            Event getListUserEvent As getListUserEventHandler ' not shared so only the caller gets it
            Delegate Sub getListUserEventHandler(ByVal sender As Object, ByVal e As getListUserEventArgs)
     
            'pour rappeler le client
            Private callback As IChatWCFRappel = Nothing
     
            'pseudo de l'utilisateur
            Private pseudoUtilisateur As String = Nothing
     
            'liste des utilisateurs connectés
            Shared listeUtilisateurs As List(Of String) = New List(Of String)
     
            Public Sub getlisteUtilisateur() Implements IChatWCF.GetlisteUtilisateurs
                Dim str As String = ""
                For i As Integer = 0 To listeUtilisateurs.Count - 1
                    str &= listeUtilisateurs(i) & ";"
                Next
                Dim gea As getListUserEventArgs = New getListUserEventArgs()
                gea.UserList = str
                gea.Utilisateur = Me.pseudoUtilisateur '//l'expéditeur
                RaiseEvent getListUserEvent(Me, gea)
                Console.WriteLine(gea.Utilisateur & ":" & gea.UserList)
            End Sub
     
     
            Public Sub DemarrerSession(ByVal pseudo As String) Implements IChatWCF.DemarrerSession
     
                Console.WriteLine("User " & pseudo & " is attempting to connect")
                callback = OperationContext.Current.GetCallbackChannel(Of IChatWCFRappel)()
                pseudoUtilisateur = pseudo
     
                SyncLock (listeUtilisateurs)
     
                    listeUtilisateurs.Add(pseudo)
     
                    AddHandler ChatMessageEvent, AddressOf ChatMessageHandler 'on s'abonne à la réception de nouveaux messages
                    AddHandler ConnexionEvent, AddressOf ConnexionHandler 'on s'abonne à la connexion de nouveaux utilisateurs
                    AddHandler DeconnexionEvent, AddressOf DeconnexionHandler 'on s'abonne à la déconnexion d'utilisateurs
                    AddHandler getListUserEvent, AddressOf getListUserHandler
     
                    Dim cea As ConnexionEventArgs = New ConnexionEventArgs() 'on informe les utilisateurs de la connexion d'un nouveau venu
                    cea.Utilisateur = Me.pseudoUtilisateur
     
                    RaiseEvent ConnexionEvent(Me, cea)
                    AddHandler OperationContext.Current.Channel.Closing, AddressOf Channel_Closing
     
                    Console.WriteLine("User {0} is connected", pseudoUtilisateur)
                End SyncLock
            End Sub
     
            '//le client ferme le canal
            Private Sub Channel_Closing(ByVal sender As Object, ByVal e As EventArgs)
     
                Console.WriteLine("{0} closed channel", pseudoUtilisateur)
                ' //si on n'est pas passé par FermerSession avant
                SyncLock (listeUtilisateurs)
     
                    If listeUtilisateurs.Contains(Me.pseudoUtilisateur) Then
                        FermerSession()
                    End If
                End SyncLock
            End Sub
     
            Public Sub FermerSession() Implements IChatWCF.FermerSession
     
                SyncLock (listeUtilisateurs)
     
                    ' //on désabonne le client
                    RemoveHandler ChatMessageEvent, AddressOf ChatMessageHandler
                    RemoveHandler ConnexionEvent, AddressOf ConnexionHandler
                    RemoveHandler DeconnexionEvent, AddressOf DeconnexionHandler
                    RemoveHandler getListUserEvent, AddressOf getListUserHandler
     
                    listeUtilisateurs.Remove(Me.pseudoUtilisateur)
                End SyncLock
     
                '  //on informe les utilisateurs de la déconnexion 
                Dim dea As DeconnexionEventArgs = New DeconnexionEventArgs()
                dea.Utilisateur = Me.pseudoUtilisateur
     
                Try
                    RaiseEvent DeconnexionEvent(Me, dea)
                Catch ex As Exception
     
                End Try
     
     
     
                Console.WriteLine("User {0} is disconnected", Me.pseudoUtilisateur)
            End Sub
     
     
     
            Public Sub EnvoyerMessage(ByVal message As String) Implements IChatWCF.EnvoyerMessage
     
                'on informe les utilisateurs d'un nouveau message
                Dim mea As ChatMessageEventArgs = New ChatMessageEventArgs()
                mea.Message = message '//le message
                mea.Utilisateur = Me.pseudoUtilisateur '//l'expéditeur
                RaiseEvent ChatMessageEvent(Me, mea)
                Console.WriteLine(mea.Utilisateur & ":" & mea.Message)
            End Sub
     
            Public Sub Test() Implements IChatWCF.test
                Console.WriteLine("Test")
            End Sub
     
            'méthode appelée quand l'évènement ChatMessageEvent est déclanché
            Private Sub ChatMessageHandler(ByVal sender As Object, ByVal e As ChatMessageEventArgs) ' Handles Me.ChatMessageEvent
                callback.ReceptionMessage(e.Utilisateur, e.Message)
            End Sub
     
            'méthode appelée quand l'évènement DeconnexionEvent est déclanché
            Private Sub DeconnexionHandler(ByVal sender As Object, ByVal e As DeconnexionEventArgs) ' Handles Me.DeconnexionEvent
     
                callback.deconnexionUtilisateur(e.Utilisateur)
            End Sub
     
            'méthode appelée quand l'évènement ConnexionEvent est déclanché
            Private Sub ConnexionHandler(ByVal sender As Object, ByVal e As ConnexionEventArgs) ' Handles Me.ConnexionEvent
                callback.connexionUtilisateur(e.Utilisateur)
            End Sub
     
            Private Sub getListUserHandler(ByVal sender As Object, ByVal e As getListUserEventArgs)
                callback.ReceptionUserList(e.Utilisateur, e.UserList)
            End Sub
     
            Class ChatMessageEventArgs
                Inherits EventArgs
     
                Private _message As String
                Private _utilisateur As String
     
                Public Property Message() As String
                    Get
                        Return _message
                    End Get
                    Set(ByVal Value As String)
                        _message = Value
                    End Set
                End Property
                Public Property Utilisateur() As String
                    Get
                        Return _utilisateur
                    End Get
                    Set(ByVal Value As String)
                        _utilisateur = Value
                    End Set
                End Property
            End Class
     
            Class DeconnexionEventArgs
                Inherits EventArgs
     
                Private _utilisateur As String
                Public Property Utilisateur() As String
                    Get
                        Return _utilisateur
                    End Get
                    Set(ByVal Value As String)
                        _utilisateur = Value
                    End Set
                End Property
            End Class
     
            Class ConnexionEventArgs
                Inherits EventArgs
                Private _utilisateur As String
                Public Property Utilisateur() As String
                    Get
                        Return _utilisateur
                    End Get
                    Set(ByVal Value As String)
                        _utilisateur = Value
                    End Set
                End Property
            End Class
     
            Class getListUserEventArgs
                Inherits EventArgs
     
                Private _utilisateur As String
                Private _userlist As String
     
                Public Property Utilisateur() As String
                    Get
                        Return _utilisateur
                    End Get
                    Set(ByVal Value As String)
                        _utilisateur = Value
                    End Set
                End Property
     
                Public Property UserList() As String
                    Get
                        Return _userlist
                    End Get
                    Set(ByVal Value As String)
                        _userlist = Value
                    End Set
                End Property
            End Class
     
     
        End Class
    End Namespace
    IChatWCF.vb
    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
     
    Imports System
    Imports System.Collections.Generic
    Imports System.Linq
    Imports System.Runtime.Serialization
    Imports System.ServiceModel
    Imports System.Text
    Imports ChatServices.ChatWCF
     
    Namespace ChatContracts
     
     
        <ServiceContract(callbackcontract:=GetType(IChatWCFRappel), Name:="ChatDVP", namespace:="http://www.developpez.com/chatWCF/2008/01", SessionMode:=SessionMode.Required)> Public Interface IChatWCF
     
            <OperationContract(isinitiating:=True, isterminating:=False, isoneway:=True)> Sub DemarrerSession(ByVal userName As String)
            <OperationContract(isinitiating:=False, isterminating:=True, isoneway:=True)> Sub FermerSession()
            <OperationContract(isinitiating:=False, isterminating:=False, isoneway:=True)> Sub EnvoyerMessage(ByVal message As String)
            <OperationContract(isinitiating:=False, isterminating:=False, isoneway:=True)> Sub test()
            <OperationContract(isinitiating:=False, isterminating:=False, isoneway:=True)> Sub GetlisteUtilisateurs()
        End Interface
    End Namespace

    IChatWCFRappel.vb
    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
     
    Imports System
    Imports System.Collections.Generic
    Imports System.Linq
    Imports System.Runtime.Serialization
    Imports System.ServiceModel
    Imports System.Text
     
    Namespace ChatContracts
        Public Interface IChatWCFRappel
            <OperationContract(isoneway:=True)> Sub connexionUtilisateur(ByVal userName As String)
            <OperationContract(isoneway:=True)> Sub deconnexionUtilisateur(ByVal userName As String)
            <OperationContract(isoneway:=True)> Sub ReceptionMessage(ByVal userName As String, ByVal message As String)
            <OperationContract(isoneway:=True)> Sub ReceptionErreur(ByVal erreur As String)
            <OperationContract(isoneway:=True)> Sub ReceptionUserList(ByVal userName As String, ByVal message As String)
        End Interface
    End Namespace

    Hote
    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
     
    Imports ChatServices
    Imports System
    Imports System.Collections.Generic
    Imports System.Linq
    Imports System.Text
    Imports System.ServiceModel
    Imports ChatContracts
     
    Module Module1
     
        Sub Main()
            Dim hote As ServiceHost = New ServiceHost(GetType(ChatWCF))
            hote.Open()
            Console.WriteLine("Service Started")
            Console.ReadLine()
        End Sub
     
    End Module

    Code Client à integrer dans un form
    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
     
    Public Class frmMain
        Implements IChatWCFRappel
     
     
        Public channelFactory As DuplexChannelFactory(Of IChatWCF)
        Public chat As IChatWCF
     
     Public Sub connexionUtilisateur(ByVal userName As String) Implements IChatWCFRappel.connexionUtilisateur
     
            Debug.WriteLine(userName & " is on")
     
     
            chat.GetlisteUtilisateurs()
     
        End Sub
     
     
        Public Sub deconnexionUtilisateur(ByVal userName As String) Implements IChatWCFRappel.deconnexionUtilisateur
                  chat.GetlisteUtilisateurs()
        End Sub
     
        Public Sub ReceptionUserList(ByVal userName As String, ByVal userList As String) Implements IChatWCFRappel.ReceptionUserList
            lstActivityConnected.Items.Clear()
            For i As Integer = 0 To userList.Split(";").Count - 1
                lstActivityConnected.Items.Add(userList.Split(";")(i))
            Next
        End Sub
     
        Public Sub receptionErreur(ByVal erreur As String) Implements IChatWCFRappel.ReceptionErreur
            Debug.WriteLine(erreur)
            logFile(erreur)
        End Sub
     
        Public Sub ReceptionMessage(ByVal userName As String, ByVal message As String) Implements IChatWCFRappel.ReceptionMessage
            Debug.WriteLine(message)
     
             End Sub
     
        Private Sub ConnexionChat()
     
            'création du canal avec la configuration définie dans le fichier de config
     
            channelFactory = New DuplexChannelFactory(Of IChatWCF)(Me, "configClient")
            channelFactory.Open()   'pas utile ici
            chat = channelFactory.CreateChannel()
     
            Try
                chat.DemarrerSession(sMnemonic)
            Catch ex As Exception
                logFile(ex.Message)
            End Try
        End Sub
     
        Private Sub DeconnexionChat()
            Try
                If chat Is Nothing = False Then chat.FermerSession()
                If channelFactory Is Nothing = False Then channelFactory.Close()
                chat = Nothing
                channelFactory = Nothing
            Catch e As Exception
                logFile(e.Message)
            End Try
        End Sub
     
        Public Sub EnvoyerMessageServeur(ByVal message As String)
     
            Try
     
                ' Check cannal state
                If channelFactory.State <> CommunicationState.Faulted Then
                    chat.EnvoyerMessage(message)
                Else
                    logFile("EnvoyerMessageServeur Fault")
                    DeconnexionChat()
                End If
     
            Catch ex As Exception
     
                logFile(ex.Message)
            End Try
        End Sub

  6. #6
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 5
    Par défaut je n'ai pas vraiment compris
    salut je n'ai pas trop compris j'ai essayer mais j'avais pas mal d'erreur dans mes différents fichiers avec un peu de bidouillage j'ai tant bien que mal réussi à en corriger mais lorsque je l'éxécute rien.au secours pourrais tu ajouter les fichiers directement stp ou mieux détailler ?

    erreurs:

    chat.DemarrerSession(sMnemonic)
    lstActivityConnected
    etc ...
    je désespère à l'aide.

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

Discussions similaires

  1. Passage de la certification 70-503 .NET WCF
    Par Invité dans le forum Certifications
    Réponses: 0
    Dernier message: 02/07/2008, 07h55

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