用于构建集成式桌面应用程序的新指南和新工具

公布日期: 2006-10-30 | 更新日期:
2006-10-30

Christian
Thilmany

Jim
Keane

正文将介绍以下内容:

CAB 和 Smart Client Software Factory 概述

集成式桌面的体系结构

构建和部署智能客户端

使用模块集成传统应用程序

正文涉及以下技术:

Visual Studio 2005、CAB、Smart Client Software Factory

代码下载地点:

SmartClient2006_09.exe
(12394KB)

766游戏网官网 1

本页内容
CAB 工作原理
构建简单的 CAB 应用程序
Smart Client Software Factory 简介
基本的智能客户端服务
集成式桌面的功能层
集成传统 Web 应用程序
对未来的展望

俺们已将半数以上注意力集中在为音信工作者提供业务智能 (BI)
工具上面,以帮忙他们作出更精明的核定。其中的大部供销社 BI
解决方案都是透过种种资源,尤其是由此接纳某种形式的服务器端新闻集成来提供消息。无论是用于汇总数据的告诉连串、类似于
Microsoft® SharePoint®
的搭档工具,依旧用于提供业务流程管理的自定义集团应用程序集成 (EAI)
解决方案,此信息发挥的其实效能才是首要。无需过多考虑怎么运用此音讯。

对此大多数运动以来,新闻工小编在制订决策时需求参考以下多少个应用程序:用于查看门户站点的
Web 浏览器、用于访问 EAI
解决方案的自定义应用程序以及用于读取数据汇总的表格查看器。随着年华的延期,通过学习怎样跨应用程序边界手动收集和整治数据,工作人员在做事方面是更进一步精通。那平时要经过启动
Microsoft Outlook®、Word、Excel®、Internet Explorer®
以及由商家提供的各样自定义应用程序等一多元进度来落成。那种转椅集成情势会爆发不良后果:对新用户的扶植时间过长、系统不可以以正确的花样为不易的人手提供正确的消息、引入了数据失实问题,等等。那么,提供一个由陈设模型包围的吕梁集成和托管载体,从而使那种样式的应用程序集成变得更便于,是还是不是会更实用吗?

大部开发人员认为面向服务的系统布局 (SOA)
是提供音讯的主意,而不是应用信息的法门。但您什么处理所有的自动化孤岛呢?由此引入了集成式桌面这一看法。

用作化解方案体系布局,大家目的在于简化不断壮大的事情应用程序领域并丰盛用户的经历,可是,其中最难以达到的一个对象就是跨过在桌面上运行的多少个应用程序无缝集成解决方案。诸如
DDE、OLE、COM、mailslot
及类似技术已整整用来缓解当地应用程序集成问题。但收获的却是经过中度耦合、简单蒙受破坏的桌面应用程序,而尊崇和配备这个应用程序却要开支高昂的代价。

集成式桌面是讲求于桌面的已两次三番系统系统布局的摩登部分。集成式桌面是一个不屑一顾耦合的托管种类布局,也是在桌面上运行的复合
UI,它由后端的松弛耦合种类布局予以帮忙。它大大减弱了亟须由用户处理的应用程序的多寡,并将总体放到单片“玻璃”下。构建集成式桌面应用程序所需的百分之百技巧已事先存在于
.NET Framework
中。可是,时至前日所面临的基本点挑衅仍是何许将它们无缝集成在一起。

集成式桌面策略的秘闻方向是开行服务。纵然连串布局并非一定须求劳务协会,但对于构建组合集团桌面的国策而言,服务协会却是须求的。集成式桌面应用程序的麻痹大意耦合本质就是对启用服务后端的本来适用。保持松散耦合种类布局的习性可顺遂落成安插,但那些类其余种类布局在布局时平常会遇见困扰。

对此 Microsoft,落成集成式桌面的基础层是新一代 Composite UI Application
Block (CAB) 和 Smart Client Software
Factory。对于精心制作个人桌面框架和自定义应用程序的化解方案架构师而言,将那四个工具结合起来使用将会提供有力的功能。(继续此前,请先熟练一下提要栏“骨干术语”中冒出的术语。)

CAB 工作原理

CAB
是用来构建复杂的智能客户端应用程序的格局和概念的兑现。简单的话,它提供
Windows® Forms 探测效率,以帮衬构建集团桌面应用程序。

