用来构建集成式桌面应用程序的新指南和初工具(转载为MSDN)

发表日期: 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)

图片 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;
    }
}

每当容器(工作起)范围外,也可依据需要,以宣称的法子将这些零部件解除引用。这就算提供了同等种植松散耦合方式,以赢得对持有包含在内的、由
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
加载。此外,单个模块中的逐一部件可以相互通信,也得以与外部模块(均隐含在该分别的次序集中)中运作的各级部件进行通信。

图片 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 应用程序集成到桌面中、如何处理平安问题和怎样支配布局。

图片 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
构建的智能客户端服务的体系布局。

图片 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。

图片 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 模块。

图片 6回来页首

集成式桌面的功力重合

一个集成式桌面由三层结:基础层、平台层和应用程序层。在出 ID
解决方案时,了解这些重叠以及它以影响系布局的哪些阶段是任重而道远的。图 2
例示了这些重叠及集成式桌面系统布局中逐条级别中的关联。

图片 7

祈求 2 集成式桌面系统布局

基础层 该层包含了 CAB
提供的享有骨干客户端服务,以及可以由另外模块或智能部件用的安全性和配备之类的服务。这些劳务表示了桌面的合水平组件。CAB
和 Smart Client Software Factory
均提供了根基层的要有。在构建“集成式桌面框架”时,首先要着手处理的就是该层及其相应的客户端服务。

平台层
该层针对的是供特定于阳台或技术的素(例如由传统劳务处理的因素)的劳务。它由模块或智能部件开发人员可用来归并部件(要考虑到其所来的平台)的零部件构成。如果你发出多单
Web 应用程序需要并及桌面,则提供可选用的客户端 Web
应用程序服务来作为“集成式桌面框架”的一样局部用推托管这些应用程序。例如,您可能想使用就当生育环境遭受运作的共处购物车应用程序。来自平台层的劳务可以用于在桌面托管是应用程序,使该像其它任何受管模块一样工作。Smart
Client Software Factory 提供了扳平组传统劳务来作为该层的如出一辙局部。

应用程序层
仅含应用程序和而选用的客户端业务功能,此应用程序层提供了一定于事情的客户端服务。该层由你便用开展互动的模块组合,例如搜索模块、客户信息模块和购物车模块。

图片 8返回页首

合传统 Web 应用程序

当 CAB 应用程序中托管现有 Web
应用程序所欲的不光是通向智能部件添加一个浏览器控件。客户端并的中心是富有应用程序(或模块)均曾完全集成。这象征其得以双向通信和共享信息。直到
CAB 可用,此作用才行,但解决方案只是说明性的,离可重复使用还不同得稀远。

但刚使上面提到的,现在得创建 Web 模块来托管任何 Web
应用程序。而且若可以形成这些,无需另其他模块了解中的出入。现有模块没有需要转移其共享信息之计。

今咱们用渐次介绍构建简单 Web 模块(如图 3
中所出示之模块)的长河,这如果依赖让由 Smart Client Software Factory
团队供的指南。我们下 CAB 服务与由于 Smart Client Software Factory
提供的新的指南包。

图片 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 模块,然后再流动回智能客户端。

图片 10回来页首

本着未来底展望

每当自之样例中,讨论哪些通过文档对象模型 (DOM) 将 JavaScript
的一个略带片传送回托管应用程序。这是让基于 HTML 的操作窗格能够访问 XML
文档的 DOM 时,InfoPath® 所用的一样桩技艺。

于现有的根据 Web
的应用程序而言,这种办法相对来说有自然的侵略性。它需要变更 Web
应用程序,重新编译该应用程序,然后还指向其开展重新部署。让咱们想像一下在这么平等种攻击性较小的法子:它同意任何智能部件将必要的拼代码注入到
HTML 页面的 DOM
中,在运行时只要不是在编译时实施绑定。当然,还待履行一定的关于安全影响之严加审批。还要必须将另功能丰富到
Smart Client Software Factory 的风波代理中,以便在智能客户端上下文和
HTML 页面元素中映射技术。

店铺就绪模块的前途是值得期待的。想像一下基于 Windows Workflow Foundation
的工作流模块,它见面为因桌面的工作流方案提供一个新的托管体系布局。工作流会立刻合拢及由集成式桌面托管的存活应用程序中,为信息工作者提供另外一个克做出决定的拼载体与一个结构化的任务列表外观。那么,是否能够通过一致组工作流模块将总体解决方案重构为耦合在一起的服务岛呢?

顿时同系统布局正在研发中,而且要不停地用阳台的新力量包括以拖欠系统布局被。持久性是商家级解决方案体系布局的真测试之一。由
Windows Vista™
引入的新力量的会对咱什么样考虑解决方案法带来挑战,而集成式桌面恰好用了所起的新力量。

Christian Thilmany
是一律各类技术架构师,在网布局的计划、开发暨咨询者负有过 16
年之经历,曾也各种财富 500 强公司提供咨询服务。在
Microsoft,他擅长于集成、门户和智能客户端模式和技能。

Jim Keane 是同个技术总监,在德克萨斯州奥斯汀市工作。他早就有 20
经年累月之处理器行业架构师的涉,在小型企业、航空航天、半导体、保险同进程控制体系等领域具有丰富经验。

正文摘自 2006 年 9
月发行的
MSDN 杂志。

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

发表评论

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