搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
WF高级程序设计
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787115212412
  • 作      者:
    (美)Bruce Bukovics著
  • 出 版 社 :
    人民邮电出版社
  • 出版日期:
    2009
收藏
编辑推荐
    一场高级程序设计的丰盛大宴,深入WF精髓,满足你无限的求知欲,分析透彻的丰富示例,手把手教你设计绝活。<br>    WF作为.NET的一部分,是微软为开发人员提供的强大工作流开发框架,它更代表了一种开发应用程序的全新模式。它可以清晰地将工作内容和工作时间分隔开来,使你改变工作流模型而不会影响到工作内容。<br>    本书被誉为不可多得的经典之作,内容全面,结构合理,各章彼此连贯又可独立阅读,极具灵活性。书中丰富的代码实例,深入浅出地阐明了使用WF技术所需要理解和掌握的技术细节。<br>    “若想了解WF,本书是必读之物。本书涉及面之广,所讲内容之深是同类书籍所无法企及的。强烈推荐给每一位想了解WF的人,它真的很棒!”<br>    ——Amazon.com
展开
作者简介
    Bruce Bukovics,Radiant系统公司核心开发团队的首席开发人员和架构师,拥有近30年网络开发经验,精通C、C++、Delphi、VB、C#和Java等多种编程语言,亲身经历了从COM和COM+,以及从Web服务到.NET远程处理等技术的改革浪潮。<br>    译者简介:<br>    柴晓伟,微软最有价值专家(MVP),擅长WF开发和Web前端开发,熟悉Web标准和H丁ML、CSS~~JavaScript等相关技术,技术博客地:http://coding.windstyle.cn。~
展开
内容介绍
    《WF高级程序设计》全面介绍了WF高级程序设计。WF不仅是实现用户界面的新方法,也是在应用程序和服务之间通信的新方法,更是一种体现了开发应用程序的全新方式。全书围绕如何在应用程序中整合WF展开讨论,主要涵盖WF基础知识、承载工作流运行时、流控制、本地服务、工作流持久性,状态机工作流、异常和错误处理、动态工作流更新,以及在Web服务和ASP.NET开发中使用工作流等内容。另外,《WF高级程序设计》示例丰富,最大程度地阐明了使用WF技术所需要掌握的方方面面。<br>    《WF高级程序设计》适合希望在自己的应用程序中使用WF的所有.NET开发人员。
展开
精彩书评
    “若想了解WF,本书是必读之物。本书涉及面之广,所讲内容之深,是同类书籍所无法企及的。强烈推荐给每一位想了解WF的人,它真的很棒!”<br>    ——Amazon.com
