智能客户端研究笔记(三)

本文大量引用了别人的文章,引用自http://www.microsoft.com/china/community/program/originalarticles/TechDoc/smartclient.mspx


发布程序

    1、在发布和更新服务器上设置一个虚拟目录(如:SmartClient)将应用组件的所有文件放置在相应的目录下。
    虚拟目录的设置属性中必须包括:读取和目录浏览权限,执行许可为纯脚本。
    对于本地运行方式,需要根据客户端应用程序的版本号设置多个目录,每个目录存放不同版本的所有文件。(也可以在新版本目录下只存放更新了的文件,但需要修改更新组件。当用户更新版本时,必须下载大于当前版本的所有新版本目录下的文件,以防止某些情况下会出现某个版本的文件被遗漏的问题)。
    在本地运行方式中,还需要在根目录下维护一个更新版本清单文件,因为它允许用户以老版本客户端应用程序登录。

    2、发布一个Web Service。该Web服务主要完成以下任务:
  • 执行客户端用户的身份验证
  • 从整个应用系统的安全模块中获取该用户允许执行的应用组件的清单,包含应用组件的位置、文件名称和应用组件本身所需的配置信息。(在本地运行方式下,该清单还和版本有关)
  • 从数据库中获取该用户的个性化配置信息,和上一步获取的信息合并为一个XML文件流。
  • 将该配置文件流作为返回参数返回给客户端应用程序。  

    3、将客户端应用程序放置在虚拟根目录下作为应用组件程序集的加载器,同时在企业内部网站上增加一个指向客户端应用程序的链接。对于网络运行方式,还将提供一个安全策略部署包(MSI)文件的链接。
    用户第一次运行时的执行步骤
    网络运行方式:

  • 下载并安装安全策略部署包
  • 通过点击客户端应用程序的链接,下载并执行客户端应用程序
  • 将该链接添加到收藏夹中或建立桌面快捷方式,以便于运行  

    本地运行方式:

  • 不直接点击客户端应用程序的链接,将此链接另存到用户选择的目录下
  • 在资源管理器中执行客户端应用程序
  • 在桌面上建立可执行文件的快捷方式,以便于运行  

 更新程序
         网络运行方式的更新步骤较为简单,只须将更新了的文件直接覆盖老文件即可。其缺点是某些程序集附带的引用文件不能自动下载新版本,只有清空客户端的IE缓存后才能实现更新。

    本地运行方式的更新步骤如下:

  • 在服务器虚拟根目录下新建一个以新版本号命名的目录,增量更新只需将更新了的文件复制到该目录下,否则需要将所有文件都复制到目录。
  • 修改保存所有版本清单的文件,并指明当前活动的最新版本号,用于和客户端进行版本比较。  

    六、扩展应用组件
    为了实现企业应用系统的可扩展性,通过接口定义,可以使应用开发商通过实现这些接口将自己的应用组件方便的添加到客户端应用程序中。以下介绍一些接口中主要包含的方法和属性。

  1. 应用组件名称属性:用于标明该应用组件功能的注释性文本。
  2. 应用组件在客户端应用程序上的各个界面元素属性:指客户端应用程序上的工具栏、菜单栏、下拉菜单项和列表框等用于标志该应用组件的控件上,需要应用组件提供的文本、图片、图标、菜单、事件处理方法等。
  3. 初始化方法:在客户端应用程序加载应用组件时,首先执行的方法。在加载应用组件时,对于由服务器传来的配置文件中包含的各个应用组件自身的配置信息,客户端应用程序并不解析,而是将该配置信息在初始化应用组件时作为参数传递给应用组件,增加了灵活性。
  4. 获取应用组件加载器方法:获取应用组件加载器后,可以通过其中包含的公共方法获取一些应用所需的共享数据。
  5. 获取应用组件启动控件的方法:启动控件可以是窗体或用户控件。
  6. 关闭应用组件的方法(可选):当客户端应用程序被关闭时,执行该方法。应用组件本身根据自身情况决定是否可以立即关闭,同时立即释放组件所占用的系统资源。

    对于MDI应用程序,可以在启动窗体的关闭事件中处理而不需要该方法。

       客户端应用程序内的应用组件加载器可以通过枚举组件程序集内的类型来判断该组件是否符合借口定义。同时可以将多个应用组件打包在一个应用程序集中。此过程非常耗时。
