WCF : Transférer un fichier
[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:
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:
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 ?