扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:佚名 来源:yesky 2007年11月4日
关键字:
要提高应用程序的总体响应速度,可以利用后台线程。已更新的应用程序首先调用辅助线程来实例化一个 XML Web Service 对象。Web 服务实例化后,我们将使用 MethodInoker() 来安全地更新 UI。
从 Form Load 事件中的辅助线程开始:
' 使用后台辅助线程生成 Web 服务调用,
' 以提高第一次窗体加载过程中应用程序
' 的总体响应速度。
ThreadPool.QueueUserWorkItem(New WaitCallback (AddressOf GetTasksWebServiceBackground)) 有关如何在后台线程中更新 Windows 窗体的详细信息,请访问知识库文章 Q318604“Populate DataGrid on Background Thread with Data Binding by Using Visual Basic .NET”,网址为 http://support.microsoft.com/default.aspx?scid=kb;en-us;Q318604。 |
在 Windows 窗体运行的同时,编写一个作用于 XML Web Service 调用的后台线程。
Private Sub GetTasksWebServiceBackground(ByVal data As Object)
|
为了说明如何将应用程序部署到 Web 服务器上,我们将任务管理应用程序部署到 Tasks Web Service Web 文件夹中。首先将生成文件夹更改为 TaskMgmtWS Web Service IIS 虚拟目录。方法是打开“TaskManagement Property Pages”(TaskManagement 属性页)对话框,然后将输出路径设置为“..\TaskMgmtWS\”。
将生成结果路径设置为 Web 服务器后,可以通过简单的重新编译来部署此应用程序。应用程序生成后,我们可打开 Internet Explorer 并浏览到应用程序 http://localhost/TaskMgmtWS/TaskManagement.exe。请注意,安装了 .NET Framework 的 Internet Explorer 不会要求您保存该应用程序,而是尝试运行该程序。如果要从 Web 页下载应用程序,可以使用“file://”协议处理程序。
应用程序现已通过 HTTP 下载并安装到程序集下载缓存中。运行该应用程序之前,将检查安全策略以确保应用程序拥有执行其操作的权限。
上面介绍了如何通过 Web 服务器运行该应用程序,下面就让我们更改该应用程序,看看对它进行升级有多么容易。选择 DataGrid,可以使用 Auto Format(自动套用格式)属性快速更改背景样式。
然后重新生成应用程序,以更新 Web 服务器上的 .exe 文件。最妙的是当用户请求返回到 Windows 窗体时,应用程序代码将自动更新。.NET Framework 将自动检查程序集的时间戳,查看是需要再次下载该程序集,还是只需通过用户的程序集下载缓存来运行该程序集。
安全性
代码访问安全性是保护桌面免受正在通过无接触部署方式下载的 Windows 窗体应用程序影响的关键。此模型通过匹配应用程序和应该分配给应用程序的权限来工作。在运行时,公共语言运行时从程序集中收集凭证。凭证可以采用代码源自的 Internet Explorer 区域(本地磁盘、Intranet、Internet、受信任站点或不受信任站点)的形式,也可采用代码源自的 URL(签名使用的私钥、哈希值、Authenticode 发布服务器签名等等)的形式。使用此凭证,公共语言运行时将程序集分配给相应的代码组或类别。每个代码组都拥有分配给它的权限集,说明程序集应获得的权限,例如能否读取或写入本地磁盘、访问联网资源、打印以及访问环境变量等等。
默认情况下,.NET Framework 附带围绕 Internet Explorer 区域设置的代码组。例如,来自 Intranet 区域的代码获得的权限很有限,因此无法执行文件 IO 访问。
为了说明安全检查在起作用,任务管理可执行程序包含一个名为 Read Boot.ini 的工具栏按钮,该按钮尝试访问 C:\ 盘中的文件。
您可以进行一个简单的测试,单击“Read Boot.ini”按钮,查看当应用程序请求 C:\ 根目录中的文件时会发生什么情况 - 引发安全异常,应用程序不处理该请求。
异常返回一个文件 IO 权限异常,说明应用程序无法访问 TaskManagement.exe 请求的特定资源。
使用多程序集应用程序的无接触部署
在本示例应用程序中,我们已经说明了如何加载单个程序集。通过对 Assemble 对象使用 LoadFrom() 方法,.NET Framework 还可以有效地将多程序集应用程序传入客户端。
Assemble 类具有 LoadFrom 方法,可以初始化一个对特定程序集的引用。LoadFrom 的参数是 URL 或文件路径名。指定 URL 后,.NET Framework 首先通过检查程序集下载缓存,检查客户端是否存在已命名的程序集。如果程序集不在程序集下载缓存中,.NET Framework 将从 Web 服务器获取该程序集,并将它的副本置于下载缓存中。这样,程序集对象即可在代码中使用。
例如,如果在一个单独的名为 AboutForm.dll 的程序集中实现了 TaskManagement About Windows 窗体,则可以在用户请求查看“About”(关于)对话框时使用 LoadFrom 下载该程序集。这样,当用户与应用程序交互时,我们只需传输应用程序所需的代码。
无接触部署和 XML Web Service
一个重要的安全限制是,当通过 Web 服务器分发应用程序时,其域必须与它所依赖的所有 Web 服务相匹配。例如,如果从 http://myserver/TaskManagement.exe 启动 TaskManagement.exe,则只允许使用 http://myserver 上的 XML Web Service。出于安全性方面的考虑,不允许应用程序从其他服务器调用 Web 服务。
可选:如何设置安全策略
计算机管理员可以更改安全权限,以便将更多权限授予现有代码组或从头开始创建新代码组。
继续操作之前,必须明白更改安全设置是很危险的,因此切勿将其关闭。强烈建议,在任何情况下都只更改能使应用程序运行的安全设置。
为此,如果您是计算机管理员,则可以运行 CasPol 命令行工具(位于 %SystemRoot%\Microsoft.NET\Framework\v1.0.3705\CasPol.exe),为从本地主机启动的应用程序授予对本地磁盘的完全访问权限:
caspol -machine -addgroup All_Code -url http://localhost/* FullTrust -n TaskManagement |
现在,由于此应用程序具有执行文件 IO 的权限,因此能够返回 Boot.ini 的内容。
除了 CasPol 命令行工具以外,还通过 Microsoft 管理控制台 (MMC) 管理单元提供了图形配置工具,即 .NET Framework 配置工具。打开管理单元后,打开“My Computer”(我的电脑),单击“Runtime Security Policy”(运行时安全策略),然后依次单击“Machine”(计算机)、“Code Groups”(代码组)和“All_Code”(所有代码),浏览到 TaskManagement。使用 TaskManagement 可以查看新建的代码组。尝试设置新代码组,了解由代码访问安全设置所带来的灵活性和把握度。
确保查看各选项后删除在上文中创建的代码组。可以通过运行以下命令完成此操作:
caspol -remgroup TaskManagement
也可通过 MMC 工具在 TaskManagement 上单击右键并选择 Delete(删除)来删除新代码组,该工具使您能够轻松地在代码组之外生成 MSI 文件,如果需要,可以使用系统管理服务器或组策略在企业中传播该文件。
客户端要求
任何支持 .NET Framework 的操作系统
已安装 SP1 的 .NET Framework
Internet Explorer 5.0.1 或更高版本
访问 IIS Web 服务器进行应用程序部署
小结
无接触部署为分发 Window 窗体应用程序提供了非常好的方法。应用程序开发人员可以利用这一强大的桌面处理能力,同时保持由 Web 应用程序实现的部署和维护的优点。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者