Ron Jacobs 高级技术专员 Microsoft http://blogs.msdn.com/rjacobs SBP206 WF 4.0 A 初探 Ron Jacobs 高级技术专员 Microsoft http://blogs.msdn.com/rjacobs
Microsoft Confidential 8/11/2019 会议目标和效果 会议目标: 描述 WF 4.0 的好处 列出可以使用 WF 4.0 的场景 对比 WF 4.0 和 WF 3.5 流程是普遍使用的 可见性非常重要 工作流非常好 Microsoft Confidential © 2008 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
主机 (.exe、 IIS/WAS、 .NET Services……) WF 101 主机 (.exe、 IIS/WAS、 .NET Services……) WF 运行时 扩展 跟踪 持久性 … 工作流 WF 程序满足最低的要求 活动(Activities) 运动时(Runtime) 工具(Tooling) 活动 库 工具 VS Designer VS Debugger Rehosted Designer
WF 之道 Code Code 输入 Code 控制流 状态 Code Code 输入 控制流 状态 输入 void GetUser(string user) { // validate haven't gotten user yet bool haveUser = State.Get("haveUser"); if (haveUser) { throw new Exception(); } State.Set("haveUser", true); State.Set("User", user); } Code void GetUser(string user) { } 输入 State.Set("User", user); Code { string user = Console.ReadLine(); string password = Console.ReadLine(); Validate(user, password); } 控制流 控制流 状态 输入 状态 Code void GetPassword(string password) { bool haveUser = State.Get("haveUser"); if (!haveUser) { throw new Exception(); } string user = State.Get("User"); Validate(user, password); } Code void GetPassword(string password) { Validate(user, password); } 输入 string user = State.Get("User");
WF 如今面临的挑战 对纯 XAML 工作流提供有限的支持 版本化存在问题 复合困难或不可能 编写自定义活动和管理数据流不够简单 有限的 WCF 集成和活动支持 没有通用服务器主机环境 底线:获得足够的价值,使税收值得
转向 .NET 4.0 纯 XAML 工作流是新的默认值 扩展的基本活动库 简化的 WF 编程模型 支持参数、变量、表达式 WF、WCF 和 WPF 使用统一模型 扩展的基本活动库 简化的 WF 编程模型 支持参数、变量、表达式 对 WCF 集成进行了大量改进 运行时和设计器改进 通过 “Dublin“ 进行管理
纯 XAML 工作流 声明性工作流 在 XAML 文件中完整描述(无需后续编码) .NET 4.0 让它们成为“一等市民” 始终是 WF 终极目标 .NET 3.x 中有可能,但不容易 .NET 4.0 让它们成为“一等市民” 增强了编程模型,不再需要后续编码文件 Visual Studio 2010 中完整的设计器支持
声明性工作流的好处 程序定义只包含数据 增加寄存与部署灵活性 通常是一个可以轻松处理的 XML 文件 简化工具支持和设计器 可以随处存储(文件、DB、云等) 可以使用不同的格式表示 XAML、C#、Visio、自定义 DSL 等。 增加寄存与部署灵活性
扩展的基本活动库 .NET 4.0 带有一些新活动 流控制 WCF 其他 微软计划通过 CodePlex 发布更多活动 Flowchart ForEach DoWhile Break WCF Send Receive SendReply SendParameters ReceiveParameters CorrelationScope InitializeCorrelation … 其他 Assign MethodInvoke Persist Interop PowerShellCommand ... 微软计划通过 CodePlex 发布更多活动
新的流图表模型 Flowcharts 在序列化和状态机器模型中间提供一个折中方案 使用决策和开关简单的逐步模型 使您能返回到工作流中以前的活动
? ? ? 活动库的发展…… 活动系统 基本活动库 控制流活动 SharePoint Dynamics Systems Center HPC TFS 基本活动库 WCF Messaging Invoke Try/Catch Expressions Interop WF Primitives ? 控制流活动 Flowchart Sequential 自创 ?
简化的 WF 编程模型 WF 4.0 可以更加轻松的: 寄存工作流和运行工作流实例 管理工作流书签 创建自定义活动 管理数据和参数
创建自定义活动 .NET 4.0 重构了编程模型以创建自定义活动 从头开始创建自定义活动 从其他活动创建自定义活动 活动 WorkflowElement 从头开始创建自定义活动 活动 从其他活动创建自定义活动
WF 数据流 跨活动的流数据面临着挑战 管理活动状态也面临着挑战 WF 4.0 简化了数据流,它添加了: 需要依赖关系属性和数据绑定 大部分开发人员感觉不自然 管理活动状态也面临着挑战 无法在 XAML 定义本地存储器 WF 4.0 简化了数据流,它添加了: 参数、变量 和表达式
.NET 4.0 数据流结构 用于定义活动中数据流入流出的方式。InArgument<T>、OutArgument<T>、InOutArgument<T> 参数 用于声明指定的存储器,以及活动中数据的范围和生命周期。Variable<T> 变量 采用一个或多个输入参数,对输入参数执行一些运算,然后返回一个值。 表达式
表达式 表达式 带有输入参数,执行运算并返回结果 可以像活动一样使用表达式 源自 ValueExpression ValueExpression 源自 WorkflowElement 结果可以绑定到输入参数
Hands On Lab 5 Video
WCF 和 WF WF + WCF 中的强大潜力 “外事不决问 WCF,内事不决问 WF" .NET 3.0 不提供任何集成 .NET 3.5 添加初始 WCF 支持 .NET 4.0 在该领域进行了大量投资 “外事不决问 WCF,内事不决问 WF" WCF 公开外部接口 WF 描述内部流和状态转型
WCF 工作流服务 WCF 服务 WF 工作流 WCF 端点 客户端 外部服务 WCF 端点 外部服务
声明性 WCF 工作流服务 .NET 4.0 支持 XAML 中定义的 WCF 服务 整体服务在单个文件中定义
.NET 4.0 中的 WCF 活动 .NET 4.0 进入了几个新的 WCF 活动 .NET 3.5 发送 接收 .NET 4.0 SendReply SendParameters ReceiveParameters CorrelationScope InitializeCorrelation …
消息关联 发布和接收 WCF 消息时,关联是一个常见需求 WF 通过活动让关联轻松使用 .NET 3.5 根据上下文报头进行关联 .NET 4.0 向 WCF 添加关联支持 WF 通过活动让关联轻松使用 XPath 表达式确定关联令牌 CorrelationScope InitializeCorrelation
WF 运行时改进 10-100X 性能改进 通过持久性全面控制 流入事务 部分信任支持
全新的 WF 设计器 改进的设计器性能 改进的可用性 rehosting进行了大量改进 统一调试体验 (步进到 XAML)
托管工作流 托管工作流(Hosting workflows)如今面临诸多挑战 之后就要靠自己了 基本上都需要编写主机逻辑 .NET 3.5 引入了 WorkflowServiceHost 允许集成 IIS/WAS 之后就要靠自己了
引入 "Dublin" “Dublin” 向 IIS/WAS 提供 WF 托管和管理扩展 将随 Windows Server v.Next 一起发布 作为 Application Server 角色的一部分 因此,Windows Application Server Extensions
"Dublin" 关键功能 导入/导出应用程序 配置应用程序 管理运行的应用程序 更新运行的应用程序 监控运行的应用程序
SBP326 Dublin:Dublin 之旅 Dan Eshner 2 月 2 日,星期一 15:00 - 16:15 ……另请参见
WF 4.0 准备 您的 3.x 工作流可以继续工作 可以在 4.0 流程中使用 3.x 活动 关于如何准备 3.x 应用程序的指南即将发布 使用 Interop 活动 关于如何准备 3.x 应用程序的指南即将发布
Bob Schmidt 2 月 5 日,星期四 8:30 - 9:45 2 月 6 日,星期五 10:30 - 11:45 SBPCT310 WF 4.0:迁移 WF 3.0 / 3.5 的客户 Bob Schmidt 2 月 5 日,星期四 8:30 - 9:45 2 月 6 日,星期五 10:30 - 11:45 ……另请参见
记住 WF 是 ART 流程是普遍使用的 可见性非常重要 工作流非常好 活动、运行时和工具 任何应用程序都可以使用 WF 4.0 代码透明,工作流可见 工作流非常好 向我们的战略添加核心内容,用于模型驱动的业务逻辑发展
8/11/2019 5:14 PM © 2009 Microsoft Corporation。保留所有权利。Microsoft、Windows、Windows Vista 和其他产品名称是微软在美国和/或其他国家/地区的注册商标和/或商标。本文档仅用于提供信息,并代表再本文档发布 时微软的当前看法。因为微软必须响应不断变化的市场需求,所以本文档不应视为微软的承诺,并且在本文档发布之后,微软不保证提供信息的准确性。微软对本文档中的信息不提供任何明示或暗示的保证。 © 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.