展开
精彩书摘
    第1章 WF快速入门<br>    本章会对WF作一个简短的介绍,但不会深入讲解任何主题。本章的目的是让大家对这些主题有个大概的印象,完整的介绍请阅读随后的其他章节。<br>    通过阅读本章的内容,你将了解到工作流为何重要以及为何需要使用工作流来开发应用程序,并将会动手实现第一个功能性的工作流。另外,本章还有一些动手的示例,它们会演示WF的其他功能。<br>    1.1  为什么需要工作流<br>    作为开发人员,我们的工作是解决真实的业务问题。业务问题根据业务本身的类型和复杂性会变得非常宽泛。但是不管给定问题的复杂性如何,我们总是倾向于以同样的方式解决问题:把问题分解为可管理的部分,再把这些部分分解为更小的任务,依此类推。<br>    当最后每个任务的大小都恰好理解和管理时,就把这些需要完成的任务标识为步骤。这些步骤通常按照一定的顺序相互关联,用来表示由单独指令组成的序列,并且只有当它们按照正确的顺序执行时才会产生期望的行为。<br>    在传统的编程模型中,可以选择一种开发语言,然后用代码实现一个任务。这段代码指定了这些指令的序列(控制流)将要做的事情(执行指令)。也可以在代码中基于变量值、事件接收和应用程序当前状态来制定决策(规则)。<br>    工作流只是由步骤组成的有序序列,而这些步骤需要根据一组规则来实现一些明确的目的。根据这一定义,上一段中描述的就是工作流。<br>    工作流可以全部在代码中定义,但要知道工作流并不只有这一种类型。我们每天开发软件时其实已经在使用工作流了。也许我们并没有考虑过在工作中使用工作流,但事实上我们已经在无意识的情况下使用了工作流。<br>    那么这些讨论为什么都针对工作流?我为什么要写这本关于工作流的书?而你又为什么要读这本书?以下就是答案。<br>    1.1.1  工作流各不相同<br>    当然,之前我给出的工作流定义并不能涵盖所有情形,而且的确还有更多的情形。对开发人员来说,工作流这个词仿佛是用魔法变幻出来的一幅具有高度可视化环境的画面,在这个环境中形象地声明了复杂的业务规则和控制流,并且在该环境中你可以轻松地构思并建模已经声明为解决问题的活动(步骤)。而且,因为你可以构思这些活动,那么也就可以轻松地改变、增强并自定义它们。<br>    但相对开发环境来说,工作流还有很多内容。工作流体现了一种不同的编程模型。这是一种可以清晰地分离工作内容和工作时间的模型。这种分离允许更改工作时间,但不会影响工作内容。工作流通常使用一种声明性的而非过程性的编程模型。通过该模型,业务逻辑可以封装为离散的组件,但是在组件之间用来管理流控制的规则仍然是声明性的。<br>    显然,可以用诸如C#或Visual Basic这样的通用语言来解决业务问题。但工作流编程模型真正允许实现自己特定领域的语言。使用特定领域的语言,你可使用该领域的常见术语来表示业务逻辑。该领域的专家能够查看工作流并且轻松地理解它,就是因为它是使用他们能够理解的术语来声明的。<br>    例如,如果你所在的领域是银行和金融,那么大概会涉及账户、支票、贷款、借方、贷方、客户、出纳员、分行等术语。但是如果把问题领域换成比萨外卖,以上术语就没有多大意义了。此时应该使用诸如菜单、特价、配料、地址、电话号码、司机、小费等术语来建模这个问题。工作流模型允许使用适合于每个问题领域的术语来定义问题。<br>    工作流使你轻松地建模系统和人类的交互。系统交互是作为开发人员的我们解决问题的典型方式。你可以定义需要执行的步骤,并编写代码来控制这些步骤的序列。这些代码始终是完全可控的。<br>    人类交互涉及了现实生活中的人。问题是这些人并不总是像代码一样可以预料。例如,需要建模抵押贷款的应用程序。整个过程包含的所有步骤必须都让真人按顺序执行到最后。你对这些步骤顺序的控制力有多少?是先信用审批,还是先财产估价?那么属性调查呢,它应该在财产估价之前还是之后进行?在可以计划贷款关闭之前还有什么活动必须完成?这些问题的关键在于使用纯过程模型很难表示它们,因为还需要控制人类。准确的步骤顺序并不总是可预料的。当使用工作流来解决人类交互问题时,工作流模型才真正地大放异彩。<br>    1.1.2  为什么选择WF<br>    我们已经了解了工作流的重要性,那么为什么要选择WF呢?微软提供了这个基础结构是为了简化并增强.NET开发。它不是独立的应用程序,而是旨在为应用程序启用工作流的软件基础结构。无论开发的是什么类型的应用程序,WF都有你可以利用的东西。<br>    如果开发业务线应用程序,可以使用WF来组织业务规则;如果应用程序由一系列人类交互组成,可以使用WF状态机工作流来实现可以反应这些交互的逻辑;如果需要高度定制化的应用程序,可以使用WF工作流的天性--声明性,来将业务逻辑和执行流分离开来。这就使得对控制流的定制不会影响到底层的业务逻辑。如果需要更好的方式来封装并独立地测试应用程序逻辑,还可以将逻辑实现为可以在WF运行时环境中执行的离散自定义活动。<br>    有充分的理由来使用WF,下面是其中一部分。<br>    它提供了灵活并且强大的框架来开发工作流。你可以花费时间和精力来开发自己的框架、可视化工作流设计器和运行时环境。也可以使用微软提供的这个基础结构来解决真实的业务问题,并且可以节省宝贵的时间。<br>    它推动了一种开发应用程序的一致的方式。每个工作流都非常类似。无论是开发新的应用程序,还是可视化地维护已经存在的应用程序,这种在编程模型和工具中的一致性都能改善你的工作率。<br>    它支持顺序和状态机工作流。顺序工作流通常用来和系统交互,状态机工作流则适合解决人类交互的问题。<br>    它支持工作流持久性。工作流持久性能够保存运行中的工作流的状态,并在稍后重新加载它。在设计人类交互工作流和其他潜在的长时间运行的工作流时,这个功能尤为重要。<br>    它支持使用域特定模型解决问题。微软鼓励你开发自定义活动组件。每个自定义组件针对的问题都特定于该问题领域并且使用了该领域的常用术语。<br>    它提供了完整的工作流生态系统。除了工作流运行时本身,微软还提供了一组标准活动、工作流持久性、工作流监控和跟踪、规则引擎和集成到Visual Studio中的工作流设计器,也可以将它们嵌入到你的应用程序中。<br>    它具有无限扩展性。微软提供了许多扩展点来允许修改WF的默认行为。例如,如果WF提供的标准SQL持久性服务不能满足要求,就可以自己实现一个。<br>    它内置于Visual Studio中,并且在应用程序中使用它并不需要额外的许可费。正因如此,它实际上已经成为了针对Windows开发人员的标准工作流框架。不断壮大的WF开发人员社区中时常会有人分享他们的想法、自定义活动和其他代码。<br>    1.2  开发环境<br>    WF最初作为.NET 3.0的一部分,开发环境则是以Visual Studio 2005插件的形式提供的。现在Visual Studio 2008已经内置了对WF的支持(不再需要插件了),而且.NET 3.5还包含了一些新的WF功能,例如对工作流服务的支持。<br>    为了使用WF开发应用程序,需要安装一些软件。至少包括:<br>    Visual Studio 2008专业版、标准版或Team System版;<br>    .NET 3.5运行时(会与Visual Studio同时安装)。<br>    Visual Studio 2008和.NET 3.5的集成版允许使用WF的所有最新功能,而且安装很方便。<br>    另外,可以继续使用Visual Studio 2005和.NET 3.0来进行WF开发。但如果这样做,就会受到限制而只能使用WF最初版本中的功能。使用Visual Studio 2005和.NET 3.0进行WF开发至少需要:<br>    Visual Studio 2005企业版、专业版或标准版;<br>    .NET 3.0运行时;<br>    支持WF的Windows SDK;<br>    Visual Studio的WF插件。<br>    请浏览微软MSDN网站来下载并安装这些软件的最新版本。<br>    说明 除非另外注明,所有的WF功能和类都包含于.NET 3.0和.NET 3.5中。但是,任何关于WF开发环境的描述都会参照Visual Studio 2008,本书的所有截图也都是使用Visual Studio 2008生成的。<br>    1.3  Hello Workflow<br>    现在已经做好了创建第一个工作流的准备。在我们所工作的技术世界中,以“Hello World”为示例来开始学习新技术已经成为一种惯例。<br>    不想打破这个传统,所以下面我将介绍一个"Hello Workflow"示例。如果按照这个示例的步骤逐步完成,你就会拥有一个真正简单且实用的工作流应用程序。<br>    在本示例和本章的其他示例中,我会介绍一些重要概念它们是使用所有工作流的基础,不管这些工作流多么复杂。如果已经有WF的使用经验,你可能觉得必须跳过这些内容。那么,你可以这样做,但我建议至少应该快速浏览一遍本章的内容。<br>    为了实现“Hello Workflow”示例,需要创建一个顺序工作流项目,在工作流中添加一个标准活动,然后添加代码以在控制台中显示“Hello Workflow”。
