演练:使用自上而下的方法设计应用程序系统

更新:2007 年 11 月

本演练指导您使用自上而下的方法设计应用程序系统。

在本演练中,您将完成下列任务:

  • 创建新的系统设计解决方案。

  • 将系统定义的行为作为 Web 服务进行表示和公开。

  • 为新的 Web 服务定义操作。

  • 向系统定义中添加两个新系统作为成员。

  • 重命名新系统。

  • 向系统定义的成员中添加 Web 服务。

  • 连接系统定义中的两个系统。

  • 将系统定义的行为委托给某个成员。

  • 继续设计系统定义的成员。

  • 实现基础应用程序定义。

创建新的系统设计解决方案

您将使用自上而下的方法开始设计系统。此任务可以通过创建一个新的系统设计解决方案来执行。默认情况下,此解决方案包含空白的系统关系图和应用程序关系图。系统关系图显示一个空白的系统定义。应用程序关系图显示作为成员添加到系统定义中的任何应用程序的定义。

创建新的系统设计解决方案

  1. 在“文件”菜单上,指向“新建”,然后单击“项目”。

    将出现“新建项目”对话框。

  2. 在“新建项目”对话框中,在“项目类型”下单击“分布式系统”。

  3. 在“模板”下,单击“系统设计”。

  4. 将解决方案命名为“StoreFrontSystem”。

  5. 输入保存该解决方案的位置。

Visual Studio 将创建该解决方案。系统设计器将打开并显示一个系统关系图。应用程序设计器将在后台打开应用程序关系图。

现在将系统定义的行为作为 Web 服务进行表示和公开。

将系统定义的行为作为 Web 服务进行表示和公开

您需要将系统定义的行为作为 Web 服务进行定义和公开。此任务可以通过向系统定义中添加一个 .NET Web 服务提供方终结点来执行。此操作还允许您将此系统连接到其他系统定义中的成员。

向系统定义中添加 Web 服务

  1. 单击系统关系图上的“StoreFrontSystem”。

  2. 在“关系图”菜单上,指向“添加”,再指向“终结点”,然后单击“.NETWebServiceEndpoint”。

    名为“WebService1”的 .NET Web 服务提供方终结点将出现在“StoreFrontSystem”上。

  3. 单击“StoreFrontSystem”上的“WebService1”。

  4. 在“视图”菜单上单击“属性窗口”。

    将出现“属性”窗口。

  5. 在“属性”窗口中,使用“名称”属性将该终结点命名为“CatalogService”。

    说明:

    向系统定义中添加某个终结点时,该终结点也将出现在其他系统定义对该定义的任何使用中。如果从系统定义中删除某个终结点,将从其他系统定义中对该定义的所有使用中删除该终结点。

现在为“CatalogService”定义 Web 服务操作及其参数。

为新的 Web 服务定义操作

您将使用“Web 服务详细信息”窗口为“CatalogService”Web 服务定义操作。操作描述 Web 服务的方法名称、参数以及其他与操作有关的信息。

说明:

默认情况下,Visual Studio 将系统定义上的 Web 服务终结点的语言设置为 Visual Basic。将终结点的行为委托给应用程序时,您将为此终结点选择实际的实现语言。

向 Web 服务终结点添加操作

  1. 单击“StoreFrontSystem”上的“CatalogService”终结点。

  2. 在“关系图”菜单上,单击“定义操作”。

    此时会出现“Web 服务详细信息”窗口。

  3. 在“Web 服务详细信息”窗口中,单击“<添加操作>”,添加一个名为“GetCatalog”的操作,然后按 Tab。

  4. 在“类型”框中,键入“Catalog”,然后按 Enter。

    说明:

    “Catalog”是您将终结点委托给 ASP.NET Web 应用程序并实现该应用程序后可以定义的自定义类型。

  5. 展开操作节点,单击“<添加参数>”,添加一个名为“CatalogName”的参数,然后按 Tab。

  6. 在“类型”框中,键入“String”,然后按 Tab。

    说明:

    当您开始在“类型”框中键入时,Visual Studio 将显示可用类型的列表。

  7. 在“修饰符”框中,选择“ByVal”,然后按 Enter。

现在向“StoreFrontSystem”中添加新成员。