示例:
//根据程序集文件名称,加载程序集
Assembly asm = Assembly.LoadFrom(assemblyFile);
Type[] types = asm.GetTypes();

//搜索程序集中的所有类型
foreach (Type t in types)
{
    //指示类型是否由引用封送,支持远程处理
   
if (!t.IsMarshalByRef)
    continue;
    //判断该程序集的类型是否有符合应用组件接口的类型
   
if (Array.IndexOf(t.GetInterfaces(), pluginType) > 0)
    {
        ...
    }
}

参考资源链接
1、Security and Versioning Models in the Windows Forms Engine Help You Create and Deploy Smart Clients
http://msdn.microsoft.com/msdnmag/issues/02/07/NetSmartClients/default.aspx

2、Smart Client Application Model and the .NET Framework
http://msdn.microsoft.com/netframework/techinfo/articles/smartclient/default.asp

3、State Sanity Using Smart Clients
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnforms/html/Winforms05202002.asp

4、Increasing Permissions for Web-Deployed Windows Forms Applications
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnforms/html/winforms11122002.asp

5、.NET Application Updater Component
http://www.gotdotnet.com/team/windowsforms

这一节,没啥可说的

转载于:https://www.cnblogs.com/William_Fire/articles/47578.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477053.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3月14日 我用Python几十行代码为女朋友画了一个爱心

今天是个特殊的日子,圆周率日,哈哈!来对你爱的人表达爱吧! 女朋友就是我爱人啦!😁 # -*- coding:utf-8 -*- # Python Version: 3.7 # Time: 2020/3/14 13:14 # Author: Michael Ming # Website: https://m…

Pytorch显存分配机制与显存占用分析方法

文 | Connolly知乎(已授权)源 | 极市平台作者最近两年在研究分布式并行,经常使用PyTorch框架。一开始用的时候对于PyTorch的显存机制也是一知半解,连蒙带猜的,经常来知乎上来找答案,那么我就吸收大家的看法…

Spring Cloud Stream 使用延迟消息实现定时任务(RabbitMQ)

应用场景 我们在使用一些开源调度系统(比如:elastic-job等)的时候,对于任务的执行时间通常都是有规律性的,可能是每隔半小时执行一次,或者每天凌晨一点执行一次。然而实际业务中还存在另外一种定时任务&am…

LeetCode 1380. 矩阵中的幸运数(set)

1. 题目 给你一个 m * n 的矩阵,矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。 幸运数是指矩阵中满足同时下列两个条件的元素: 在同一行的所有元素中最小在同一列的所有元素中最大 示例 1: 输入:matrix …

GARFIELD@10-07-2004

tit for tat转载于:https://www.cnblogs.com/rexhost/archive/2004/10/07/49560.html

DeepMind 发了篇论文,把我看笑了

文 | severus近日,曾开发出举世瞩目的 AlphaGo 的 DeepMind,在 ArXiv 上发表了一篇文章,名为:Meaning without reference in large language models文中提到,大参数规模的语言模型是已经具备了部分类人智能的&#xff…

Spring Cloud Stream消费失败后的处理策略(三):使用DLQ队列(RabbitMQ)

应用场景 前两天我们已经介绍了两种Spring Cloud Stream对消息失败的处理策略: 自动重试:对于一些因环境原因(如:网络抖动等不稳定因素)引发的问题可以起到比较好的作用,提高消息处理的成功率。自定义错误…

LeetCode 1382. 将二叉搜索树变平衡(中序遍历+二分递归)

1. 题目 给你一棵二叉搜索树,请你返回一棵 平衡后 的二叉搜索树,新生成的树应该与原来的树有着相同的节点值。 如果一棵二叉搜索树中,每个节点的两棵子树高度差不超过 1 ,我们就称这棵二叉搜索树是 平衡的 。 如果有多种构造方…

电影:『新警察故事』

