c# - 在 Silverlight 4 OOB 中恢复文件下载

标签 c# silverlight silverlight-4.0 out-of-browser download

我有一个 Silverlight 4 浏览器外应用程序,如果下载因任何原因中断,该应用程序需要能够恢复外部文件的下载。我希望能够恢复而不是从头开始重新启动,因为该文件会相当大,而且我们可能会让用户的连接速度较慢。

我在以下位置找到了一些代码

http://www.codeproject.com/Tips/157532/Silverlight-4-OOB-HTTP-Download-Component-with-Pau.aspx

但其中似乎有很多错误,所以我不太有信心能够让它工作。

因此,如果有人有任何其他原创建议或替代方案,我很想听听。

谢谢

最佳答案

您可能考虑的一种方法是使用 HTTP/1.1 Acccept-Ranges 响应 header 和 Range 请求 header 来管理下载。

确保您下载的资源包含 header :-

Accept-Ranges: bytes

当请求时(默认情况下,IIS 发送的静态文件将执行此操作)。

现在,使用 ClientHTTP 堆栈发出初始“HEAD”请求,以确定服务器将接受请求中的 Range: bytes= header ,并查找要发送的内容的总大小。

然后,您对包含 header 的资源发出“GET”请求:-

Range: bytes=0-65535

这将下载的内容限制为仅第一个 64K block 。然后,您可以使用以下命令重复相同的请求:-

Range: bytes=65536-131071

每次都可以将响应流的内容保存到目标文件中。您可以跟踪收到的字节数。当您确定可能未满的最终 block 时,只需使用如下 header :-

Range: bytes=131072-

这将读取到文件末尾。

如果对服务器的请求失败,您可以在此序列中的适当位置恢复。

您需要优雅地降级,如果服务器在初始“HEAD”请求中不包含 Accept-Ranges header ,那么您只需下载整个文件。

关于c# - 在 Silverlight 4 OOB 中恢复文件下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5279785/

相关文章:

c# - 如何处理在 RichTextBox 中单击超链接的事件

c# - 获取字符串 C# 中某个单词之前的一段文本

c# - NHibernate回滚似乎不起作用

c# - 动态数据 Web 应用程序给我错误?

c# - 如何在 Silverlight 5 中保存视频

c# - 如何从 Dot net 库调用 SL OOB 应用程序中的方法,反之亦然?

c# - 如何在 Silverlight 中使用 OpenXml (Office)?

c# - SelectedIndex 是空引用异常?

c# - 如何使用 FileHelpers 注释或忽略 txt 文件中的一行

silverlight - 有没有办法以编程方式取消编辑文本框?