[PREFACE]
J'ai déjà posé cette question sur le forum consacré à WCF mais il a l'air d'être assez peu fréquenté (le dernier message date du 21/6) alors je me permets de la reposer ici-même. Libre à modérateur de modérer comme il convient s'il l'estime nécessaire.
[/PREFACE]

Bonjour à tous,

Ayant décidé de m'intéresser à la communication client-serveur, j'ai découvert WCF. Pour comprendre comment ça marche, j'ai créé une petite application de chat histoire de voir. A priori, ça fonctionne pas trop mal sur le réseau local avec mon collègue ^^ (à la maison, pas moyen par contre, doit sûrement y avoir une config à mettre en place au niveau des firewalls de windaube et du modem-routeur).

Toujours dans l'idée de creuser un peu plus les possibilités offertes par WCF, je décide d'implémenter une fonction de transfert de fichier dans mon application. A priori, rien de bien compliqué sauf que, lors de l'appel de la méthode de transfert, le client se fait directement déconnecté sans aucune forme d'avertissement ou de renvoi d'erreur.

Je vous ai mis toute la solution en pièce jointe pour que ceux qui veulent puisse tester.

Le service WCF est hébergé par une application console. Le client est une application winforms.

Sur le client, à priori tout se passe bien. Le fichier est transmis au serveur via cette méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    Private Sub AvecToutLeMondeToolStripMenuItem_Click(sender As  Object, e As EventArgs) Handles AvecToutLeMondeToolStripMenuItem.Click
        Try
            Dim ofd As New OpenFileDialog
            ofd.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments
            ofd.Multiselect = False
            ofd.CheckPathExists = True
            ofd.CheckFileExists = True
            If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
                chat.SendFileToAll(My.Computer.FileSystem.ReadAllBytes(ofd.FileName), ofd.SafeFileName)
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
Et je m'attends à ce que côté serveur (service), la méthode suivante soit exécutée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
    Public Sub SendFileToAll(file() As Byte, filename As String) Implements IChatWCF.SendFileToAll
        Console.WriteLine(String.Format("{0} envoie le fichier {1}", userNickname, filename))
        Dim ftea As New FileTransferEventArgs
        ftea.File = file
        ftea.FileName = filename
        ftea.UserSource = userNickname
        ftea.UserDestination = Nothing
        Console.WriteLine("raiseevent")
        RaiseEvent FileTransferEvent(Me, ftea)
    End Sub
N.B. : Notez que j'ai tenté d'ajouter des traces sur la console pour situer le problème mais en fait, cette méthode n'est même pas exécutée...

Y a-t-il des choses à mettre en place avant de pouvoir transférer des fichiers ?

J'ai failli oublié !! Ce phénomène se produit apparemment à partir d'une certaine t'aille de fichier. J'ai fait pas mal de tests et un fichier de 63kb est envoyé sans problème mais un fichier de 68kb provoque la déconnexion. La limite se trouve quelque part entre les deux... (64 ??)

Quelqu'un aurait-il une idée ?