展开
目录
第1章  WF快速入门  1<br>1.1  为什么需要工作流  1<br>1.1.1  工作流各不相同  1<br>1.1.2  为什么选择WF  2<br>1.2  开发环境  3<br>1.3  Hello Workflow  3<br>1.3.1  创建工作流项目  4<br>1.3.2  工作流设计器  6<br>1.3.3  使用工作流活动  6<br>1.3.4  输入代码  7<br>1.3.5  承载工作流运行时  8<br>1.3.6  运行应用程序  10<br>1.4  传递参数  10<br>1.4.1  声明属性  11<br>1.4.2  在运行时中传递值  11<br>1.5  作出决策  13<br>1.5.1  创建工作流库  13<br>1.5.2  添加工作流属性  13<br>1.5.3  添加IfElse活动  14<br>1.5.4  添加计算逻辑  17<br>1.5.5  创建计算器客户端  19<br>1.5.6  测试和调试计算器  23<br>1.6  小结  25<br><br>第2章  基础结构概述  26<br>2.1  工作流类型  26<br>2.1.1  顺序工作流  26<br>2.1.2  状态机工作流  26<br>2.1.3  选择工作流类型  27<br>2.2  基础结构交付项  28<br>2.2.1  类库和基础结构  28<br>2.2.2  运行时引擎  29<br>2.2.3  运行时服务  30<br>2.2.4  设计时工具  30<br>2.2.5  .NET 2.0运行时  30<br>2.3  运行时环境  30<br>2.3.1  应用程序宿主进程  31<br>2.3.2  运行时引擎  32<br>2.3.3  已注册的核心服务  33<br>2.3.4  已注册的本地服务  36<br>2.3.5  工作流实例  37<br>2.4  设计时环境  39<br>2.4.1  工作流创作模式  39<br>2.4.2  项目模板  40<br>2.4.3  工作流设计器  41<br>2.4.4  活动设计器  45<br>2.4.5  规则条件编辑器  46<br>2.4.6  Ruleset编辑器  48<br>2.4.7  工作流调试器  51<br>2.4.8  命令行工作流编译器  51<br>2.4.9  命令行通信活动生成器  52<br>2.5  小结  52<br><br>第3章  活动  53<br>3.1  理解活动  53<br>3.1.1  活动的两个访问者  53<br>3.1.2  类层次结构  54<br>3.2  探讨标准活动  55<br>3.2.1  自定义工作流逻辑  55<br>3.2.2  流控制  55<br>3.2.3  状态管理  57<br>3.2.4  事件处理  58<br>3.2.5  本地服务通信  59<br>3.2.6  规则  59<br>3.2.7  Web服务  59<br>3.2.8  工作流服务  60<br>3.2.9  事务、补偿和同步  61<br>3.2.10  异常和错误处理  62<br>3.3  标准活动摘要  62<br>3.4  添加工作流逻辑  64<br>3.5  使用CodeActivity  64<br>3.5.1  创建项目  65<br>3.5.2  定义工作流参数  65<br>3.5.3  验证账户  69<br>3.5.4  验证产品  70<br>3.5.5  录入订单  70<br>3.5.6  运行工作流  74<br>3.5.7  总结此方法  77<br>3.6  开发自定义活动  77<br>3.6.1  为什么使用自定义活动  77<br>3.6.2  两种访问者的设计  78<br>3.6.3  创建项目  78<br>3.6.4  实现账户验证活动  78<br>3.6.5  实现产品验证活动  82<br>3.6.6  实现订单录入活动  84<br>3.6.7  定义工作流参数  87<br>3.6.8  定义工作流  88<br>3.6.9  运行工作流  92<br>3.6.10  总结此方法  95<br>3.7  增强设计体验  96<br>3.7.1  验证活动  96<br>3.7.2  自定义工具箱行为  100<br>3.7.3  自定义设计器  104<br>3.8  小结  108<br><br>第4章  承载工作流运行时  109<br>4.1  承载概述  109<br>4.2  简单的工作流承载  110<br>4.2.1  实现测试工作流  110<br>4.2.2  实现简单宿主应用程序  112<br>4.3  改进的工作流承载  117<br>4.3.1  实现工作流实例包装  117<br>4.3.2  实现工作流管理器类  119<br>4.3.3  承载工作流管理器  127<br>4.3.4  通过App.config配置运行时  133<br>4.4  控制工作流实例  136<br>4.5  同步的工作流执行  139<br>4.6  小结  142<br><br>第5章  流控制  143<br>5.1  条件类型  143<br>5.2  使用IfElseActivity  144<br>5.2.1  使用代码条件的IfElseActivity  144<br>5.2.2  使用规则条件的IfElseActivity  150<br>5.3  使用WhileActivity  153<br>5.3.1  实现工作流  153<br>5.3.2  测试工作流  156<br>5.4  使用ParallelActivity  158<br>5.4.1  实现工作流  159<br>5.4.2  测试工作流  162<br>5.4.3  添加DelayActivity  164<br>5.5  使用ReplicatorActivity  165<br>5.5.1  实现顺序工作流  166<br>5.5.2  测试顺序工作流  169<br>5.5.3  实现并行工作流  170<br>5.5.4  测试并行工作流  174<br>5.5.5  使用ReplicatorActivity事件  176<br>5.5.6  中断执行  176<br>5.6  使用ConditionedActivityGroup  176<br>5.6.1  实现工作流  177<br>5.6.2  测试工作流  180<br>5.7  使用InvokeWorkflowActivity  182<br>5.8  使用TerminateActivity  183<br>5.9  使用SuspendActivity  183<br>5.10  小结  183<br><br>第6章  本地服务  184<br>6.1  了解本地服务  184<br>6.1.1  实现本地服务  185<br>6.1.2  使用本地服务  185<br>6.2  实现并使用本地服务  186<br>6.2.1  实现账户类  186<br>6.2.2  声明服务约定  186<br>6.2.3  实现本地服务类  187<br>6.2.4  实现工作流  188<br>6.2.5  测试工作流  191<br>6.3  从App.config加载  193<br>6.4  使用自定义活动  195<br>6.4.1  实现自定义活动  195<br>6.4.2  修改工作流  198<br>6.4.3  测试工作流  199<br>6.5  使用CallExternalMethodActivity  199<br>6.5.1  实现工作流  199<br>6.5.2  测试工作流  201<br>6.6  小结  201<br><br>第7章  事件驱动活动  202<br>7.1  使用事件驱动活动  202<br>7.2  使用HandleExternalEventActivity  203<br>7.2.1  创建项目  204<br>7.2.2  实现事件参数类  204<br>7.2.3  定义服务接口  205<br>7.2.4  实现本地服务  206<br>7.2.5  实现工作流  209<br>7.2.6  实现宿主应用程序  213<br>7.2.7  测试工作流  217<br>7.3  生成通信活动  218<br>7.3.1  生成活动  218<br>7.3.2  修改工作流  219<br>7.4  手动控制关联  220<br>7.4.1  实现事件参数类  221<br>7.4.2  定义服务接口  221<br>7.4.3  实现本地服务  222<br>7.4.4  实现工作流  223<br>7.4.5  测试工作流  225<br>7.5  使用EventHandlingScopeActivity  227<br>7.5.1  定义服务接口  228<br>7.5.2  实现本地服务  228<br>7.5.3  实现工作流  230<br>7.5.4  测试工作流  234<br>7.6  开发自定义事件驱动活动  236<br>7.6.1  了解工作流队列  237<br>7.6.2  事件驱动活动的需求  238<br>7.6.3  实现ProcessGuessActivity  239<br>7.6.4  实现SendHintActivity  246<br>7.6.5  修改工作流  248<br>7.6.6  修改宿主应用程序  249<br>7.6.7  测试工作流  252<br>7.7  小结  253<br><br>第8章  工作流持久性  254<br>8.1  了解持久性  254<br>8.1.1  持久化工作流的原因  254<br>8.1.2  持久性概述  255<br>8.2  使用SqlWorkflowPersistenceService  256<br>8.2.1  为持久性准备数据库  257<br>8.2.2  实现本地服务  257<br>8.2.3  实现工作流  259<br>8.2.4  实现宿主应用程序  261<br>8.2.5  测试应用程序  271<br>8.3  实现自定义持久性服务  273<br>8.3.1  了解抽象方法  274<br>8.3.2  实现服务  276<br>8.3.3  测试自定义服务  282<br>8.4  小结  284<br><br>第9章  状态机工作流  285<br>9.1  了解状态机  285<br>9.1.1  为什么需要状态机工作流  285<br>9.1.2  状态机概述  286<br>9.2  实现状态机工作流  290<br>9.2.1  设计CarStateMachine  290<br>9.2.2  定义本地服务接口  291<br>9.2.3  实现本地服务  292<br>9.2.4  实现工作流  295<br>9.2.5  实现宿主应用程序  302<br>9.2.6  测试应用程序  308<br>9.3  消除重复的事件处理程序  309<br>9.3.1  重构CarWorkflow  309<br>9.3.2  测试修改后的工作流  310<br>9.4  标识现有事件  311<br>9.4.1  询问工作流队列  311<br>9.4.2  修改CarStateMachine  311<br>9.4.3  测试应用程序  313<br>9.5  访问工作流运行时信息  314<br>9.5.1  修改CarStateMachine  314<br>9.5.2  测试应用程序  316<br>9.6  小结  316<br><br>第10章  事务和补偿  317<br>10.1  事务  317<br>10.1.1  事务的方式  317<br>10.1.2  WF对事务的支持  318<br>10.2  使用TransactionScopeActivity  319<br>10.2.1  实现AccountAdjustment-Activity  322<br>10.2.2  实现AccountTransfer-Workflow  326<br>10.2.3  测试工作流  329<br>10.3  了解补偿  334<br>10.4  使用可补偿活动  335<br>10.4.1  实现InventoryUpdate-Activity  335<br>10.4.2  实现OrderDetailActivity  339<br>10.4.3  实现OrderEntryWorkflow  344<br>10.4.4  测试工作流  350<br>10.5  参与工作批次  353<br>10.6  使用IPendingWork接口  353<br>10.6.1  实现本地服务  354<br>10.6.2  实现BatchedWorkWorkflow  356<br>10.6.3  测试工作流  357<br>10.7  小结  359<br><br>第11章  工作流规则  361<br>11.1  了解工作流规则  361<br>11.1.1  规则的组成  362<br>11.1.2  使用规则的原因  362<br>11.2  在WF中使用规则  363<br>11.2.1  定义规则  363<br>11.2.2  定义规则集  366<br>11.2.3  使用特性来标识依赖项  368<br>11.3  使用PolicyActivity来定义规则  369<br>11.3.1  实现SalesItem类  369<br>11.3.2  声明规则  370<br>11.3.3  测试工作流  375<br>11.4  跟踪规则  379<br>11.5  调整规则顺序  381<br>11.5.1  设置规则优先级  381<br>11.5.2  测试工作流  381<br>11.6  在规则中使用方法  383<br>11.6.1  添加操作方法  383<br>11.6.2  在规则集中使用方法  384<br>11.6.3  标识间接关系  385<br>11.7  在代码中执行规则集  386<br>11.7.1  实现SellItemSerialized-Workflow  386<br>11.7.2  测试工作流  389<br>11.8  在代码中构造规则集  389<br>11.8.1  实现SellItemInCode-Workflow  389<br>11.8.2  测试工作流  392<br>11.9  小结  393<br><br>第12章  异常和错误处理  394<br>12.1  理解工作流异常处理  394<br>12.2  探讨默认行为  396<br>12.2.1  实现ExceptionWorkflow  396<br>12.2.2  测试工作流  398<br>12.3  使用FaultHandlerActivity  400<br>12.3.1  处理ArithmeticException  400<br>12.3.2  处理DivideByZeroException  403<br>12.4  抑制异常  405<br>12.5  重新抛出异常  407<br>12.6  补偿和异常  408<br>12.6.1  实现CompensateWorkflow  408<br>12.6.2  测试工作流  410<br>12.7  使用CancellationHandlerActivity  412<br>12.7.1  实现CancelHandler-Workflow  412<br>12.7.2  测试工作流  414<br>12.8  小结  414<br><br>第13章  高级自定义活动  415<br>13.1  开发专用的复合活动  415<br>13.1.1  开发自定义活动  416<br>13.1.2  开发工作流  417<br>13.1.3  测试活动  418<br>13.2  开发通用的复合活动  420<br>13.2.1  了解活动执行计划  420<br>13.2.2  复合活动的执行模式  421<br>13.2.3  实现顺序活动  422<br>13.2.4  实现测试工作流  426<br>13.2.5  测试顺序活动  428<br>13.3  开发优先级顺序活动  429<br>13.3.1  实现优先级顺序活动  429<br>13.3.2  实现扩展提供程序  432<br>13.3.3  实现自定义设计器  434<br>13.3.4  实现测试工作流  435<br>13.3.5  测试优先级顺序活动  436<br>13.4  开发长时间运行的活动  436<br>13.4.1  实现本地服务  437<br>13.4.2  实现自定义活动  440<br>13.4.3  实现测试工作流  443<br>13.4.4  测试长时间运行的活动流  443<br>13.5  小结  445<br><br>第14章  动态工作流更新  446<br>14.1  了解动态更新  446<br>14.1.1  使用动态更新的原因  447<br>14.1.2  应用动态更新  447<br>14.1.3  防止动态更新  448<br>14.2  从宿主应用程序中应用更新  449<br>14.2.1  实现DynamicWorkflow  449<br>14.2.2  实现自定义活动  450<br>14.2.3  实现宿主应用程序  452<br>14.2.4  测试工作流  456<br>14.3  限制动态更新  456<br>14.4  从工作流中应用更新  458<br>14.4.1  实现SelfUpdatingWorkflow  458<br>14.4.2  实现宿主应用程序  461<br>14.4.3  测试工作流  462<br>14.5  更新规则条件  463<br>14.5.1  实现DynamicCondition-Workflow  463<br>14.5.2  实现宿主应用程序  464<br>14.5.3  测试工作流  468<br>14.6  替换规则条件  468<br>14.6.1  修改RuleDefinitions  468<br>14.6.2  修改宿主应用程序  470<br>14.6.3  测试修改后的应用程序  472<br>14.7  小结  472<br><br>第15章  工作流跟踪  473<br>15.1  了解工作流跟踪  473<br>15.1.1  跟踪服务  473<br>15.1.2  跟踪事件类型  474<br>15.1.3  自定义跟踪配置  475<br>15.1.4  使用跟踪数据  475<br>15.1.5  受益于工作流跟踪  476<br>15.2  使用SqlTrackingService  476<br>15.2.1  准备跟踪SQL数据库  477<br>15.2.2  开发测试工作流  477<br>15.2.3  开发宿主应用程序  479<br>15.2.4  执行宿主应用程序  481<br>15.2.5  获取跟踪数据  482<br>15.3  创建用户跟踪点  489<br>15.3.1  增强TrackingExample-Workflow  490<br>15.3.2  测试修改后的工作流  490<br>15.4  跟踪规则计算  491<br>15.4.1  实现TrackingRules-Workflow  491<br>15.4.2  测试工作流  492<br>15.5  使用自定义跟踪配置提取数据  493<br>15.5.1  使用跟踪配置  494<br>15.5.2  实现TrackingProfile-Helper  495<br>15.5.3  创建跟踪配置  499<br>15.5.4  测试跟踪配置  501<br>15.6  维护SQL跟踪数据库  502<br>15.6.1  分区  502<br>15.6.2  设置分区间隔时间  502<br>15.6.3  自动或手动分区  502<br>15.6.4  访问分区数据  503<br>15.6.5  分离或删除分区  503<br>15.7  开发跟踪服务  503<br>15.7.1  实现跟踪通道  504<br>15.7.2  实现跟踪服务  506<br>15.7.3  测试自定义跟踪服务  510<br>15.8  小结  512<br><br>第16章  Web服务和ASP.NET  513<br>16.1  将工作流发布为Web服务  513<br>16.1.1  了解Web服务活动  513<br>16.1.2  发布和配置  514<br>16.2  开发Web服务工作流  515<br>16.2.1  定义Web服务接口  515<br>16.2.2  定义MathServiceWorkflow  516<br>16.2.3  发布工作流  518<br>16.2.4  测试工作流  519<br>16.3  返回Web服务错误  521<br>16.3.1  修改MathServiceWorkflow  522<br>16.3.2  测试修改后的Web服务  523<br>16.4  开发状态化的Web服务  523<br>16.4.1  定义Web服务接口  524<br>16.4.2  实现MathServiceState-fulWorkflow  525<br>16.4.3  发布新工作流  528<br>16.4.4  测试Web服务  528<br>16.5  在工作流中调用Web服务  528<br>16.5.1  实现InvokeWebService-Workflow  529<br>16.5.2  测试工作流  532<br>16.6  在ASP.NET中使用工作流  533<br>16.6.1  实现DivideNumberWorkflow  534<br>16.6.2  实现UseWorkflowWebsite  534<br>16.6.3  测试工作流  538<br>16.7  小结  539<br><br>第17章  工作流服务和WCF集成  540<br>17.1  了解WCF  540<br>17.1.1  定义服务约定  541<br>17.1.2  配置终结点和绑定  542<br>17.1.3  承载和配置  543<br>17.2  了解工作流服务  543<br>17.2.1  使用ReceiveActivity  543<br>17.2.2  使用SendActivity  544<br>17.2.3  承载和配置  545<br>17.2.4  实例化和上下文管理  547<br>17.3  开发无状态的工作流服务  548<br>17.3.1  定义服务约定  548<br>17.3.2  实现工作流  549<br>17.3.3  配置工作流服务  550<br>17.3.4  测试工作流服务  551<br>17.4  IIS承载和客户端开发  552<br>17.4.1  创建IIS虚拟目录  553<br>17.4.2  创建.svc文件  553<br>17.4.3  配置Web.config文件  553<br>17.4.4  部署服务  554<br>17.4.5  开发客户端应用程序  555<br>17.5  自承载的工作流服务  557<br>17.5.1  开发服务宿主  558<br>17.5.2  配置服务宿主  559<br>17.5.3  更改客户端应用程序  560<br>17.5.4  测试服务宿主  561<br>17.6  定义工作流优先的服务  561<br>17.7  开发状态化的工作流服务  562<br>17.7.1  定义服务约定  563<br>17.7.2  实现工作流  564<br>17.7.3  在IIS中承载工作流服务  566<br>17.7.4  开发客户端应用程序  567<br>17.7.5  测试工作流服务  569<br>17.8  使用SendActivity  570<br>17.8.1  实现工作流  570<br>17.8.2  开发客户端应用程序  573<br>17.8.3  测试工作流  575<br>17.9  上下文和对话  575<br>17.9.1  定义服务约定  577<br>17.9.2  实现库存工作流  579<br>17.9.3  实现库存宿主  583<br>17.9.4  实现客户端工作流  586<br>17.9.5  实现客户端宿主  592<br>17.9.6  测试应用程序  595<br>17.10  小结  596<br><br>第18章  工作流序列化和标记  598<br>18.1  了解工作流创作模式  598<br>18.1.1  仅限代码创作模式  598<br>18.1.2  代码分离创作模式  599<br>18.1.3  无代码创作模式  601<br>18.2  开发仅限代码工作流  602<br>18.2.1  实现工作流  603<br>18.2.2  测试工作流  604<br>18.2.3  查看生成的代码  605<br>18.3  开发代码分离工作流  607<br>18.3.1  实现工作流  607<br>18.3.2  测试工作流  608<br>18.3.3  查看标记  608<br>18.4  开发无代码工作流  609<br>18.4.1  实现工作流基类  609<br>18.4.2  实现自定义活动  610<br>18.4.3  定义工作流标记  611<br>18.4.4  增强WorkflowRuntime-Manager  612<br>18.4.5  测试工作流  614<br>18.5  在无代码工作流中使用规则  615<br>18.5.1  定义规则条件  616<br>18.5.2  修改工作流标记  617<br>18.5.3  测试工作流  618<br>18.6  序列化到标记  618<br>18.7  编译工作流  622<br>18.8  编译包含规则的工作流  625<br>18.9  在命令行中编译  628<br>18.10  反序列化标记  628<br>18.11  小结  632<br><br>第19章  承载工作流设计器  633<br>19.1  工作流设计器  633<br>19.1.1  设计器命名空间  634<br>19.1.2  设计器类  634<br>19.1.3  设计器服务  635<br>19.2  构建设计器应用程序  635<br>19.2.1  创建设计器项目  636<br>19.2.2  实现WorkflowLoader  637<br>19.2.3  实现WorkflowMenuService  645<br>19.2.4  实现WorkflowEvent-BindingService  649<br>19.2.5  实现EventProperty-Descriptor  653<br>19.2.6  实现WorkflowProperty-ValueService  657<br>19.2.7  实现WorkflowToolbox-Service  659<br>19.2.8  实现WorkflowDesigner  668<br>19.2.9  实现MainForm  674<br>19.2.10  实现AssemblyReference-Form  679<br>19.2.11  实现NewWorkflowForm  681<br>19.3  使用设计器  683<br>19.4  小结  687
展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证