是因为仅介绍 CAB
就能占据整篇小说的字数,而且里面有多少个零部件还超出了本文所研商的范围。由此,大家将强调于
CAB 的最首要组件,但指出你下载该有的内容并做深远的探讨。 从访问 CAB
社区站点
开始。

CAB 意在接济多种应用程序方案,如在线事务处理 (OLTP)
前端、客户端门户以及信息工小编应用程序。由于 CAB
是模块化设计且接触面积较小,由此,它不仅适用于大型集成式桌面,甚至还适用于不难的智能客户端。

应用
CAB,可经过科学解耦界面的各组成部分来共享单个智能客户端界面的付出任务。最后,CAB
创新了重复使用,并可以轻松已毕内部应用程序工作流之类的概念。为了可以重复使用,通过动用
CAB 框架构建的复合 UI
被分成七个办事部件。驱动程序是应用程序的外壳,它相当于托管可执行程序及用于加载复合
UI 部件的辅导程序。由外壳加载和展示的 UI
元素为用户提供“接触点”,如菜单和其他导航组件。外壳与应用程序部件自行松散耦合,由此,它为
UI 设计提供了一种灵活的法子。纵然外壳和 CAB
服务握着方向盘,但必须由你为引擎提供将由外壳托管的应用程序。

除了为托管可拔取的构件提供框架之外,CAB
还为诸如加载模块、通讯音信、保持状态等义务提供了一套智能客户端要旨服务。可经过代码或应用程序的
.config 文件来添加这个劳务。那一个基本服务包涵:

模块加载程序和模块枚举服务是根据提供商的服务,用于对列在布署目录中的模块的读取和加载操作进行控制。

事件代理服务用于在部件间以及由复合 UI 托管的子应用程序间传递音讯。

身份验证服务是依照提供商的服务,它承担探听用户的凭据、访问证书以及联系后端数据提供商。

情形持久性服务是按照提供商的仓储服务,它用于保存工作项情况,以便共享上下文数据,以及刹车工作项并在稍后再度激活。

要为 CAB 应用程序构建引擎,经常须求首先成立一个 CAB
模块。模块将为你的个人功效集提供一个可配备入口点(有时称为托管的应用程序)。模块包含在分别的DLL
文件中并在运转时从外壳加载。对于怎么模块可用以及加载哪些模块,那是截然可以展开安插的,这由可伸张程序目录来落实。假若你领悟Microsoft Enterprise Library,您会在 CAB 中分辨出一致提供程序模型。在
Visual Studio®
中,无需直接在外壳项目中援引模块,而且模块没有直接绑定到可执行程序。而是在运作时由模块加载程序加载这么些模块。

在模块程序集内部,可依靠 CAB 和 Smart Client Software Factory 类型(如
Presenter、SmartPart 和
State)提供完成该成效集所必备的行事项、视图、控制器和数量。尤其是那三项形成了根据CAB 应用程序的 Model-View-Presenter/Model-View-Controller (MVP/MVC)
格局。当应用程序逻缉必要时,注入服务。那允许开发人士以动态形式开立异的对象实例或再次回到已在容器中创制的目的。对于
CAB
来说,该容器是办事项,而且也是模块开发人士初始创制的内容之一。可由此使用
AddNew,将 CAB 组件(如客户端服务和工作区)显式添加到该容器中:

_rootWorkItem.WorkItems.AddNew<WorkItemA>();

也可经过配备或以注脚的法门来促成这一操作:

[CreateNew]
public ShipNewOrderViewPresenter Presenter
{
    set
    {
        _presenter = value;
        _presenter.View = this;
    }
}

766游戏网官网,在容器(工作项)范围内,也可根据要求,以宣称的方法将这几个零部件解除引用。那就提供了一种松散耦合情势,以赢得对负有包罗在内的、由
CAB 管理的项的造访权限(注入),如下所示:

[ServiceDependency]
public WorkItem WorkItem
{
    set { _workItem = value; }
}

CAB 的一个重中之重组件是目标生成器(也供新本子的 Enterprise Library
使用)。只要完成此依赖性注入,对象生成器就能启用多量实用的成效。它亦可在合适的时候成立一个新的切实可行类实例或重回现有的类实例;它亦可在某个类提供三个实例时,拔取适用的构造函数;它可以响应属性和方式中所表明的属性
(attribute),那个属性 (attribute)
会影响新对象的成立和命名;它还是能提供拆除工具,通过反转操作链,将安装从现有的靶子中除去。

