65.9K
CodeProject 正在变化。 阅读更多。
Home

使用自我跟踪实体和 WCF 服务构建的 Silverlight 示例 - 第 1 部分

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.88/5 (14投票s)

2011年1月10日

CPOL

12分钟阅读

viewsIcon

81814

downloadIcon

1824

本系列文章的第一部分,介绍如何使用自跟踪实体、WCF 服务、WIF、MVVM Light Toolkit、MEF 和 T4 模板创建 Silverlight 业务应用程序。

文章系列

本文是关于使用自跟踪实体、WCF 服务、WIF、MVVM Light Toolkit、MEF 和 T4 模板开发 Silverlight 业务应用程序的系列文章的第一部分。

目录

引言

本系列文章的构想源于我之前撰写的关于使用 WCF RIA Services 和 MVVM 构建 Silverlight LOB 应用程序示例的系列文章。WCF RIA Services 通过封装一些最常见的 CRUD 功能,并利用代码生成简化了富互联网应用程序多层解决方案的开发,使其易于构建和使用服务。它是一个高度可定制的“现成”解决方案,非常适合开发新系统。但如果您需要重用一些现有的 WCF 服务,或者希望获得最大的控制权,WCF RIA Services 可能不适合您。一种可能的替代方案是使用 ADO.NET 自跟踪实体生成器和普通的 WCF 服务。

如果您有兴趣进一步探索此替代方案,下一步我们将对 WCF RIA Services 中目前存在但如果选择 ADO.NET 自跟踪实体生成器和 WCF 服务时会缺失的功能进行差距分析。据我所见,主要有三个方面:

首先,WCF RIA Services 提供了一个名为 DomainContext 的类,它是服务的一种有状态客户端表示,提供了对服务所有功能的访问。其中一些用于更改跟踪的有用方法和属性是 SubmitChangesRejectChangesHasChanges。如果选择 WCF 服务,没有必要重新构建整个 DomainContext 类,但至少我们可以尝试在每个自跟踪实体上实现类似的更改跟踪,这将在下一篇文章中讨论。

其次,WCF RIA Services 支持多个级别的验证:成员/字段级别验证、实体级别验证和操作级别验证。验证可以通过元数据注解声明性地定义规则,或者通过附加到元数据注解的代码中的命令性规则来实现。不幸的是,目前在 VS2010 自带的 ADO.NET 自跟踪实体生成器中,这些功能都不存在。如果通过增强自跟踪实体生成器来构建多级验证的基础架构,那就太好了。

最后,WCF RIA Services 提供了一组用于身份验证和授权的内置类。如果我们使用 WCF 服务,这些内置类将不可用。一种替代方案是使用 Windows Identity Foundation (WIF) 来处理身份验证和授权,幸运的是,Identity Developer Training Kit 中有一个很棒的示例。

在我们继续之前,请允许我提前说明,本系列文章涵盖了广泛的技术,包括自跟踪实体、WCF 服务、WIF、MVVM(MVVM Light Toolkit)、MEF 和 T4 模板。我的主要重点将是如何创建一个增强版的自跟踪实体生成器,以便我们可以构建一个带有 WCF 服务的数据访问层。我的下一个重点将放在对本示例其他部分的更改上,使其能够与这个新的数据访问层无缝协作。假设您对上述技术领域有很好的掌握,并且请注意,有些讨论可能会非常深入。

示例的主要功能

与上一篇文章系列中使用的功能相比,此问题跟踪应用程序的主要功能基本保持不变,只有一些小的增强。如果您不熟悉,以下是回顾:

  • 登录屏幕提供基于安全问题和答案的自定义身份验证和密码重置。
  • 我的个人资料屏幕用于更新用户信息、密码、安全问题和答案。
  • 用户维护屏幕仅对管理员用户可用,允许管理员添加/删除/更新用户。
  • 审核问题屏幕也仅对管理员用户可用,允许管理员审核任何问题的更改。
  • 新问题屏幕用于创建新问题(bug、工作项、规范缺陷等)。
  • 我的问题屏幕用于跟踪分配给用户的​​所有活动和已解决的问题。
  • 所有问题屏幕用于跟踪所有问题(未解决、活动、待定或已解决)。
  • Bug 报告屏幕提供 bug 趋势摘要、bug 计数以及打印摘要的功能。
  • 提供四种不同的主题,可随时动态应用。

系统要求

为了构建示例应用程序,我们需要:

支持的操作系统

  • Windows Vista SP2、Windows Server 2008 SP2、Windows 7 或 Windows Server 2008 R2

