2010-09-27 98 views
0

http://msdn.microsoft.com/en-us/library/system.net.openwritecompletedeventargs.result(VS.95).aspxOpenWriteCompletedEventArgs.Result说明?

我正在使用WebClient类编写.NET应用程序(Silverlight API)。我只是想在上传文件异步后获得服务器脚本的XML风格结果。我认为OpenWriteCompletedEventArgs内部的结果流是我想看的,但是MSDN表示Result是:“获取一个用于向服务器发送数据的可写流。”..我真的不明白你怎么能写一次完成。我想知道我是否真的可以从中读取,如果我不能,我如何在上传后阅读服务器消息?

static void UploadCompleted(object sender, OpenWriteCompletedEventArgs e) 
{ 
    /* e.Result says its only a writable stream */ 
} 

回答

0

不,你不读这个。此事件的要点是让您将HTTP 请求的正文写入服务器。如果您不需要在请求中写入任何数据,则不需要此事件。如果您需要编写数据,则可以使用此事件,然后在后续事件触发时读取结果。

如果需要阅读,要做到这一点,当事件已经完成 - 例如OpenReadCompleted

+0

OpenReadCompleted将由OpenWriteAsync调用吗? – dtb 2010-09-27 18:52:27

+0

@dtb:说实话,我不清楚。该文档说,当你关闭流时,线程将阻塞,直到结果准备就绪......但这听起来有点奇怪。 – 2010-09-27 18:53:48

+0

我会进一步调查..不幸的是,我甚至在运行之前,有35,000条线中有大约5,000条线从Obj-C移植到.NET。我肯定会在这里发布我的发现 – Kyle 2010-09-27 19:00:53

0

文档可能不明确,或者您没有使用正确的方法。这里有一个例子:

client.UploadFileAsync(new Uri("http://example.com"), @"c:\work\foo.txt"); 
client.UploadFileCompleted += (sender, e) => 
{ 
    // e.Result is a byte[] containing the server response 
    // which in your case is XML 
}; 
+0

不幸的是,这不是.NET api的当前Silverlight子集。希望它是!除非WebClient以外的其他地方? – Kyle 2010-09-27 18:58:32

0

时服务器的HTTP连接已经建立,而不是当上传完成调用的OpenWriteCompleted事件。您写入流以上传数据并在完成后关闭流。

使用OpenWriteAsync时,似乎没有办法从服务器获取响应。