1

我有一个 ASP .NET 负载平衡应用程序(Web 服务和网站)。它在 SQL 服务器上运行。我需要能够提供大文件以供下载。但是,由于负载平衡情况,文件存储在 SQL 数据库中,而不是文件系统中。BITS 似乎是最好的方法。我可以完全控制客户端。但是,我不知道如何配置 BITS 从数据库中读取文件。我知道如何为此编写 C# 代码,但我不知道如何让 BITS 挂钩,而不是从文件系统中读取文件。

有任何想法吗?

4

2 回答 2

2

您可以通过实现 System.Web.IHttpHandler 创建自定义 http 处理程序。ProcessRequest(HttpContext context) 方法是您从数据库中编写文件检索代码的地方。由于 BITS 处理范围请求,因此您需要解析 context.Request.Headers["Range"] 的值以获取请求的开始和结束字节。在 ProcessRequest 中,您可以使用 SqlCommand.ExecuteReader(CommandBehavior.SequentialAccess) 方法从数据库中读取二进制文件,并将生成的二进制文件设置在 context.Response.OutputStream 中。记得最后调用 context.Response.Flush() 。

自定义 HttpHandler 将提供特定的文件扩展名(例如“.file”)。这是在 IIS 中需要做的:

两个 IIS 版本

  1. 添加到 web.config 中的部分:

IIS 6.0

  1. 添加 .file (application/x-zip-compressed) 扩展名作为网站的 MIME 类型。

  2. 添加应用程序扩展(网站属性  虚拟目录  配置  映射)

扩展名:.file 可执行路径:%windir%\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll %windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll

IIS 7.0

  1. 添加到 web.config 中的部分:

  1. 添加到 web.config 中的部分:

        <mimeMap fileExtension=".file" mimeType="application/x-zip-compressed" />
    

希望这足以让你开始。

于 2010-08-27T17:50:11.793 回答
0

看看 2008 年在线图书OpenSqlFilestream。该 API 包含可以帮助您的示例。

于 2010-06-03T16:20:45.530 回答