其他要求

  • Microsoft IIS 7
  • Microsoft SQL Server 2005、2008 或 2008 R2
  • Microsoft Visual Studio 2010 Professional
  • Microsoft Visual Studio 2010 的 Microsoft Silverlight 4 工具
  • Silverlight 4 Toolkit 2010 年 4 月(包含在示例解决方案中)
  • MVVM Light Toolkit V3 SP1(包含在示例解决方案中)
  • Windows Identity Foundation Runtime
  • Windows Identity Foundation SDK 4.0
  • 可扩展元数据 (VS2010 扩展)
  • (可选) Tangible T4 Editor 加上 VS2010 的建模工具 (VS2010 扩展)

遗憾的是,Windows XP 不受支持。这是因为 Windows Identity Foundation 不支持 Windows XP。此外,我们必须至少选择 VS2010 Professional,因为 Visual Web Developer 2010 Express 不支持 VS2010 扩展。

系统设置

将源代码下载到本地磁盘上的位置后,在构建和运行此示例之前,我们需要确保我们的开发环境已正确设置。我们接下来的所有讨论都假定我们使用 Windows 7。

IIS 7 设置

首先,我们需要使 IIS 7 正常运行。要添加此 Windows 功能,请按以下方式启用“Internet Information Services”功能:

除了默认选项外,请还选择以下两个选项:

  1. “Web 管理工具”->“IIS 6 管理兼容性”->“IIS 元数据库和 IIS 6 配置兼容性”
  2. “万维网服务”->“应用程序开发功能”->“ASP.NET”

数据库设置

接下来,我们将安装 SQL Server 来托管我们的示例数据库。SQL Server 2005、2008 或 2008 R2 都可以;我们也可以使用免费的 SQL Server 2008 R2 Express。只需确保选择“SQL Server 和 Windows 身份验证模式”,如下所示:

VS2010、VS2010 扩展和 WIF 设置

完成数据库设置后,下一步是安装 Microsoft Visual Studio 2010 和 Microsoft Visual Studio 2010 的 Microsoft Silverlight 4 工具。然后,我们需要添加两个 VS2010 扩展。第一个名为“Portable Extensible Metadata”,可以在此处找到。第二个是“tangible T4 Editor plus modeling tools for VS2010”。这个是可选的,只有在您有兴趣修改 T4 模板时才需要。我们可以在此处找到下载。

接下来,我们需要安装 Windows Identity Foundation Runtime 和 Windows Identity Foundation SDK。请注意,它们是两个单独的下载,每个下载都有针对不同开发环境的不同包。Windows Identity Foundation Runtime 可以在此处找到,Windows Identity Foundation SDK 可以从此处下载。

其他 IIS 7 设置

在设置完 VS2010 后,我们还有一些额外的 IIS 7 设置步骤,如下所示:

首先,以“管理员身份运行”启动命令提示符。我们按以下方式将 ASP.NET 4.0 运行时注册到 IIS:

我们假设上述命令仅在我们的开发机上使用。它本质上是将 ASP.NET 4.0 运行时设置为整个 IIS 网站,如果在生产环境中执行此操作,可能会对其他 Web 应用程序产生意想不到的副作用。

执行上述步骤后,在 IIS 7 中还有一件事需要验证。请启动 IIS 管理器,转到“应用程序池”,然后选择“DefaultAppPool”,再选择“高级设置...”。打开“高级设置”窗口后,请确保“加载用户配置文件”设置为 True。

证书和数据库脚本设置

此设置的最后一部分是安装证书和示例数据库,其中手动设置证书可能是迄今为止最困难的步骤之一。幸运的是,我们有脚本可以自动完成整个过程。

以“管理员身份运行”启动命令提示符,然后导航到下载的源代码的“Certificate Scripts”文件夹。脚本“SetupCertificates.cmd”将安装我们示例应用程序所需的所有必要证书,“CleanupCertificates.cmd”将在您厌倦此示例时将其全部删除。 “Certificate Scripts”文件夹中的所有内容均来自Identity Developer Training Kit,未作任何修改,我当然不为此承担任何功劳。此外,您可以通过 MMC 管理单元查看这些证书,如下所示,来验证它们是否已正确设置:

要验证 SSL 证书是否设置为 IIS 的“localhost”,我们需要启动 IIS 管理器,转到“SSL 设置”,然后选择“绑定...”。

手动设置证书并授予必要的权限以使 IIS 7 能够访问它们超出了本文的范围。但是,如果您真的很好奇,当然可以打开“SetupCertificates.cmd”文件查看一下。

要安装示例数据库,请运行下载的源代码的“Database”文件夹中包含的SqlServer_IssueVision_Schema.sqlSqlServer_IssueVision_InitialDataLoad.sqlSqlServer_IssueVision_Schema.sql 创建数据库模式和数据库用户IVUserSqlServer_IssueVision_InitialDataLoad.sql 加载运行此应用程序所需的所有数据,包括初始应用程序用户 IDuser1和管理员用户 IDadmin1,密码均为P@ssword1234

