顺序工作流服务示例

本示例演示如何使用顺序工作流创建工作流服务。本示例演示如何就地创建服务协定,这是一个称为工作流优先模式的服务创作方法。示例创建一个 ICalculator 协定,并在生成工作流时在工作流中实现该协定。

提示

此示例需要安装 .NET Framework 3.5 版才能生成和运行。若要打开项目和解决方案文件,需要使用 Visual Studio 2008。

作为工作流实现计算器具有以下好处:

  • 您可以启动一个能自动保存工作流状态的长期运行的进程。这意味着当您重新启动工作流服务时,客户端可以与服务的同一个实例通信。
  • 强制执行协定中的应用程序级协议。如果在此服务上意外调用了某个操作,工作流会引发异常。

顺序工作流服务示例

在此工作流中,PowerOn Receive 活动具有名为 CanCreateInstance 的属性,此属性标记为 true。这意味着当客户端调用 PowerOn 操作时将创建此服务的实例。客户端接收上下文作为对此操作的答复的一部分。自此以后,可以调用工作流中的任何其他操作。对于客户端调用的每个操作,都将在通道上发送上下文,因此操作可以路由到正确的实例。当调用 PowerOff 操作时,会设置一个布尔值,它可使工作流退出 while 循环。

以下示例代码演示在服务项目的 Program.cs 文件中实现的 WorkflowServiceHost 调用模式。

WorkflowServiceHost workflowHost = new WorkflowServiceHost(typeof(Microsoft.WorkflowServices.Samples.SequentialCalculatorService));
workflowHost.Open();

在上面的示例代码中,WorkflowServiceHost 的构造函数将工作流类型作为输入,并打开此类型以侦听消息。

本示例还包含一个客户端应用程序,它调用计算器服务上的操作。客户端应用程序是一个顺序工作流并进行一系列操作调用。客户端工作流使用 Send 活动来调用工作流上的操作。客户端项目包含对 ICalculator 服务的引用,Send 活动可以使用此服务来显示用于从中选择要调用的相应操作的界面。

设置、生成和运行项目

  1. 执行在 One-time Setup Procedure for Windows Communication Foundation Samples中列出的设置说明。

  2. 若要安装永久性提供程序,请运行位于 One-Time Setup Procedure for the Windows Communication Foundation Samples主题中的 CreateStores.cmd 脚本。

  3. 本示例使用 NetFx35Samples_ServiceWorkflowStore 数据库。它不包括客户端工作流的持久性存储区。本示例假定您使用 SQL Server Express,并在其中安装数据库。如果您选择在 SQL Server 中安装数据库,请更改 App.config 文件中的连接字符串。

  4. 如果不想使用永久性提供程序,请在 App.config 文件中注释掉 <WorkflowRuntime> 节。

  5. 以 Administrators 组中用户的身份运行示例。如果您使用的是 Windows Vista,请右键单击客户端可执行文件,然后单击**“以管理员身份运行”**。

  6. 一旦应用程序开始运行,客户端工作流即会发送一组计算器操作,然后完成工作流。您可以按 Enter 来发送另一组计算器操作。

  7. 若要测试此服务的长期运行性质,请在客户端应用程序中设置一个断点。在 Visual Studio 中到达该断点时,关闭然后重新启动服务应用程序。在客户端上释放断点。客户端工作流将与服务上的同一个工作流实例通信。您可能还希望将示例分解成两个解决方案以测试服务的回收。

在不同计算机上运行示例

  1. 编辑服务和客户端的配置文件,确保更改终结点地址中的服务器名。将服务器名从 localhost 更改为要在其上运行服务的计算机名称。

  2. 由于服务使用端口 8888,因此您必须在防火墙中打开此端口。从 Windows 控制面板中,单击**“Windows 防火墙”。单击“添加端口”,然后添加端口 8888。也可以在默认端口上运行该服务。为此,请从终结点地址中移除“:8888”**。

  3. 编辑客户端配置文件并添加下面的元素作为 <endpoint> 元素的子级。

    <identity>
        <UserPrincipalName value=”*@<Domain Name in which your server is running” />
    </identity>
    

    若要确定域名,请在要运行服务的计算机上启动该服务。在另一台计算机的命令提示窗口中,运行下面的命令。

    svcutil.exe http://<serverName>:8888/servicehost/Calculator.svc

    此命令生成一个 .cs 文件和一个 output.config 文件。在配置文件的 <endpoint> 元素中,将 <identity> 元素复制到您的客户端配置文���中。

向 Microsoft 发送对本主题的评论。