向系统定义中添加两个新系统作为成员

您将向“StoreFrontSystem”系统定义中添加两个新系统作为成员。对于添加到系统定义中的每个新系统,Visual Studio 将在解决方案中添加一个新的系统关系图 (.sd) 文件。每个系统关系图包含每个新系统的定义。

向系统定义中添加新系统

  1. 单击系统关系图上的“StoreFrontSystem”。

  2. 在“关系图”菜单上,指向“添加”,再指向“系统”,然后单击“空白系统”。

    名为“System1”的新系统将作为成员出现在“StoreFrontSystem”中。新的系统关系图 (.sd) 文件将出现在解决方案中并在后台打开。

  3. 添加名为“System2”的第二个空白系统。

现在重命名这些新成员。

重命名新系统

您将重命名这两个新系统及其基础定义。

重命名新成员

  1. 单击“StoreFrontSystem”中的“System1”。

  2. 在“关系图”菜单上单击“重命名”。

    将出现“重命名”对话框。

  3. 在“重命名”对话框中,选中“重命名定义”复选框(如果尚未选中)。

  4. 在“成员名称”框中,将该成员命名为“OrderSystem”,然后单击“确定”。

    该成员及其定义将显示新名称。

    说明:

    Visual Studio 将不会更新包含基础定义的关系图文件的名称。

  5. 将“System2”重命名为“CatalogSystem”。

现在将成员的行为作为 Web 服务进行表示和公开。

向系统定义的成员中添加 Web 服务

您需要将“StoreFrontSystem”的一个成员的行为作为 Web 服务进行表示和公开。此任务可以通过向这个新成员中添加一个 .NET Web 服务提供方终结点来执行。此操作还允许您将该成员连接到“StoreFrontSystem”中的其他成员。

向成员中添加 Web 服务

  1. 单击“OrderSystem”系统。

  2. 在“关系图”菜单上,指向“添加”,然后单击“.NETWebServiceEndpoint”。

    名为“WebService1”的 .NET Web 服务提供方终结点将出现在“OrderSystem”及其基础定义中。

  3. 单击“OrderSystem”上的“WebService1”。

  4. 在“属性”窗口中,使用“名称”属性将该终结点命名为“OrderService”。

    说明:

    将某个终结点添加到成员中时,该终结点也将出现在该成员的基础定义中。该终结点还将出现在其他系统定义中对该定义的任何使用中。将某个终结点添加到成员中后,不能直接从该成员中移除该终结点。若要从成员中移除某个终结点,必须从该成员的定义中删除该终结点。此操作还将从对该定义的所有使用中移除该终结点。此要求强调对成员定义的这种更改如何影响该定义在其他系统定义中的使用。

现在定义“StoreFrontSystem”的成员之间的通信路径。

连接系统定义中的两个系统

您将定义部署时在系统定义的成员之间使用的通信路径。此任务可以通过连接“StoreFrontSystem”中的两个系统来执行。此连接将描述这两个系统之间的提供方和使用方关系。

连接系统定义的成员

  1. 单击“OrderSystem”上的“OrderService”终结点。

  2. 在“关系图”菜单上单击“连接”。

    随即出现“创建连接”对话框。

  3. 在“连接到”下,从“成员”列表中选择“CatalogSystem”,然后单击“确定”。

    “OrderSystem”和“CatalogSystem”之间将出现一个连接。“CatalogSystem”上还出现一个 Web 服务使用方终结点,该终结点已连接到“OrderService”。此使用方终结点还出现在“CatalogSystem”的基础定义中。

现在将“StoreFrontSystem”系统定义的行为委托给它的某个成员。

将系统定义的行为委托给某个成员

您将选择要在部署时提供系统定义行为的成员。此任务可以通过将系统定义的行为委托给它的某个成员来执行。具体而言,就是将“CatalogService”Web 服务的行为委托给“CatalogSystem”。此操作用代理终结点替代系统定义中的 Web 服务终结点。Web 服务终结点将再次出现在该成员上。两个终结点连接在一起。

说明:

Web 服务终结点还出现在“CatalogSystem”的基础定义中,因为该终结点变成了该成员定义的一部分。

