Web服务软件工厂建模版本

上传人:M****1 文档编号:483921731 上传时间:2022-12-01 格式:DOC 页数:15 大小:272.05KB
返回 下载 相关 举报
Web服务软件工厂建模版本_第1页
第1页 / 共15页
Web服务软件工厂建模版本_第2页
第2页 / 共15页
Web服务软件工厂建模版本_第3页
第3页 / 共15页
Web服务软件工厂建模版本_第4页
第4页 / 共15页
Web服务软件工厂建模版本_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《Web服务软件工厂建模版本》由会员分享,可在线阅读,更多相关《Web服务软件工厂建模版本(15页珍藏版)》请在金锄头文库上搜索。

1、Web 服务软件工厂建模版本Gerardo de GeestandGerben van Loon代码下载位置: ServiceStation2008_Launch.exe (199 KB) Browse the Code Online 目录 数据约定模型 服务约定模型 ASMX 还是 WCF? 宿主模型 生成代码 自定义服务工厂 Enterprise Library 异常屏蔽 构建扩展 使用扩展 Web 服务软件工厂:建模版本也称为“服务工厂”,它是一个资源集合,这些资源可帮助您以简单有效的方式在 Windows Communication Foundation (WCF) 和 ASMX 中建

2、模和构建 Web 服务。与先前版本的服务工厂相比,最新版本使用的是模型,而先前版本使用的是基于 Guidance Automation Toolkit (GAT) 的向导。服务工厂现在允许您通过创建三种不同的模型来构建 Web 服务:数据约定模型、服务约定模型和宿主模型。我们将首先讨论这三种模型,然后再为您介绍如何自定义服务工厂。您可以在“在线服务工厂资源”侧栏中列出的网站内找到更多信息。使用 GAT 向导生成代码的主要缺点是在对生成的代码进行必要更改时会比较复杂。假设您想要重命名生成服务中的某个操作,您必须保存自定义代码,然后重做要在其中使用新名称或者在生成的代码中重命名操作的整个向导。重做

3、向导是一项耗时的工作;因为向导没有记忆,您必须重新指定全部内容。更改由向导生成的代码也不是理想的做法,因为您要返回去重新处理许多细节问题,而向导的目的恰恰是要避免这一点。模型为此问题提供了一种不错的解决方案,与向导相比,它可以记住您输入的内容。构建集成到 Visual Studio 中的建模语言在过去是一件很困难的事情,但是附带有 Visual Studio SDK 的 Domain-Specific Language (DSL) Tools 使此项工作变得非常容易。现在服务工厂附带了使用 DSL Tools 构建的三种模型。请注意,没有针对数据访问和服务安全的模型。先前版本服务工厂中的“数据

4、访问指导包”现在成为一个单独的工厂(称为存储库工厂),而“安全性指导包”也成为服务工厂社区站点单独的一个可用数据包。新版本的服务工厂还为如何构建自己的软件工厂提供了良好示例,因为它使用并组合了所有可用工具来构建一个: 用来生成项目并提供上下文菜单的向导 GAT 用于三种不同模型的 DSL Tools 支持交叉模型引用的 Designer Integration Service (DIS) 服务工厂源代码还包含一些有趣的库,这些库拥有目前工厂工具没有的一些功能。如果要构建自己的工厂,则重用以下各项内容可能会让您受益匪浅: 代码生成库,允许您在单独的文件中生成代码 交叉模型验证库,可协助您验证交叉

5、模型引用 Visual Studio 模拟对象库,可帮助您方便地对工厂进行单元测试 正如我们曾提到的,服务工厂由三种模型构成。在数据约定模型中,定义了 Web 服务的数据约定。在服务约定模型中,定义了服务、服务约定、操作以及消息。最后,宿主模型被用来建模服务端点和客户端代理。为了介绍工厂,我们将创建一个从 Peedy 的比萨饼店订购比萨饼的 Web 服务。此 Web 服务可以接受比萨饼订单,并允许您选购大小和浇头不同的比萨饼。提交订单后,会将订单价格返回给客户作为确认。数据约定模型在数据约定模型中,可同时建模不同种类的数据。除了定义基本类型作为约定元素外,您还可以定义集合、枚举以及错误约定。当

