2011-03-12 37 views
2

我有一個瀏覽器外的Silverlight 4應用程序,如果下載因任何原因而中斷,它需要能夠恢復下載外部文件。我希望能夠恢復,而不是從一開始就重啓,因爲該文件相當大,並且我們有可能讓用戶使用較慢的連接。繼續在Silverlight 4中下載文件OOB

我發現一些代碼,

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

,但似乎有中有許多錯誤,所以我不完全相信,我就可以得到它的工作。

因此,如果任何人有任何其他原創建議或替代方案,我想聽聽他們。

感謝,

回答

4

一種方法,你可以考慮使用HTTP/1.1 Acccept-Ranges響應報頭和Range請求頭管理下載。

確保您下載將包括頭標的資源: -

接受-範圍:字節

在請求時(由IIS發送一個靜態的文件會默認爲此)。

現在使用ClientHTTP堆棧,您會發出一個初始「HEAD」請求,以確定服務器將接受請求中的Range: bytes=標頭並查找要發送的內容的總大小。

你那麼做的資源,包括標頭中的「GET」要求: -

範圍:字節= 65535

這限制了下載的內容,只是第一個64K塊。然後你可以重複同樣的要求: -

範圍:字節= 65536-131071

每次可以響應流中的內容保存到您的目標文件。你跟蹤你收到了多少字節。當您確定最終塊這很可能小於完全只使用一個頭,如: -

範圍:字節= 131072-

將讀取到文件末尾。

如果對服務器的請求失敗,可以在此順序的適當位置繼續。

如果服務器在最初的「HEAD」請求中沒有包含Accept-Ranges標頭,則需要優雅地降級,然後您只需下載整個文件。