构建和运行示例

完成所有这些设置步骤后,我们终于可以开始构建和运行此示例应用程序了。启动 VS2010 时,请确保以“管理员身份运行”,因为有两个项目使用本地 IIS 服务器。首次加载解决方案时,我们将看到以下两个屏幕,请同时选择“是”。这将创建本地 IIS 服务器上的两个虚拟目录。

另外,如果您选择通过两个安装包来测试此示例,而不是在 VS2010 中运行,请注意,这两个选项都使用我们本地 IIS 服务器的相同虚拟目录,这可能会导致冲突。因此,如果您已安装这两个安装包并希望切换到在 VS2010 中运行示例,请务必先卸载这两个包,删除 IIS 中的两个虚拟目录,然后重启 IIS。

架构

在我们结束本文之前,让我们简要回顾一下此解决方案的结构。

要从头开始构建整个解决方案,我们首先会向一个空白解决方案添加一个新的“Silverlight 应用程序”。这将创建两个项目:一个名为“IssueVision.ST.Web”,另一个名为“IssueVision.ST”。出于个人偏好,我将项目“IssueVision.ST”重命名为“IssueVision.Client”,并在“属性”窗口中进行相同的“程序集名称”和“默认命名空间”更改。

Client”文件夹中的所有其他项目均添加为“Silverlight Class Library”项目,包括“IssueVision.Common”、“IssueVision.Data”、“IssueVision.Model”、“IssueVision.ViewModel”和“IssueVision.WCFService”。

Server”文件夹中的另外两个项目创建如下:项目“IssueVision.Data.Web”是一个“Class Library”项目,项目“IssueVision.ST_Sts”最初是一个“ASP.NET Empty Web Application”,并且模仿了Identity Developer Training Kit 中的一个示例。

项目 IssueVision.Data.Web

接下来,让我们仔细看看项目“IssueVision.Data.Web”是如何构建的。

EntityModel”文件夹包含 ADO.NET Entity Data Model EDM 文件以及两个 T4 模板文件,它们是增强版 ADO.NET 自跟踪实体生成器的一部分。而“Validation”文件夹则包含在实体类上定义的所有自定义验证逻辑。

要创建类似于“IssueVision.Data.Web”的新项目,我们需要先添加一个 ADO.NET Entity Data Model 项,并将其“Code Generation Strategy”(代码生成策略)设置为“None”。

之后,将这两个 T4 模板文件添加到此新项目中,将它们重命名为您喜欢的任何名称,将“inputFile”值设置为新 EDM 文件所在的位置,并将“namespaceName”设置为您选择的新命名空间。之后,我们要做的就是右键单击 T4 模板文件并选择“Run Custom Tool”(运行自定义工具)。这将根据新的 EDM 文件生成所有实体类。

项目 IssueVision.Data

项目“IssueVision.Data”包含服务器端自动生成的实体类以及 EDM 文件中定义的任何实体的仅客户端部分类。该项目被创建为“Silverlight Class Library”,因为我们不能从 Silverlight Application/Library 项目引用任何“Class Library”项目。我们的选择是共享源代码而不是 DLL。

与项目“IssueVision.Data.Web”类似,“IssueVision.Data”项目也有“EntityModel”和“Validation”文件夹。

EntityModel”文件夹包含对项目“IssueVision.Data.Web”中“IssueVisionModel.tt”文件的链接,而“Validation”文件夹包含对项目“IssueVision.Data.Web”相同“Validation”文件夹下所有文件的链接。我们可以轻松地添加一个链接,如下图所示:

第三个文件夹“ClientExtension”包含我们实体类的所有仅客户端逻辑。其中一个 T4 模板文件是“IssueVisionClientModel.tt”,它是增强版 ADO.NET 自跟踪实体生成器的客户端组件。在您自己的项目中工作时,请确保设置此 T4 模板的“inputFile”和“namespaceName”值,并单击“Run Custom Tool”,以便生成客户端实体类。

下一步

在本文中,我们回顾了设置环境、构建和运行此示例所需的所有必要步骤,并简要概述了解决方案架构。在第二部分中,我们将继续讨论如何使用自跟踪实体实现具有 AcceptChangesRejectChangesHasChanges 的更改跟踪。

希望您觉得本文有用,请在下方评分和/或留下反馈。谢谢!

历史

  • 2011 年 1 月 - 首次发布。
  • 2011年3月 - 更新以修复多个错误,包括内存泄漏问题。
© . All rights reserved.