目的生成器的实用性很低,并且在一大半情景下,您不能直接与其交互。不过,精通“看重性注入”的定义对于通晓怎么将劳动插入到模块中是格外主要的,而且在调节时这几个知识会对你大有帮扶。有关“信赖性注入”和
CAB 中所采用的此外格局的详细音信,请参见 CAB 文档。

可依照你希望的不二法门划分模块。每个模块至少应存在一个办事项,别的的工作项作为该模块的驱动程序。像其余任何应用程序或子应用程序一样,也可根据你的希望确定工作项的深浅。在
CAB 应用程序中,事件的独立各类与以下类似:

1.

用户双击用于显示外壳的 EXE。

2.

外壳引导桌面,加载任何已配置的 CAB 服务,显示其 UI 元素,然后加载所有已配置的模块。

3.

当被加载后,每个模块都会将一个工作项添加到其父工作项来控制该子应用程序,并让此工作项在所提供的工作区中显示其任一内容。

4.

当被加载后,每个模块都会将一个工作项目添加到其父工作项目来控制该子应用程序,并让此工作项目在所提供的工作区中显示其任一内容。

5.

当用户从菜单中选择一个 UI 元素时,即会引发相关联的命令。

6.

命令处理程序会通过添加一个子工作项目来响应该命令,该工作项目将控制另一个子应用程序并显示其视图。

7.

该工作项目通过智能部件显示其视图。

8.

用户与视图接口进行交互,随后视图接口再传递一个控制器(或表示器)。

9.

控制器更改共享数据(状态)并使用事件代理将数据传回主机。

10.

事件代理将该相关信息(上下文)发送到其他模块或部件。

CAB
模块可以是单身的完全,也足以是由外壳所托管的一个大型模块集的一有的。多模块智能客户端是
CAB
真正呈现其灵活性和规划的亮点所在。此灵活性主要反映在,您根本无须在加载模块程序集的外壳项目中一向引用模块程序集,因为它们将在运转时由
CAB
加载。其它,单个模块中的各样部件可以并行通信,也得以与外表模块(均隐含在其各自的程序集中)中运作的各部件进行通讯。

766游戏网官网 2回去页首

构建不难的 CAB 应用程序

当今,让大家构建一个单模块应用程序。首先,我将不难说明什么创制一个粗略的智能客户端。(我将在后文中啄磨更复杂的集成式桌面。)

绝半数以上集成式桌面都富有一个可知的开行窗体,由此你寻常都从一个“Windows
窗体”外壳开头操作。首先,从 FormShellApplication
继承您的类并将其实例化,然后从您的应用程序的 Main 方法调用其 Run
方法。那将开首化 CAB
应用程序,从而加载大家之前议论的别样已安排服务。下一步涉及到覆盖
FormShellApplication 提供的办法(例如
AfterShellCreated)以填充菜单和出示任何可知视图。(智能部件是可挑选,它们只是用
SmartPartAttribute 装饰的用户控件。)

要在贯彻 AfterShellCreated 时开端化用户界面,您要求将 CAB
所引用的始末注册为扩展站点。那会提供一个 UI
元素管理器,以便任何模块在后头任哪天候都得以加上来自其它模块的子 UI
元素(例如,菜单项或工具栏项)。最后,在外壳对平常也在此伊始化时期添加的
UI
元素命令进行加载或响应时,您初始显得你的视图。由于各命令绑定了指令处理程序,由此你的代码在运转时可以对别的一般
UI
元素引发的其他命令作出响应;那与增进惯常的事件处理程序相似,只可是形式更是抽象一些。

可由此接纳 SmartPartPlaceHolder 类或 CAB
中称之为工作区的区域来突显视图。它们只是用来以给定排列方式显示视图的布局容器。假设你曾选用过
Java 抽象窗口工具包 (AWT),您就应娴熟此概念。

最后,要创立外壳,请注册一个接口并突显一个智能部件。提要栏中的“创造容易的智能客户端:分步指南”详细介绍了哪些构建一个非常简单但模块化的智能客户端。要展现CAB
的的确功能,您应选用模块将你的各部件封装到个其他主次集中。这为您提供了设计时抽象以及近似于
COM 提供的运转时抽象,但解除了装有复杂。

