使用ClickOnce发布应用程序
需求
客户机与服务器之间的带宽小,在这样的环境下提高客户端下载安装文件的速度。
解决
ClickOnce本身支持“部分更新”的功能
ClickOnce在更新时会自动检测“manifeset”文件中各下载文件的指纹,只有指纹不一样的才会重新从服务器下载。
实现压缩下载
配置IIS压缩支持的文件类型
在“C:\Inetpub\AdminScripts”目录下建批处理文件“配置IIS压缩支持的文件类型.bat”并运行。以下为批处理文件内容:
[plain]
cd C:\Inetpub\AdminScripts
@echo 启动对静态压缩与动态压缩的支持
cscript adsutil.vbs set w3svc/filters/compression/parameters/HcDoDynamicCompression true
cscript adsutil.vbs set w3svc/filters/compression/parameters/HcDoStaticCompression true
@echo 配置压缩支持的静态文件类型
cscript.exe adsutil.vbs set w3svc/Filters/Compression/GZIP/HcFileExtensions "htm" "html" "txt" "application" "manifest" "deploy" "exe" "dll"
cscript.exe adsutil.vbs set w3svc/Filters/Compression/DEFLATE/HcFileExtensions "htm" "html" "txt" "application" "manifest" "deploy" "exe" "dll"
@echo 重启IIS
IISRESET.EXE
打开IIS的压缩支持选项
打开“Internet 信息服务(IIS)管理器”。
展开“本地计算机”节点,右击“网站”节点选择属性打开属性对话框。
切换至“服务”选项卡,配置“HTTP压缩”区域。
勾选“压缩应用程序文件”与“压缩静态文件”
确保计算机用户“IIS_WPG”对此处指定的临时目录具有“读写”权限
测试
访问后观察指定的临时目录(默认为“C:\WINDOWS\IIS Temporary Compressed Files”)中有没有对应的压缩文件生成
只有静态文件(html、txt等)才会在此处留下痕迹,动态文件(asp、dll等)不会
使用fiddler手动构建HTTP请求,观察RESPONSE的头部信息中是否包含“Content-Encoding: gzip”
[plain]
GET /clientes/ventas/Ventas_1_0_0_8/Ventas.exe.deploy HTTP/1.1
Accept: */*
Accept-Language: es-ar
Accept-Encoding: gzip, deflate
Host: youhost.yourdomain.com
Connection: Keep-Alive
意外
“配置压缩支持的文件类型”这一步骤执行后未得到预计的效果。“deploy”与“application”等文件类型依旧未能得到压缩支持。
于是打开文件“C:\WINDOWS\system32\inetsrv\MetaBase.xml”,查找“HcFileExtensions”,看到这两行命令确实没起到效果。
难道只能取消ClickOnce中的“使用'deploy'扩展名”发布选项?NO,看我使大招:
运行net stop iisadmin /y
打开文件“C:\WINDOWS\system32\inetsrv\MetaBase.xml”,查找“HcFileExtensions”,手动将这些文件类型加入并保存。
运行iisreset
备注
发现第一次访问时压缩依旧未启用,第二次访问时才开始启用压缩。
参考
How ClickOnce Performs Application Updates
Using HTTP Compression for Faster Downloads (IIS 6.0)
HOW TO Enable ClickOnce Compression on IIS
Enabling HTTP Compression (IIS 6.0)
作者:iaki2008
上一篇: python基础编程素数的统计输出
下一篇: python语法使用的小技巧
推荐阅读
-
使用Vue-cli3.0创建的项目,如何发布npm包
-
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
-
苹果明年初要发布支持5G网络版iPad Pro:使用mini-LED背光LCD
-
android开发教程之获取使用当前api的应用程序名称
-
使用Python的Flask框架构建大型Web应用程序的结构示例
-
使用Python的Flask框架来搭建第一个Web应用程序
-
使用python搭建Django应用程序步骤及版本冲突问题解决
-
JavaScript实现与使用发布/订阅模式详解
-
IIS 6.0 应用程序池回收和工作进程使用介绍
-
使用Zookeeper分布式部署PHP应用程序