[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 :
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
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
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...
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
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 ?
Partager