选用各模块,您可以托管通过功效集自身的顺序集安排的独门成效集。这意味着各社团得以在不影响整个集成式桌面的图景下对种种模块进行版本处理、陈设和意义增强。模块程序集文件(不直接在
EXE 中援引)在运作时通过模块加载程序和枚举服务举行加载。CAB
的配置文件目录和应用程序配置文件使你可以指定要将如何模块加载、安排和绑定到外壳中。提要栏中的“开创模块和模块开头化程序”将日趋向你介绍创立模块及其起头化程序的进程。我所列支出的步子清楚描述了怎么样创制一个大概的
CAB 应用程序。然而请留意,大家那里论及的只是题材的外表。

随 CAB 一起安装的“Bank Teller”神速入门示例是一个现成的单模块 CAB
应用程序。它将向你介绍自身在那里所概述的兼具重点零部件。

当然,当构建真正的商家集成式桌面时,会波及到更加多内容,而不只是复合的
UI
块这么简单。您要求缓解大气叶影参差问题,例如,如何在模块间共享新闻、如何将非
CAB 应用程序集成到桌面中、怎么着处理安全题材以及怎样决定布局。

766游戏网官网 3回到页首

Smart Client Software Factory 简介

在创立集团就绪型应用程序时,除了 CAB
提供的基本服务之外,您还索要另外类的根基服务。这一个劳务包含扶助您在配置、安全性和选购等地点管理桌面的工具。您或许还亟需日志记录、工作流、配置和缓存处理等等的劳动,以管教所有模块在这么松散耦合的条件中健康运行。

Smart Client Software Factory
可以透过提供指南和引用完成来助您一臂之力。Smart Client Software Factory
不仅仅是一个工具包,它还提供了智能客户端基本焦点服务的运用入门集,以支持你最先建立集团就绪型集成式桌面。

具备服务均可就是可选服务和可扩充服务。Smart Client Software Factory
构建于 CAB 和 Enterprise Library 之上,并动用了现有应用程序块。图 1
例示了依赖 Smart Client Software Factory
构建的智能客户端服务的体系布局。

766游戏网官网 4

图 1 智能客户端服务

因为多数供销社都亟需一组常用服务,因而 Microsoft
已将一个连锁基金集合内置于 Smart Client Software Factory
中。它们由四个引用落成来显示,那三个引用完成可将独立经验映射到 Smart
Client Software Factory 内所包罗的服务。“引用达成1”模拟了“贷款评估桌面”并选取了离线工作力量、最后用户通告和其它类似功用。“引用完成2”模拟了“银行人员桌面”(Bank Teller
示例的一个多模块版本)以示范安全服务、安排服务和宗旨服务。

指南包所提供的扶持对构建集团应用程序极度有价值。它们选用相对较新的
Guidance Automation Toolkit (GAT)(该工具包是对 Visual Studio 2005
的壮大)构建而成。在选取 GAT 时,团队开发人士可以提供启动工具包(或
SDK),那样任何开发人士就足以在将来加上模块和任何 ID 部件。Smart Client
Software Factory 包涵一个必需的要素,即用于智能客户端支付的 Visual
Studio Guidance Package。那是由指导 ID 开发人士经历整个 CAB
开爆发命周期的工具、形式、源代码和表达性携带结合的一个集成式集合。若想了然详细音信以及下载
GAT,请访问
msdn.microsoft.com/vstudio/teamsystem/Workshop/gat/default.aspx

766游戏网官网 5回去页首

要旨的智能客户端服务

集成式桌面构建于 Smart Client Software Factory 和 CAB
之上。它应采用一个可选取集合的样式,那几个集合由 CAB 扩充、Smart Client
Software Factory 完结、普通基础服务以及可完全或部分添加到其余现有复合 UI
应用程序中的库组成。那就整合了“集成式桌面框架”,其中蕴蓄部分基本服务。

上下文服务
这是创制集成式桌面的最重大元素之一。它也很可能是最不难被清楚错误的元素之一。当使用由若干模块组合的
CAB 应用程序时,您常常会利用某种形式的音讯共享。例如,您的 CAB
应用程序可能蕴含一个外壳、一个用于体现客户音讯的模块、一个用来体现汇总数据的题目模块、一个搜寻模块以及其他义务一定的模块。其中每一个模块都得以单独支出、陈设和护卫。就算你想追究怎样促成那几个职分,可以凭借提供了有关“方法”的
CAB。但你还亟需确定“内容”,也就是将在这个模块之间共享的音讯。那也许仅指客户
ID。事件代理会将“上下文已改成”这样的轩然大波举行全局通讯,并且拥有模块都会在对应时间突显相应音信。您将播放客户
ID 那样的实际情况表达它是要共享的音信,并且那形成了“上下文”的前提。