6、服务中出现某些错误时可以返回错误约定。在 Peedy 的比萨饼店的数据约定模型中,我们将 PizzaOrder 定义为客户要订购的比萨饼的集合。每个比萨饼都有大小和浇头。这是使用枚举来建模的。此外,我们还定义了错误约定 OutOfOrder,当订单上的比萨饼缺货时即会引发此约定,表明 Peedy 的比萨饼店因缺少某部分的浇头而无法交货。即使出现错误约定时也可以返回值。例如,本例中我们在任何情况下都要向用户显示订单价格。图 1 显示了完整的数据约定模型。图 1Peedy 比萨饼店的数据约定模型(单击该图像获得较大视图)服务约定模型数据约定在服务约定模型中使用。在本例中,要为 Peedy 比萨饼店

7、 Web 服务的服务约定和操作建模。模型(请参见图 2)实际上非常简单,因为我们只需要一个订购比萨饼的操作。图 2Peedy 的比萨饼店的服务约定模型(单击该图像获得较大视图)在服务约定模型中,每个操作可以最多有两个消息约定与之关联:一个用于请求消息,另一个用于响应消息。您可以通过右键单击某个消息约定来向其中添加部件。部件可以是基元类型(如 System.Decimal),也可以是数据约定(在数据约定模型中定义)。DSL 模型元素选择器(如图 3 所示)显示了项目中可供使用的所有数据约定。图 3选择数据约定ASMX 还是 WCF?在转到宿主模型之前,我们必须首先创建解决方案结构。它是一个项目组

8、,在其中将会生成 Web 服务的代码。我们必须在此时选择我们的实现技术。必须注意,在服务工厂中已经提供了两种技术(ASMX 和 WCF),您也可以使用自己的服务技术方便地对服务工厂进行扩展。我们的演示将使用 WCF。为了进行此选择,我们只需右键单击解决方案,图 4 所示的选项就会显示出来。我们选择菜单底部的“WCF Implementation Projects”(WCF 实现项目),服务工厂将创建数个项目,从模型生成的代码将会存储在其中。图 4创建 WCF 解决方案结构图 5 显示了生成的解决方案结构。注意,其中已生成了多种项目这可以使代码更易于管理。在讨论项目映射表的时候,我们还会更多涉及

9、此解决方案结构。图 5Peedy 比萨饼店的解决方案结构我们还需要指明在数据约定模型和服务约定模型中我们是想使用 ASMX 还是想使用 WCF。其中每个模型都有一个名为 Implementation Technology 的属性,可以将其设置为 ASMX、WCF 或您自定义的实现技术。设置了此属性后,模型中的许多实体都会获得一些特定于所选技术的新属性(请参见图 6a)。如您在图 6b 中所见,在选择了 WCF 作为实现技术后,WCF 设置类别被添加到了属性窗口中。这可以让我们选择 PizzaOrder 集合的类型。图 6a选择技术前图 6b选择技术后宿主模型宿主模型被用来建模 Web 服务端点

10、和客户端代理。此模型看上去与我们先前讨论的其他两种模型截然不同。此时,您可以通过在主机资源管理器中右键单击元素开始建模,而不是简单地将元素拖放到设计图面上。通过右键单击宿主模型元素,您可以添加新的主机和新的客户端,如图 7 所示。图 7向宿主模型中添加客户端和主机在添加了 PizzaHost 和 PizzaClient 后,即可为它们选择实现技术。我们已选择将它们均设置为 WCF。还必须为二者选择一个实现项目。幸运的是,服务工厂已经为我们生成了这些内容。正如您所见,解决方案结构中的 Tests 文件夹(如图 5 所示)包含了项目 PizzaService.Host 和 PizzaService

