我有一个 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/