上下文服务只用于广播和查找这一个共享新闻,在某种程度上,那与商店桌面所提议的政策一致。您应利用一组基本的上下文类型及其相应的架构合约才能在你的桌面中提供任何任何服务。这似乎于
SOA 中所使用的“合约至上”的宏图执行。您并不是要遵守在 Web
服务端点所定义的合同,而是要在桌面自身的各部件之间定义那么些相同的合同。实际上,在构建集成桌面应用程序时,也设有
EAI 或 SOA 项目中存在的如出一辙难题。

布署服务
这一个劳务通过担保各样模块可以在运转时计划到桌面来提供集成式桌面应用程序及其部件。一个抉择是将计划服务构建于
ClickOnce API
之上。这个劳动应该对要下载到桌面的一定可选模块提供服务器端控制。当外壳启动时,身份验证服务将为布局服务提供证据来表达:已为用户启用特定模块,那样,如若那几个模块已不存在,则必须将其下载到桌面。模块将被下载,并由模块加载程序开展加载,然后在急需时显得给用户。CAB
使你能够向配置文件目录添加用户角色。布置服务的贯彻程序可以轻松地增添寻常的模块加载程序服务以利用此意义,因为
CAB
在模块加载程序扩大上将只对在眼前附加到运行重点的已知角色条件下被授权运行的模块调用加载。

安全服务
与上下文服务差距,安全服务越发便于驾驭。您可以将其构建于所提供的在 CAB
中已部分身份验证服务之上。那为使用自定义身份验证服务提供了一个源点,并提供了一种向集成式桌面应用程序统一添加身份验证逻辑的格局。使用
CAB 和 Smart Client Software Factory
提供的劳动及指南,您可以将各角色添加到各类模块中,以指明那么些模块与特定角色相关联。那使你可以依据登录者的角色决定要加载哪些模块,并能够启用其余成效(例如您的布署服务)来控制实际要将何以模块陈设到桌面。

合龙服务 如若受管的 Windows
窗体应用程序是要合并到智能客户端中的唯一候选程序,则布置单个公司桌面就从未太大用处。平日要求集成大批量的预编写(传统)应用程序,以便它们在保证自治性的还要仍可作为桌面体验的一有的。其中囊括不是用
.NET 创立的 Web 应用程序、ASP.NET Web 应用程序、COM
应用程序,甚至包涵绿屏。

Smart Client Software Factory
中的集成服务提供了将那几个服务中的某些服务内置于你的集成式桌面中的指南。本文将更加介绍一种档次的观念桌面应用程序集成

  • Web 应用程序。我们将向你介绍 CAB 和 Smart Client Software
    Factory(及其指南包)怎样支持您构建一个方可采取其余 Web
    应用程序并可以轻松将其托管的 Web 模块。

766游戏网官网 6归来页首

集成式桌面的成效层

一个集成式桌面由三层组成:基础层、平台层和动用程序层。在开发 ID
解决方案时,掌握这一个层以及它们将震慑种类布局的怎样阶段是非同小可的。图 2
例示了这么些层与集成式桌面系统布局中逐顶尖别之间的关联。

766游戏网官网 7

图 2 集成式桌面系统布局

基本功层 该层包蕴了 CAB
提供的所有要旨客户端服务,以及可以由其他模块或智能部件使用的安全性和配备之类的服务。这一个服务表示了桌面的一起水平组件。CAB
和 Smart Client Software Factory
均提供了基础层的机要部分。在构建“集成式桌面框架”时,首先要求发轫处理的就是该层及其相应的客户端服务。

平台层
该层针对的是提供一定于阳台或技术的因素(例如由传统劳务处理的要素)的服务。它由模块或智能部件开发人员可用来归并部件(要考虑到它们所源于的平台)的零件构成。假使你有七个Web 应用程序需求集成到桌面,则提供可拔取的客户端 Web
应用程序服务来作为“集成式桌面框架”的一有的将推动托管那个应用程序。例如,您可能想要使用已经在生养环境中运行的依存购物车应用程序。来自平台层的劳动可以用来在桌面托管此应用程序,使其像别的任何受管模块一样工作。Smart
Client Software Factory 提供了一组传统劳务来作为该层的一局地。