【电影名称】:『新警察故事』 【主 演】: 成龙 谢霆锋 杨采妮 蔡卓妍 吴彦祖  【导 演】: 陈木胜 【内容简介】:《新警察故事》是成龙英皇电影公司的处女作,投资超过1亿6000万港元,请来香港顶尖电影…

NLP顶级赛事LIC2022霸榜经验分享!

语言是人类传递信息最重要的媒介,让机器理解语言并进行交互是人工智能的重要挑战。为推动语言与智能领域的技术发展和应用,中国中文信息学会、中国计算机学会和百度公司连续五年联合举办“语言与智能技术竞赛”,为中文NLP研究者和开发者提供同…

Spring Cloud Zuul中使用Swagger汇总API接口文档

有很多读者问过这样的一个问题:虽然使用Swagger可以为Spring MVC编写的接口生成了API文档,但是在微服务化之后,这些API文档都离散在各个微服务中,是否有办法将这些接口都整合到一个文档中?之前给大家的回复都只是简单的…

LeetCode 1381. 设计一个支持增量操作的栈(deque/数组)

1. 题目 请你设计一个支持下述操作的栈。 实现自定义栈类 CustomStack : CustomStack(int maxSize):用 maxSize 初始化对象,maxSize 是栈中最多能容纳的元素数量,栈在增长到 maxSize 之后则不支持 push 操作。void push(int x)…

GARFIELD@10-31-2004

apprentice转载于:https://www.cnblogs.com/rexhost/archive/2004/10/31/59013.html

Spring Cloud构建微服务架构:分布式服务跟踪(入门)【Dalston版】

通过之前的N篇博文介绍,实际上我们已经能够通过使用它们搭建起一个基础的微服务架构系统来实现我们的业务需求了。但是,随着业务的发展,我们的系统规模也会变得越来越大,各微服务间的调用关系也变得越来越错综复杂。通常一个由客户…

有哪些值得计算机专业学生加入的国企?

文 |重庆搬砖喵知乎知乎上最近有个问题很火:有哪些值得计算机专业学生加入的国企?这个问题确实很应今年秋招的景,于是转载了知乎答主重庆搬砖喵 的高赞回答分享给大家。原回答链接:https://www.zhihu.com/question/285730093/answ…

上海著名综合性商厦一览 (1)

上海著名综合性商厦一览 jxjb 2004-10-29 11:53:21 发表于搜狐焦点上海房地产网-谈房论市-东方康洛论坛 主要包括:第一百货东楼 华联商厦 置地广场 友谊欧洲商城 东方商厦 港汇广场 汇金百货 梅龙镇广场 中环广场二百永新 正大广场 上海第一八佰伴友谊南方商城…

LeetCode 1383. 最大的团队表现值(贪心,优先队列,难)

1. 题目 公司有编号为 1 到 n 的 n 个工程师,给你两个数组 speed 和 efficiency ,其中 speed[i] 和 efficiency[i] 分别代表第 i 位工程师的速度和效率。 请你返回由最多 k 个工程师组成的 ​​​​​​最大团队表现值 ,由于答案可能很大&am…

程序员坐牢了,会被安排去写代码吗?

文 | 无念源 | 知乎今天给大家分享一篇有意思的爽文,但也是根据多年之前一个真实报道改编而来的。本文字数较多,建议先收藏,上下班路上、带薪上厕所、浑水摸鱼时再慢慢看~本故事纯属虚构请大家不要随意模仿,后果自负!因…

Dubbo将积极适配Spring Cloud生态,Spring Cloud体系或将成为微服务的不二选择!

2016年,我在博客中发表过一篇《微服务架构的基础框架选择:Spring Cloud还是Dubbo?》获得了很大的阅读量和转载量。在这篇文章中,我主要对比了Spring Cloud与Dubbo所具备的能力,并阐述了个人推崇Spring Cloud的原因。但…

Java sdk及tomcat安装设置

在安装好Java SDK后,还需要设置一些系统变量,系统变量的设置可以在系统属性-高级-环境变量中进行 JAVA_HOMEJAVA安装目录 CLASSPATH… 库路径,可以是目录或jar文件,如C:\j2sdk1.4.0_01\lib\dt.jar;d:\java&#xf…