我有一個ASP .NET負載平衡的應用程序(web服務和網站)。它在SQL服務器上運行。我需要能夠提供大型文件下載。但是,由於負載平衡的情況,文件存儲在SQL數據庫中,而不是文件系統。 BITS似乎是最好的方法。我完全控制了客戶端。但是,我不知道如何配置BITS從數據庫中讀取文件。我知道如何編寫C#代碼,但我不知道如何讓BITS鉤入它,而不是從文件系統中讀取文件。如何配置或擴展BITS(後臺智能傳輸服務)從Sql Server數據庫讀取文件
任何想法?
我有一個ASP .NET負載平衡的應用程序(web服務和網站)。它在SQL服務器上運行。我需要能夠提供大型文件下載。但是,由於負載平衡的情況,文件存儲在SQL數據庫中,而不是文件系統。 BITS似乎是最好的方法。我完全控制了客戶端。但是,我不知道如何配置BITS從數據庫中讀取文件。我知道如何編寫C#代碼,但我不知道如何讓BITS鉤入它,而不是從文件系統中讀取文件。如何配置或擴展BITS(後臺智能傳輸服務)從Sql Server數據庫讀取文件
任何想法?
您可以通過實現System.Web.IHttpHandler來創建自定義http處理程序。 ProcessRequest(HttpContext上下文)方法是您將從數據庫編寫文件檢索代碼的地方。由於BITS使用範圍請求進行操作,因此您需要解析context.Request.Headers [「Range」]的值以獲取請求的開始和結束字節。在ProcessRequest中,您可以使用SqlCommand.ExecuteReader(CommandBehavior.SequentialAccess)方法從數據庫中讀取二進制文件,並將結果二進制文件設置爲context.Response.OutputStream。請記得在最後調用context.Response.Flush()。
自定義HttpHandler將提供特定的文件擴展名(例如'.file')。這是需要的東西在IIS做:
兩個IIS版本
IIS 6.0
將.file(application/x-zip-compressed)擴展添加爲網站的MIME類型。
添加應用程序擴展(網站屬性虛擬目錄配置映射)
擴展:.file 可執行文件路徑(S)中:%windir%\ microsoft.net \框架\ V2.0.50727 \ ASPNET_ISAPI.DLL %WINDIR%\ Microsoft.NET \ Framework64 \ V2.0.50727 \ ASPNET_ISAPI.DLL
IIS 7.0
添加到部分在幅材。配置:
<mimeMap fileExtension=".file" mimeType="application/x-zip-compressed" />
希望這是足以讓你開始。
看看2008年的圖書在線OpenSqlFilestream。該API有可能對您有幫助的示例。
這裏只是一個想法,但你有沒有考慮過在S3中存儲內容並提供Bittorent下載?在Amazon S3中使用BitTorrent http://docs.amazonwebservices.com/AmazonS3/latest/index.html?S3Torrent.html – 2010-05-28 20:09:09
什麼版本的SQL Server? 2008引入了FILESTREAM,它實際上將文件保留在文件系統上並允許您直接訪問它們 – NotMe 2011-03-15 22:46:27
爲什麼不將文件放入DFS樹中? – 2011-10-18 19:32:38