本文大量引用了别人的文章,引用自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

智能客户端研究笔记(三)相关推荐

  1. 【转载】胖客户端(C/S模式) 、瘦客户端(B/S模式) 和智能客户端(SC/S模式)三种模式的比较

    胖客户端(C/S模式)应用程序的优势是客户端和服务器端都能够处理任务,对客户机的要求较高,但可以减轻服务器的压力,目前在企业内部管理系统中大量使用.缺点是系统客户端软件安装.维护困难,数据库系统无法满 ...

  2. 智能客户端(SmartClient)

    智能客户端(SmartClient)     本文主要讨论基于企业环境的客户端应用程序模型,由于本人曾经从事过传统的客户端/服务器两层结构应用程序和基于.net平台的多层结构应用程序的开发,因此本文将 ...

  3. ERP技术的新方向——智能客户端

    ERP技术的新方向--智能客户端 你的产品是B/S还是C/S架构的?如今当厂商在应标时,经常被用户问到类似的技术问题.可以说,B/S还是C/S,已成为当前ERP 产业发展中不可回避的技术架构问题.   ...

  4. creportctrl 排序_witclient 智能客户端

    witclient是一款纯客户端:[智能客户端].支持直接连到数据库,几乎可以连接目前所有常用的数据库,对表进行操作,只需要配置,就可以做到.还支持通过SOCKET通讯方式传输消息的服务器,是的同样是 ...

  5. 智能硬件(2)---手机访问智能硬件的三种模式

    手机访问智能硬件的三种模式 手机访问智能硬件的三种基本模式:B/S模式.C/S模式.云模式. http://blog.csdn.net/zoomdy/article/details/51594977  ...

  6. 建立智能客户端应用的开发路标

    建立智能客户端应用的开发路标 [ 原文:Developer Roadmap For Building Smart Client Applications ] [ 中文名:.建立智能客户端应用的开发路标 ...

  7. .NET智能客户端(SmartClient)

    简介 智能客户端的概念作为Microsoft.net平台的一个特性而被提出,其实它的很多功能在传统的应用程序中早已存在,只是.net平台从系统和语言级别对它提供了支持,使开发智能客户端应用程序更为便捷 ...

  8. 【智能制造】周宏仁:智能制造的三个支点;全球制造业新趋势

    国家信息化专家咨询委员会常务副主任周宏仁 如何实施智能制造,需要考虑智能制造的三个支点:产品.装备和过程. 图1  智能制造的三个支点 第一个需要考虑的是推动智能制造的目标是什么.显然,企业追求的是产 ...

  9. 使用ThreeJs从零开始构建3D智能仓库——第三章(选中物体与特效)

    使用ThreeJs从零开始构建3D智能仓库--第三章 写在前面--目录结构 如何选中物体 选中物体的原理 选中物体的实现 添加选中后的发光特效 HTML更新如下 结束语 写在前面--目录结构 这一章我 ...

最新文章

  1. mysql rollup 排序_MySQL基础实用知识集合(二)
  2. 提升领导力 六商是基础
  3. Kratos技术系列|从Kratos设计看Go微服务工程实践
  4. java中的getfirst_Java LinkedList getFirst()用法及代码示例
  5. VSCode中Markdown目录显示异常
  6. 计算机技术与通讯,通信技术与计算机技术的融合发展
  7. JSON和JS对象之间的互转
  8. 关于信贷业务中常用的模型说明
  9. mysql数据绑定listview_将数据库数据用代码绑定到Listview
  10. 今日头条反省整改;微信QQ封杀短视频;雷军10亿赌约将见分晓| CSDN极客头条
  11. 直觉模糊有计算机知识嘛,多源直觉模糊信息系统的知识获取方法
  12. 小米高通系列清串号打开写号端口工具_高通刷机工具最新版下载(Qualcomm Product Support Tool) v2.7 官方版_数码资源网...
  13. 10.数据库-Pandas
  14. 给华南x99打鸡血BIOS教程
  15. 听课记录高中计算机,高中听课记录
  16. UFS和eMMC简介与区别
  17. Charles+Chrome+https,提示隐私设置错误,您的连接不是私密连接
  18. Android开发之对上下两个图层的操作
  19. 招银网络科技--后端面试记录
  20. 在页面上的输入框中即可以输入文字,又可以动态的插入图片的功能.

热门文章

  1. js转换字符串为base64位
  2. web.xml(8)_jsp-config
  3. flex柱状图和折线图的混合图使用
  4. java对象占用内存大小?
  5. 可编程led灯带原理_SCPSD-250-04-27派克真空压力传感器故障和工作原理
  6. JDK源码学习之Arraylist与LinkedList
  7. 简历要求中“ 扎实的JAVA基础”的学习方法
  8. centos7部署两个mysql_一文掌握mysql实用工具--pt-online-schema-change、innotop部署
  9. 手机触摸屏的分类和原理,供大家选择手机时用
  10. 信号集操作函数,信号未决、阻塞、递达