将系统定义的行为委托给某个成员

  1. 单击“StoreFrontSystem”上的“CatalogService”。

  2. 在“关系图”菜单上单击“委托”。

    将出现“将行为委托给系统成员”对话框。

  3. 在“委托给”下,从“成员”列表中选择“CatalogSystem”,然后单击“确定”。

    “CatalogService”现在出现在“CatalogSystem”上。代理终结点出现在“CatalogService”以前所在的位置,并具有与其相同的名称。此代理终结点连接到“CatalogService”并向系统外部公开其行为。

继续设计系统定义的成员

您将继续设计“StoreFrontSystem”的成员。此任务可以通过向“CatalogSystem”和“OrderSystem”的定义中添加 ASP.NET Web 应用程序来执行。这些应用程序将提供这些系统定义的行为。然后您将这些系统定义的行为委托给这些应用程序。

继续设计系统定义的成员

  1. 单击系统关系图上的“CatalogSystem”。

  2. 在“关系图”菜单上单击“在系统设计器中打开”。

    将打开包含“CatalogSystem”的定义的系统关系图。

  3. 在“关系图”菜单上,指向“添加”,再指向“应用程序”,然后单击“ASP.NETWebService”。

    “CatalogSystem”内将出现一个名为“WebApplication1”的新 ASP.NET Web 应用程序。Visual Studio 还将此应用程序的定义添加到解决方案中的应用程序关系图上。

  4. 删除“WebService1”终结点。

  5. 将应用程序命名为“CatalogManager”。

  6. 单击“CatalogSystem”上的“CatalogService”,再单击“关系图”菜单上的“委托”。

    将出现“将行为委托给系统成员”对话框。

  7. 在“委托给”下,选择“CatalogManager”,然后单击“确定”。

    “CatalogService”现在出现在“CatalogManager”上。稍后您将实现“CatalogManager”的定义,以继续在代码中定义“CatalogService”的行为。

  8. 单击“CatalogSystem”上的使用方终结点。

  9. 将使用方终结点委托给“CatalogManager”。

    “CatalogManager”现在可以向“CatalogSystem”外部进行通信。

  10. 单击“StoreFrontSystem.sd”文档选项卡,以查看“StoreFrontSystem”的系统关系图。

  11. 对“OrderSystem”重复步骤 1-3,并将应用程序命名为“OrderManager”。

  12. 将“OrderService”终结点委托给“OrderManager”。

  13. 单击“StoreFrontSystem.sd”文档选项卡,以查看“StoreFrontSystem”的系统关系图。

现在,“CatalogSystem”中的“CatalogManager”应用程序与“OrderSystem”中的“OrderManager”应用程序通过各自系统上的代理终结点进行通信。此外,“CatalogManager”通过“StoreFrontSystem”上的代理终结点为该系统提供行为。

实现基础应用程序定义

您将继续定义“CatalogSystem”和“OrderSystem”的行为。执行此任务的方法是:首先连接“CatalogSystem”和“OrderSystem”的基础定义,然后实现这些基础定义。实现应用程序定义时,Visual Studio 将在您的解决方案中生成项目,使您可以继续在代码中定义它们的行为。

说明:

必须首先连接应用程序定义,才能实现它们。这样,Visual Studio 便可以正确生成任何所需的 Web 服务客户端代理类。

连接并实现应用程序定义

  1. 单击“StoreFrontSystem.ad”文档选项卡,以查看应用程序关系图。

    应用程序设计器将显示应用程序关系图,其中包含“CatalogManager”和“OrderManager”的应用程序定义。

  2. 将“CatalogManager”上的使用方终结点连接到“OrderManager”上的“OrderService”终结点。

    说明:

    当您连接到应用程序定义在系统定义中的使用位置时,Visual Studio 不会连接应用程序定义。应用程序关系图上的连接表示开发环境中的通信路径,而系统关系图上的连接表示部署环境中的通信路径。

  3. 在“属性”窗口中,将“CatalogManager”和“OrderManager”的“模板”属性设置为“ASP.NET Web 应用程序”。

  4. 在“关系图”菜单上指向“实现”,然后单击“实现所有应用程序”。

    Visual Studio 将在您的解决方案中生成对应的项目,使您可以继续在代码中定义“CatalogManager”和“OrderManager”。

请参见

参考

Architecture Edition 中的新增功能