应用程序层
仅包括应用程序和可接纳的客户端业务功效,此选拔程序层提供了一定于业务的客户端服务。该层由你常常必要展开相互的模块组成,例如搜索模块、客户新闻模块和购物网店模特块。

766游戏网官网 8归来页首

合并传统 Web 应用程序

在 CAB 应用程序中托管现有 Web
应用程序所急需的不单是向智能部件添加一个浏览器控件。客户端集成的中央思想是享有应用程序(或模块)均已全然集成。这意味它们得以双向通讯和共享音信。直到
CAB 可用,此成效才使得,但解决方案只是表明性的,离可重复使用还差得很远。

但正如上边提到的,现在得以创立 Web 模块来托管任何 Web
应用程序。而且你可以形成这么些,无需任何其余模块了解其中的差距。现有模块没有要求变更它们共享音信的不二法门。

现今我们将渐次介绍构建简单 Web 模块(如图 3
中所示的模块)的长河,那要凭借于由 Smart Client Software Factory
团队提供的指南。我们使用 CAB 服务以及由 Smart Client Software Factory
提供的新的指南包。

766游戏网官网 9

图 3 由 Web 模块托管的 Web 应用程序

你须要做的第一件事是新建一个 Web
应用程序或伸张现有的应用程序。本示例概述了创办新 ASP.NET Web
应用程序的手续。您也足以将其看成修改现有 Web
应用程序的模板。大家使用的历程稍微有点入侵性:您必须将 JScript®
添加到应用程序,而且在设计时通过丰裕代码应用目的模型与 Web
应用程序通讯。

在开立样例 Web 页面(该页面将作为典型 Web 应用程序)后,创建一个 Web
模块。但在这样做事先,必须下载以下必备条件:

Guidance Automation Extensions (GAX)

Composite UI Application 指南包(确保在当前解决方案中启用此功能)

Composite UI Application Block

包含到 CAB 库和 Smart Client Software Factory 的适当引用的简单外壳应用程序

包含所有可在某些其他模块和应用程序库中重复使用的公用代码的库项目

用作 Smart Client Software Factory 的一有的,诸如
Microsoft.Practices.SmartClient.Web.WebPresenter 和
Microsoft.Practices.SmartClient.Web.WebView
之类的类提供基本探测成效,以便利用 CAB 的轩然大波代理自动映射由 Web
页面触发的事件。从而使任意 Web 模块可以选择内置于 CAB
中的默许通讯机制,并可以使拥有事件自动流入和流出 Web
页面。Microsoft.Practices.SmartClient.Web.WebView 继承自浏览器控件,可在
Web 模块中重复使用。

请留心,指南包是可选的,并且仅自动提供您的体系中的一些模板代码,如 Smart
Client Software Factory 提供的劳务。作为替代方式,您也可以从本文下载样例
Web 页面和 Web 模块。

步骤 1:创制 Web 页面 我们将从创设 Web 页面开首,该页面将用作咱们的传统
Web 应用程序。

1.

新建一个 Web 项目或向现有 Web 项目中添加一个新页面。

2.

或者,向可能包含 Web 应用程序所使用的常量的任何公用库中添加引用。

3.

添加一个 HTML 按钮,其“Text”(文本)属性值为“触发上下文已更改的事件(来自 JavaScript)”。

4.

添加一个 ASP.NET 按钮,其“Text”(文本)属性值为“触发上下文已更改的事件(来自 ASP.NET 服务器)”。

5.

添加一个 HTML 文本框,其 id 为“txtCustomerName”。

6.

在页面的 Page_Load 方法中添加以下代码(仅在使用 ASP.NET 服务器控件时才是必需的):

    ClientScript.RegisterOnSubmitStatement(cstype, Common.Events.        
        ContextChanged, BuildRaiseEvent(Common.Events.ContextChanged));

7.

添加以下 private 方法(也是仅在使用 ASP.NET 服务器控件时才是必需的):

    private string BuildRaiseEvent(string topic) 
    { 
        StringBuilder sb = new StringBuilder(); 
        sb.Append("window.external.FireEvent(\""); 
        sb.Append(topic); 
        sb.Append("\",0);"); 
        return sb.ToString(); 
    }

8.

双击第一个按钮,在 onclick 事件中添加以下代码:

    window.external.FireEvent("ContextChangedEvent","Param1"); 

此代码将触发 Web 页面中的事件,并经由 Smart Client Software Factory 转为 Web 浏览器代码,然后使用事件代理进入智能客户端。

