Salut à tous !
J'ai créer un client et un serveur wcf auquel je passe un filestream ou le serveur va écrire des données.
Seulement voila j'ai un exception qui est levée.
Voici mon contrat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 namespace IOperations { [ServiceContract()] public interface IOO { [OperationContract] void Open(FileStream destination); } }
Coté client rien de spécial:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 static void Main(string[] args) { ChannelFactory<IOO> channelFactory = new ChannelFactory<IOO>("FUCK"); IOO c = channelFactory.CreateChannel(); FileStream stream = new FileStream(@"C:\Users\Teddy\Desktop\teste.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); c.Open(stream); }
Au niveau du serveur voici ma fonction:
Et ma fonction CopyStreamToStream():
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 public void Open(FileStream destination) { FileStream stream = new FileStream(@"F:\Visual Studio 2008\NDependProject.xml", FileMode.Open, FileAccess.Read, FileShare.Read); _f.CopyStreamToStream(stream, destination, (s, d, e) => { try { s.Close(); d.Close(); } catch { Console.WriteLine("Booouuuu le bug"); } Console.WriteLine(">>> " + e); }); }
L'exception qui est levé est:
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 public static void CopyStreamToStream(FileStream source, FileStream destination, Action<FileStream, FileStream, Exception> completed) { destination.Write(new byte[] { 0x01 }, 0, 1); byte[] buffer = new byte[0x1024]; System.ComponentModel.AsyncOperation asyncOp = System.ComponentModel.AsyncOperationManager.CreateOperation(null); Action<Exception> done = e => { if (completed != null) asyncOp.Post(delegate { completed(source, destination, e); }, null); }; AsyncCallback rc = null; rc = readResult => { try { int read = source.EndRead(readResult); if (read > 0) { destination.BeginWrite(buffer, 0, read, writeResult => { try { destination.EndWrite(writeResult); source.BeginRead( buffer, 0, buffer.Length, rc, null); } catch (Exception exc) { done(exc); } }, null); } else done(null); } catch (Exception exc) { done(exc); } }; source.BeginRead(buffer, 0, buffer.Length, rc, null); }
http://www.flickr.com/photos/2363493...13687/sizes/l/
La ligne incriminée est:
Le message d'erreur indique ligne 22 dans le client mais il n'en est rien en fait.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 destination.BeginWrite(buffer, 0, read, writeResult =>
Je n'arrive vraiment pas à comprend pourquoi sa plante.
Merci de votre aide.
Partager