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:

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);
            });
        }
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
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);
        }
L'exception qui est levé est:
http://www.flickr.com/photos/2363493...13687/sizes/l/


La ligne incriminée est:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
 
destination.BeginWrite(buffer, 0, read, writeResult =>
Le message d'erreur indique ligne 22 dans le client mais il n'en est rien en fait.

Je n'arrive vraiment pas à comprend pourquoi sa plante.

Merci de votre aide.