9.

在上一步的 onclick 事件处理程序之后添加以下代码:

    function EventBroker_Subscribe() 
    { 
        window.external.SubscribeEvent("ContextChangedEvent");
        window.external.SubscribeEvent("CustomerContextChangedEvent");  
    } 

    function EventBroker_ContextChangedEvent() 
    { 
        window.alert("上下文已更改事件:来自 Web 应用程序的问候"); 
    }

通过 Subscribe 事件处理程序,智能客户端可将何时设置事件订阅告诉给 Web 页面(通常在 Web 页面将其自己载入浏览器控件后)。接下来,Web 页面触发并返回到主机,然后调用 SubscribeEvent(Web 页面要订阅的事件)。这样,只要触发该事件,CAB 中的所有全局事件就会从智能客户端流动到 Web 页面。这在 JScript 的 EventBroker_XXX 事件处理程序中捕捉。

10.

添加以下 JScript 函数:

   function EventBroker_CustomerContextChangedEvent(eventData) 
   { 
      document.getElementById('txtCustomerName').value = eventData.Name;
   }

那显得怎么将事件数量从智能客户端传递到 Web 页面以及哪些在 Web
页面中动用那一个数量。

手续 2:创设 Web 模块 要创造 Web
模块,请首先右键单击解决方案,然后接纳“Add”(添加)|“CompositeUI”|“Module”(模块)。在“Add
New
Project”(添加新类型)对话框中,指定您自己的模块名称。现在,单击“OK”(确定),选拔“Shell”(外壳)项目,然后单击“Finish”(完结)。

您会发现已开立了好多新项。一个新的 Web
模块项目已添加到解决方案中。必需的引用(包含 CAB 和 Smart Client
Software Factory 库引用)已添加到该 Web 模块项目中。已在新类型中创设了
WorkItems 文件夹,并在该品种中开创了 ModuleInit.cs 文件和类。

手续 3:新建 WorkItem 新建 WorkItem
极度简单。首先右键单击刚创制的模块中的 WorkItems
文件夹,然后选择“Add”(添加)|“CompositeUI”|“WorkItem”。将名称改变为
WebWorkItem.cs。接纳“Shell”(外壳)项目并单击“Finish”(落成)按钮。

此时,您将发现已开立了 WebWorkItem.cs 文件和类。别的,还为 CAB 和 Smart
Client Software Factory 添加了 using 指令和必要的引用。

在 ModuleInit 类的 Load 中,添加以下代码:

WorkitemCatalog.RegisterWorkItem<WebWorkItem>(); 

并将以下 using 指令添加到 ModuleInit.cs 文件的顶部:

using WebModule.WorkItems.WebWorkItem;

步骤 4:新建视图 此步骤解决 Web 页面和智能客户端应用程序(在本例中为 Web
模块)之间的数据交流。

1.

右键单击 WebWorkItem 文件夹。

2.

选择“Add”(添加)|“CompositeUI”|“View…”(视图…)

3.

将名称更改为 WebView,然后单击“Finish”(完成)按钮。这将创建 IWebView 接口、WebPresenter 类和 WebView usercontrol。它们用于实现在整个 Smart Client Software Factory 中使用的典型 MVP 模式。

4.

转到 WebWorkItem 类,然后添加以下代码:

    public void ShowInView(IShellView view) 
    { 
        WebView webView = this.Items.AddNew<WebView>(); 
        view.MainWorkspace.Show(webView); 
    } 

这会将 WebView(一个智能部件)添加到工作项“智能部件”集合的项集合中,并在工作项启动时显示该智能部件。

5.

在设计器模式中打开 WebView UserControl。

6.

从 Smart Client Software Factory 添加 Microsoft.Practices.SmartClient.Web.WebView 控件。

7.

将 Microsoft.Practices.SmartClient.Web.WebView 控件的 Url 属性设置为您刚创建的测试 Web 页面。

8.

转到 WebWorkItem.cs 文件并添加以下 using 指令:

    using Microsoft.Practices.SmartClient.UI.Themes;

9.

打开 WebPresenter 类并添加以下代码:

    [EventSubscription(Common.Events.ContextChanged,
                       Thread=ThreadOption.UserInterface)] 
    public void OnContextChange(object sender, EventArgs e) 
    { 
        System.Windows.Forms.MessageBox.Show( _
            "上下文已更改:来自丰富 UI 组件的问候"); 
    } 

