I am writing a byte[] buffer to a WebClient using UploadData. I have
attempted a similar scheme using WebRequest and the results are the
same. The file is written in 100k chunks, each 100k segment representing
a discrete HTTP request. The server is supposed to respond with an error
code or an md5 hash of the chunk.

On Mac OS X and Windows using Mono 2.6.4, this works as expected. On
Windows using Microsoft .NET, it also works as expected. However, on
Linux using Mono 2.6.4 (tested Debian sid and openSUSE 11.2), the
UploadData call hangs for a long time before an IOException is thrown
("Write timed out") When using WebRequest it would hang on GetResponse.

The code is like this:

public void Go() {

        const int upload_chunk_size = (100*1024); // 100kb
        Uri u = // url goes here
                                                
        FileStream s = new FileStream(this.filename, FileMode.Open, 
                FileAccess.Read);
        BinaryReader b = new BinaryReader(s);
                        
        WebClient w = new WebClient();
        Console.WriteLine("Writing data to WebClient");
        byte[] buf = b.ReadBytes(upload_chunk_size);

        byte[] response = w.UploadData(u, "POST", buf); // HANGS HERE

        this.position += upload_chunk_size;
        Console.WriteLine("Encoding response");
        string md5 = System.Text.Encoding.UTF8.GetString(response);
        md5_list.Add(md5);              
                
        if(this.position < this.fileLength)
                Go();
        else
                UploadDoneEvent(true);
}

Note that the server error case isn't (yet) handled, but it's irrelevant
to the problem at hand.

If I break on UploadData, I can see that the buffer is populated.

On Windows and OS X, it works as expected, POST-ing 100k chunks until
the server returns a failure code (which, again, I haven't implemented
handling) or the upload finishes. On Windows both the Mono and Microsoft
runtimes behave as expected.

Any clues, or should I file a bug? Thanks.

Andrew Barr


_______________________________________________
Mono-list maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to