11、.Client。它们可以被用作实现项目。我们通过右键单击 PizzaHost 创建一个新的 ServiceReference。对于这个新的 ServiceReference,我们需要选择一个服务实现它是对我们服务模型的一个引用。我们可以采用与在图 2 中选择数据约定同样的方式来选择实现。对于创建的每个 ServiceReference,您都可以定义不同的端点。我们已经创建了一个名为 PizzaEndpoint 的端点,并已将其配置为使用 wsHttpBinding。由于我们已经有了一个端点,因此我们可以开始为客户端来创建代理。为了添加新代理,我们在主机资源管理器中右键单击 PizzaClien

12、t。利用代理属性窗口中的组合框,我们可以选择端点。图 8 显示了完整的宿主模型。图 8完整的比萨饼服务宿主模型生成代码在线服务工厂资源 Domain-Specific Language Tools Designer Integration Powertoy for Domain-Specific Language Tools Web 服务软件工厂 存储库工厂 Enterprise Library 现在比萨饼订购服务所需的所有模型均已定义完毕,我们已准备好开始生成服务。为此,我们首先必须填充每个模型的项目映射表字段(这可以在各个模型的属性窗口中进行定义)。选择此属性时,会弹出一个选择窗口。在本例

13、中,只有一个选项:PizzaService。这是因为所有角色都已在创建解决方案结构时定义完毕。这些角色可以在文件 projectmapping.xml 中找到,此文件也是我们解决方案结构的一部分。在此文件中,角色可以与项目建立关联。接下来要实际生成代码。右键单击数据约定模型,将会出现“Generate Code”(生成代码)选项。选择此选项将在 PizzaService.DataContracts 项目中生成数据约定。对服务约定模型执行同样的操作,该模型将会在 PizzaService.MessageContracts、PizzaService.ServiceContracts 以及 Pizz

14、aService.ServiceImplementation 项目中生成代码。宿主模型的代码生成分为两个步骤:一次是生成主机代码,一次是生成客户端代码。要生成主机代码,我们单击 PizzaService ServiceReference,Visual Studio 设计器会显示一个名为“Validate Model”(验证模型)的按钮。我们单击此按钮后,会正确验证模型,然后出现“Generate Service”(生成服务)按钮。单击此按钮,正如您猜想的那样,这将在 PizzaService.Host 项目中生成代码。现在为了生成客户端,我们首先必须运行主机,因此我们将编译 PizzaServ

15、ice.Host 项目并在 Web 浏览器中运行它。接下来我们在宿主模型中单击 PizzaProxy,然后单击生成代码。这将打开一个向导(如图 9 所示),利用它我们可以对客户端进行配置。在服务工厂自动填充服务地址的时候,我们可以继续操作,定义主机的安全设置。例如,如果要求连接到此服务时必须提供 X.509 证书,则我们可以使用此向导将其添加到客户端。图 9用于生成客户端的向导(单击该图像获得较大视图)此时,服务已准备就绪,您可以开始使用或在 IIS 中进行发布。您可以将此服务的业务逻辑和实体添加到 PizzaService.BusinessEntities 和 PizzaService.BusinessLogic 项目中。现在唯一需要做的是在 PizzaService.ServiceImplementation 项目中新建一个名为 PizzaServicePeedy 的局部类。它可以用来向生成的服务实现中添加业务逻辑。遗憾的是,如果我们直接编辑生成的代码,我们的逻辑会在下次生成代码时被覆盖。但是如果使用局部类则不会出现这种情况,因为生成器不会触动我们自行创建的文件。为了演示这一点,我们在 PizzaService.BusinessLogic 项目中定义了一个名为 PriceCalculator 的类和一个名为 CalculatePrice 的方法。(必须

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号