这由 Web 页面触发,通过 CAB 事件代理转换为 WebView 代码。

10.

添加以下 using 指令:

    using Microsoft.Practices.CompositeUI.EventBroker;

11.

打开 IWebView 接口并添加以下代码:

    event WebBrowserDocumentCompletedEventHandler DocumentCompleted;

12.

打开 WebPresenter 类并添加图 4 中所示的代码。这允许 Smart Client Software Factory 通过绑定订阅响应 Web 页面加载。加载 Web 页面时,触发 CustomerContextChangedForWebPage 事件。将通过事件代理以 CustomerContextChanged(在 JavaScript 中)形式将其通知给 Web 页面。这是在从智能客户端启动 Web 模块时,上下文或信息从智能客户端流动到 Web 页面的作用,它允许任何 Web 应用程序在响应加载时显示来自智能客户端的任何信息。请注意,发送过程中的覆盖操作并非必要,只是在加载特定事件时引发该事件。

13.

添加以下 using 指令:

    using System.Threading; 
    using System.Security.Principal; 
    using Microsoft.Practices.CompositeUI.Utility;

14.

将以下代码添加到 WebView 类(IWebView 实现):

    public event WebBrowserDocumentCompletedEventHandler    DocumentCompleted 
    { 
        add { this.webView1.DocumentCompleted += value; } 
        remove { this.webView1.DocumentCompleted -= value; } 
    }

手续 5:在与外壳应用程序相同的目录中构建和测试 Solution Place
WebModule.dll,并将该模块添加到 ProfileCatalog.xml,以便 CAB
模块加载程序服务可以加载它。

末尾,根据传递信息时所使用的同等形式,使用事件代理将其传递到别的模块。像启动任何其余Web 模块一样来启动此 Web 模块。现在,所有全局事件都应从智能客户端流动到
Web 模块,然后再流动回智能客户端。

766游戏网官网 10回去页首

对未来的展望

在自身的样例中,研商怎样通过文档对象模型 (DOM) 将 JavaScript
的一个小块传送回托管应用程序。那是驱动基于 HTML 的操作窗格可以访问 XML
文档的 DOM 时,InfoPath® 所拔取的一项技艺。

对此现有的根据 Web
的应用程序而言,那种措施相对来说具有自然的入侵性。它需求转移 Web
应用程序,重新编译该应用程序,然后再对其进行重新陈设。让大家想像一下存在这么一种攻击性较小的措施:它同意其余智能部件将需要的融会代码注入到
HTML 页面的 DOM
中,在运转时而不是在编译时举办绑定。当然,还索要实践一定的有关安全影响的严酷审查。还要必须将其他职能丰裕到
Smart Client Software Factory 的风浪代理中,以便在智能客户端上下文和
HTML 页面元素之间映射技术。

商店就绪模块的前途是值得期待的。想像一下基于 Windows Workflow Foundation
的工作流模块,它会为根据桌面的工作流方案提供一个崭新的托管种类布局。工作流会马上合拢到由集成式桌面托管的并存应用程序中,为音讯工小编提供其余一个可见做出决策的合并载体以及一个结构化的义务列表外观。那么,是或不是可以由此一组工作流模块将全部解决方案重构为耦合在一道的服务岛呢?

这一种类布局正在研发中,而且必须不断地将平台的新效率包含在该系列布局中。持久性是商家级解决方案序列布局的的确测试之一。由
Windows Vista™
引入的新功效确实会对大家如何考虑解决方案措施带来挑衅,而集成式桌面恰好使用了所兴起的新功能。

克赖·斯特(Chr·ist)ian Thilmany
是一位技术架构师,在系统布局的规划、开发和咨询方面享有超过 16
年的阅历,曾为种种财富 500 强集团提供咨询服务。在
Microsoft,他擅长于集成、门户以及智能客户端方式和技能。

吉姆(Jim) Keane 是一位技术总裁,在弗吉·尼亚(Vir·ginia)州Austen市做事。他曾有 20
经年累月的微处理器行业架构师的经历,在小型集团、航空航天、半导体、有限帮助和进度控制序列等世界有所丰裕经历。

本文摘自 2006 年 9
发行的
MSDN 杂志

© 2006 Microsoft Corporation
版权所有。保留所有义务。使用规定。

发表评论

电子邮件地址不会被公开。 必填项已用*标注