Asp.net MVC 网站,在 Azure 上使用 ClickOnce 应用程序
本文关键字:ClickOnce 应用程序 Azure net MVC 网站 Asp | 更新日期: 2023-09-27 18:36:37
我有一个部署到 Azure 云服务的 Asp.net MVC 网站。在那里,我需要一个~/ClickOnce应用程序,客户可以从中下载应用程序。应用程序会不断更新,因此我无法将它们部署为 Azure 部署包的一部分,但这实际上应该是我可以自行更新的文件夹。
据我了解,每次重新启动 Web 角色时都会清理该文件夹。我需要更多可以手动更新(甚至通过远程桌面)的持久本地存储,并且应该可以从网站(http://mywebsite.cloudapp.net/ClickOnce/..)获得。
有没有办法将本地存储文件夹映射到网站路径?
您可以创建一个为文件提供服务的控制器:
routes.MapRoute(
null,
"ClickOnce/{*fileName}",
new { controller = "File", action = "GetFile", fileName = UrlParameter.Optional },
new[] { "MyApp.Web.Controllers" }
);
// in FileController
public FilePathResult GetFile(string fileName)
{
var dir = Server.MapPath("/local/storage/directory");
var path = Path.Combine(dir, fileName);
return File(path, GetMimeType(Path.GetExtension(fileName));
}
// see http://msdn.microsoft.com/en-us/library/ms228998.aspx
private string GetMimeType(string extension)
{
if (extension == ".application" || extension == ".manifest")
return "application/x-ms-application";
else if (extension == ".deploy")
return "application/octet-stream";
else
return "application/x-msdownload";
}
如果您考虑一下,这有很大的优势:
ClickOnce 更新位置已烘焙到客户端中,因此无法更改。
但是通过这个简单的设置,您可以为不同的客户端返回不同的版本。因此,也许您想将新版本分配给某些客户端以在野外进行测试。或者,客户只能更新到特定版本,除非他购买了更新。
为此,您必须为每个版本保留每个.application
文件,并返回适当的文件。
customer1 request yourapp.application -> return yourapp-1.1.application
customer2 request yourapp.application -> return yourapp-1.2.application
从技术上讲,可以通过使用远程桌面连接连接到应用程序实例来手动更新文件夹,但由于 Azure 云服务的无状态性质,因此严格不建议这样做。
更好的解决方案是 host your ClickOnce deployment files in blob storage
.这样,您可以独立于应用程序更新来更新它们。有关更多详细信息,请查看此博客文章:https://robindotnet.wordpress.com/2011/02/13/how-to-host-a-clickonce-deployment-in-azure-blob-storage/。