0

我在 ASP.net Web 应用程序中使用 ClockOnce 发布 Windows 窗体应用程序。我知道当用户单击发布按钮时,将下载 clickonce 应用程序。此选项不安全,因为知道下载 URL 的任何人都可以下载。添加身份验证我正在使用 httphandler 根据 codeproject 的 David P Henry 建议一切正常。我想为这种方法添加更多安全性,而不是将 clickOnce 应用程序文件放在 Web 应用程序的 Application Files 文件夹中,我想将这些文件放在 SQL Server 中。所以我的应用程序应该能够从 SQL Server 下载这些文件并将其发送给用户。

在Clockonce有可能吗?

如果可能的话,我想知道这种方法。

4

1 回答 1

0

对的,这是可能的。使用 VirtualPathProvider 从 SQL 而不是文件系统读取文件。

当 ClickOnce 通过 http/https 请求文件时,可以拦截每个请求并传递您自己的版本(在这种情况下,从 SQL 读取而不是从服务器的文件系统读取)。

下面链接的是一个简单的项目,展示了如何使用自定义 VirtualPathProvider。

http://www.codeproject.com/Articles/16848/Creating-Custom-Virtual-Path-Provider-in-ASP-Net-2

我建议将应存储文件的目录转换为应用程序,并将 Global.asax 添加到应用程序的根目录。

然后为根目录添加 *.deploy 和 *.manifest 的处理程序映射,以便您的 VirtualPathProvider 将在请求每个文件时运行。

在覆盖的 FileExists 方法中(在您的 VirtualPathProvider 中)编写一些逻辑以返回文件是否存在。您可以在此处放置一些授权,但我不知道 ClickOnce 是否缓存 Http 响应,因为如果此函数返回 false,服务器将返回 404。

在 VirtualFile 中的 Stream Open() 中,返回从 SQL 服务器读取的 MemoryStream。

希望这可以帮助。

于 2012-09-17T10:39:41.023 回答