第1章 wf快速入門 1
1.1 為什麼需要工作流 1
1.1.1 工作流各不相同 1
1.1.2 為什麼選擇wf 2
1.2 開發環境 3
1.3 hello workflow 3
1.3.1 創建工作流項目 4
1.3.2 工作流設計器 6
1.3.3 使用工作流活動 6
1.3.4 輸入代碼 7
1.3.5 承載工作流運行時 8
1.3.6 運行應用程序 10
1.4 傳遞參數 10
1.4.1 聲明屬性 11
1.4.2 在運行時中傳遞值 11
1.5 作齣決策 13
1.5.1 創建工作流庫 13
1.5.2 添加工作流屬性 13
1.5.3 添加ifelse活動 14
1.5.4 添加計算邏輯 17
1.5.5 創建計算器客戶端 19
1.5.6 測試和調試計算器 23
1.6 小結 25
第2章 基礎結構概述 26
2.1 工作流類型 26
2.1.1 順序工作流 26
2.1.2 狀態機工作流 26
2.1.3 選擇工作流類型 27
2.2 基礎結構交付項 28
2.2.1 類庫和基礎結構 28
2.2.2 運行時引擎 29
2.2.3 運行時服務 30
2.2.4 設計時工具 30
2.2.5 .net 2.0運行時 30
2.3 運行時環境 30
2.3.1 應用程序宿主進程 31
2.3.2 運行時引擎 32
2.3.3 已注冊的核心服務 33
2.3.4 已注冊的本地服務 36
2.3.5 工作流實例 37
2.4 設計時環境 39
2.4.1 工作流創作模式 39
2.4.2 項目模闆 40
2.4.3 工作流設計器 41
2.4.4 活動設計器 45
2.4.5 規則條件編輯器 46
2.4.6 ruleset編輯器 48
2.4.7 工作流調試器 51
2.4.8 命令行工作流編譯器 51
2.4.9 命令行通信活動生成器 52
2.5 小結 52
第3章 活動 53
3.1 理解活動 53
3.1.1 活動的兩個訪問者 53
3.1.2 類層次結構 54
3.2 探討標準活動 55
3.2.1 自定義工作流邏輯 55
3.2.2 流控製 55
3.2.3 狀態管理 57
3.2.4 事件處理 58
3.2.5 本地服務通信 59
3.2.6 規則 59
3.2.7 web服務 59
3.2.8 工作流服務 60
3.2.9 事務、補償和同步 61
3.2.10 異常和錯誤處理 62
3.3 標準活動摘要 62
3.4 添加工作流邏輯 64
3.5 使用codeactivity 64
3.5.1 創建項目 65
3.5.2 定義工作流參數 65
3.5.3 驗證賬戶 69
3.5.4 驗證産品 70
3.5.5 錄入訂單 70
3.5.6 運行工作流 74
3.5.7 總結此方法 77
3.6 開發自定義活動 77
3.6.1 為什麼使用自定義活動 77
3.6.2 兩種訪問者的設計 78
3.6.3 創建項目 78
3.6.4 實現賬戶驗證活動 78
3.6.5 實現産品驗證活動 82
3.6.6 實現訂單錄入活動 84
3.6.7 定義工作流參數 87
3.6.8 定義工作流 88
3.6.9 運行工作流 92
3.6.10 總結此方法 95
3.7 增強設計體驗 96
3.7.1 驗證活動 96
3.7.2 自定義工具箱行為 100
3.7.3 自定義設計器 104
3.8 小結 108
第4章 承載工作流運行時 109
4.1 承載概述 109
4.2 簡單的工作流承載 110
4.2.1 實現測試工作流 110
4.2.2 實現簡單宿主應用程序 112
4.3 改進的工作流承載 117
4.3.1 實現工作流實例包裝 117
4.3.2 實現工作流管理器類 119
4.3.3 承載工作流管理器 127
4.3.4 通過app.config配置運行時 133
4.4 控製工作流實例 136
4.5 同步的工作流執行 139
4.6 小結 142
第5章 流控製 143
5.1 條件類型 143
5.2 使用ifelseactivity 144
5.2.1 使用代碼條件的ifelseactivity 144
5.2.2 使用規則條件的ifelseactivity 150
5.3 使用whileactivity 153
5.3.1 實現工作流 153
5.3.2 測試工作流 156
5.4 使用parallelactivity 158
5.4.1 實現工作流 159
5.4.2 測試工作流 162
5.4.3 添加delayactivity 164
5.5 使用replicatoractivity 165
5.5.1 實現順序工作流 166
5.5.2 測試順序工作流 169
5.5.3 實現並行工作流 170
5.5.4 測試並行工作流 174
5.5.5 使用replicatoractivity事件 176
5.5.6 中斷執行 176
5.6 使用conditionedactivitygroup 176
5.6.1 實現工作流 177
5.6.2 測試工作流 180
5.7 使用invokeworkflowactivity 182
5.8 使用terminateactivity 183
5.9 使用suspendactivity 183
5.10 小結 183
第6章 本地服務 184
6.1 瞭解本地服務 184
6.1.1 實現本地服務 185
6.1.2 使用本地服務 185
6.2 實現並使用本地服務 186
6.2.1 實現賬戶類 186
6.2.2 聲明服務約定 186
6.2.3 實現本地服務類 187
6.2.4 實現工作流 188
6.2.5 測試工作流 191
6.3 從app.config加載 193
6.4 使用自定義活動 195
6.4.1 實現自定義活動 195
6.4.2 修改工作流 198
6.4.3 測試工作流 199
6.5 使用callexternalmethodactivity 199
6.5.1 實現工作流 199
6.5.2 測試工作流 201
6.6 小結 201
第7章 事件驅動活動 202
7.1 使用事件驅動活動 202
7.2 使用handleexternaleventactivity 203
7.2.1 創建項目 204
7.2.2 實現事件參數類 204
7.2.3 定義服務接口 205
7.2.4 實現本地服務 206
7.2.5 實現工作流 209
7.2.6 實現宿主應用程序 213
7.2.7 測試工作流 217
7.3 生成通信活動 218
7.3.1 生成活動 218
7.3.2 修改工作流 219
7.4 手動控製關聯 220
7.4.1 實現事件參數類 221
7.4.2 定義服務接口 221
7.4.3 實現本地服務 222
7.4.4 實現工作流 223
7.4.5 測試工作流 225
7.5 使用eventhandlingscopeactivity 227
7.5.1 定義服務接口 228
7.5.2 實現本地服務 228
7.5.3 實現工作流 230
7.5.4 測試工作流 234
7.6 開發自定義事件驅動活動 236
7.6.1 瞭解工作流隊列 237
7.6.2 事件驅動活動的需求 238
7.6.3 實現processguessactivity 239
7.6.4 實現sendhintactivity 246
7.6.5 修改工作流.. 248
7.6.6 修改宿主應用程序 249
7.6.7 測試工作流 252
7.7 小結 253
第8章 工作流持久性 254
8.1 瞭解持久性 254
8.1.1 持久化工作流的原因 254
8.1.2 持久性概述 255
8.2 使用sqlworkflowpersistenceservice 256
8.2.1 為持久性準備數據庫 257
8.2.2 實現本地服務 257
8.2.3 實現工作流 259
8.2.4 實現宿主應用程序 261
8.2.5 測試應用程序 271
8.3 實現自定義持久性服務 273
8.3.1 瞭解抽象方法 274
8.3.2 實現服務 276
8.3.3 測試自定義服務 282
8.4 小結 284
第9章 狀態機工作流 285
9.1 瞭解狀態機 285
9.1.1 為什麼需要狀態機工作流 285
9.1.2 狀態機概述 286
9.2 實現狀態機工作流 290
9.2.1 設計carstatemachine 290
9.2.2 定義本地服務接口 291
9.2.3 實現本地服務 292
9.2.4 實現工作流 295
9.2.5 實現宿主應用程序 302
9.2.6 測試應用程序 308
9.3 消除重復的事件處理程序 309
9.3.1 重構carworkflow 309
9.3.2 測試修改後的工作流 310
9.4 標識現有事件 311
9.4.1 詢問工作流隊列 311
9.4.2 修改carstatemachine 311
9.4.3 測試應用程序 313
9.5 訪問工作流運行時信息 314
9.5.1 修改carstatemachine 314
9.5.2 測試應用程序 316
9.6 小結 316
第10章 事務和補償 317
10.1 事務 317
10.1.1 事務的方式 317
10.1.2 wf對事務的支持 318
10.2 使用transactionscopeactivity 319
10.2.1 實現accountadjustmentactivity 322
10.2.2 實現accounttransferworkflow 326
10.2.3 測試工作流 329
10.3 瞭解補償 334
10.4 使用可補償活動 335
10.4.1 實現inventoryupdateactivity 335
10.4.2 實現orderdetailactivity 339
10.4.3 實現orderentryworkflow 344
10.4.4 測試工作流 350
10.5 參與工作批次 353
10.6 使用ipendingwork接口 353
10.6.1 實現本地服務 354
10.6.2 實現batchedworkworkflow 356
10.6.3 測試工作流 357
10.7 小結 359
第11章 工作流規則 361
11.1 瞭解工作流規則 361
11.1.1 規則的組成 362
11.1.2 使用規則的原因 362
11.2 在wf中使用規則 363
11.2.1 定義規則 363
11.2.2 定義規則集 366
11.2.3 使用特性來標識依賴項 368
11.3 使用policyactivity來定義規則 369
11.3.1 實現salesitem類 369
11.3.2 聲明規則 370
11.3.3 測試工作流 375
11.4 跟蹤規則 379
11.5 調整規則順序 381
11.5.1 設置規則優先級 381
11.5.2 測試工作流 381
11.6 在規則中使用方法 383
11.6.1 添加操作方法 383
11.6.2 在規則集中使用方法 384
11.6.3 標識間接關係 385
11.7 在代碼中執行規則集 386
11.7.1 實現sellitemserializedworkflow 386
11.7.2 測試工作流 389
11.8 在代碼中構造規則集 389
11.8.1 實現sellitemincodeworkflow 389
11.8.2 測試工作流 392
11.9 小結 393
第12章 異常和錯誤處理 394
12.1 理解工作流異常處理 394
12.2 探討默認行為 396
12.2.1 實現exceptionworkflow 396
12.2.2 測試工作流 398
12.3 使用faulthandleractivity 400
12.3.1 處理arithmeticexception 400
12.3.2 處理dividebyzeroexception 403
12.4 抑製異常 405
12.5 重新拋齣異常 407
12.6 補償和異常 408
12.6.1 實現compensateworkflow 408
12.6.2 測試工作流 410
12.7 使用cancellationhandleractivity 412
12.7.1 實現cancelhandlerworkflow 412
12.7.2 測試工作流 414
12.8 小結 414
第13章 高級自定義活動 415
13.1 開發專用的復閤活動 415
13.1.1 開發自定義活動 416
13.1.2 開發工作流 417
13.1.3 測試活動 418
13.2 開發通用的復閤活動 420
13.2.1 瞭解活動執行計劃 420
13.2.2 復閤活動的執行模式 421
13.2.3 實現順序活動 422
13.2.4 實現測試工作流 426
13.2.5 測試順序活動 428
13.3 開發優先級順序活動 429
13.3.1 實現優先級順序活動 429
13.3.2 實現擴展提供程序 432
13.3.3 實現自定義設計器 434
13.3.4 實現測試工作流 435
13.3.5 測試優先級順序活動 436
13.4 開發長時間運行的活動 436
13.4.1 實現本地服務 437
13.4.2 實現自定義活動 440
13.4.3 實現測試工作流 443
13.4.4 測試長時間運行的活動流 443
13.5 小結 445
第14章 動態工作流更新 446
14.1 瞭解動態更新 446
14.1.1 使用動態更新的原因 447
14.1.2 應用動態更新 447
14.1.3 防止動態更新 448
14.2 從宿主應用程序中應用更新 449
14.2.1 實現dynamicworkflow 449
14.2.2 實現自定義活動 450
14.2.3 實現宿主應用程序 452
14.2.4 測試工作流 456
14.3 限製動態更新 456
14.4 從工作流中應用更新 458
14.4.1 實現selfupdatingworkflow 458
14.4.2 實現宿主應用程序 461
14.4.3 測試工作流 462
14.5 更新規則條件 463
14.5.1 實現dynamicconditionworkflow 463
14.5.2 實現宿主應用程序 464
14.5.3 測試工作流 468
14.6 替換規則條件 468
14.6.1 修改ruledefinitions 468
14.6.2 修改宿主應用程序 470
14.6.3 測試修改後的應用程序 472
14.7 小結 472
第15章 工作流跟蹤 473
15.1 瞭解工作流跟蹤 473
15.1.1 跟蹤服務 473
15.1.2 跟蹤事件類型 474
15.1.3 自定義跟蹤配置 475
15.1.4 使用跟蹤數據 475
15.1.5 受益於工作流跟蹤 476
15.2 使用sqltrackingservice 476
15.2.1 準備跟蹤sql數據庫 477
15.2.2 開發測試工作流 477
15.2.3 開發宿主應用程序 479
15.2.4 執行宿主應用程序 481
15.2.5 獲取跟蹤數據 482
15.3 創建用戶跟蹤點 489
15.3.1 增強trackingexampleworkflow 490
15.3.2 測試修改後的工作流 490
15.4 跟蹤規則計算 491
15.4.1 實現trackingrulesworkflow 491
15.4.2 測試工作流 492
15.5 使用自定義跟蹤配置提取數據 493
15.5.1 使用跟蹤配置 494
15.5.2 實現trackingprofilehelper 495
15.5.3 創建跟蹤配置 499
15.5.4 測試跟蹤配置 501
15.6 維護sql跟蹤數據庫 502
15.6.1 分區 502
15.6.2 設置分區間隔時間 502
15.6.3 自動或手動分區 502
15.6.4 訪問分區數據 503
15.6.5 分離或刪除分區 503
15.7 開發跟蹤服務 503
15.7.1 實現跟蹤通道 504
15.7.2 實現跟蹤服務 506
15.7.3 測試自定義跟蹤服務 510
15.8 小結 512
第16章 web服務和asp.net 513
16.1 將工作流發布為web服務 513
16.1.1 瞭解web服務活動 513
16.1.2 發布和配置 514
16.2 開發web服務工作流 515
16.2.1 定義web服務接口 515
16.2.2 定義mathserviceworkflow 516
16.2.3 發布工作流 518
16.2.4 測試工作流 519
16.3 返迴web服務錯誤 521
16.3.1 修改mathserviceworkflow 522
16.3.2 測試修改後的web服務 523
16.4 開發狀態化的web服務 523
16.4.1 定義web服務接口 524
16.4.2 實現mathservicestatefulworkflow 525
16.4.3 發布新工作流 528
16.4.4 測試web服務 528
16.5 在工作流中調用web服務 528
16.5.1 實現invokewebserviceworkflow 529
16.5.2 測試工作流 532
16.6 在asp.net中使用工作流 533
16.6.1 實現dividenumberworkflow 534
16.6.2 實現useworkflowwebsite 534
16.6.3 測試工作流 538
16.7 小結 539
第17章 工作流服務和wcf集成 540
17.1 瞭解wcf 540
17.1.1 定義服務約定 541
17.1.2 配置終結點和綁定 542
17.1.3 承載和配置 543
17.2 瞭解工作流服務 543
17.2.1 使用receiveactivity 543
17.2.2 使用sendactivity 544
17.2.3 承載和配置 545
17.2.4 實例化和上下文管理 547
17.3 開發無狀態的工作流服務 548
17.3.1 定義服務約定 548
17.3.2 實現工作流 549
17.3.3 配置工作流服務 550
17.3.4 測試工作流服務 551
17.4 iis承載和客戶端開發 552
17.4.1 創建iis虛擬目錄 553
17.4.2 創建.svc文件 553
17.4.3 配置web.config文件 553
17.4.4 部署服務 554
17.4.5 開發客戶端應用程序 555
17.5 自承載的工作流服務 557
17.5.1 開發服務宿主 558
17.5.2 配置服務宿主 559
17.5.3 更改客戶端應用程序 560
17.5.4 測試服務宿主 561
17.6 定義工作流優先的服務 561
17.7 開發狀態化的工作流服務 562
17.7.1 定義服務約定 563
17.7.2 實現工作流 564
17.7.3 在iis中承載工作流服務 566
17.7.4 開發客戶端應用程序 567
17.7.5 測試工作流服務 569
17.8 使用sendactivity 570
17.8.1 實現工作流 570
17.8.2 開發客戶端應用程序 573
17.8.3 測試工作流 575
17.9 上下文和對話 575
17.9.1 定義服務約定 577
17.9.2 實現庫存工作流 579
17.9.3 實現庫存宿主 583
17.9.4 實現客戶端工作流 586
17.9.5 實現客戶端宿主 592
17.9.6 測試應用程序 595
17.10 小結 596
第18章 工作流序列化和標記 598
18.1 瞭解工作流創作模式 598
18.1.1 僅限代碼創作模式 598
18.1.2 代碼分離創作模式 599
18.1.3 無代碼創作模式 601
18.2 開發僅限代碼工作流 602
18.2.1 實現工作流 603
18.2.2 測試工作流 604
18.2.3 查看生成的代碼 605
18.3 開發代碼分離工作流 607
18.3.1 實現工作流 607
18.3.2 測試工作流 608
18.3.3 查看標記 608
18.4 開發無代碼工作流 609
18.4.1 實現工作流基類 609
18.4.2 實現自定義活動 610
18.4.3 定義工作流標記 611
18.4.4 增強workflowruntimemanager 612
18.4.5 測試工作流 614
18.5 在無代碼工作流中使用規則 615
18.5.1 定義規則條件 616
18.5.2 修改工作流標記 617
18.5.3 測試工作流 618
18.6 序列化到標記 618
18.7 編譯工作流 622
18.8 編譯包含規則的工作流 625
18.9 在命令行中編譯 628
18.10 反序列化標記 628
18.11 小結 632
第19章 承載工作流設計器 633
19.1 工作流設計器 633
19.1.1 設計器命名空間 634
19.1.2 設計器類 634
19.1.3 設計器服務 635
19.2 構建設計器應用程序 635
19.2.1 創建設計器項目 636
19.2.2 實現workflowloader 637
19.2.3 實現workflowmenuservice 645
19.2.4 實現workfloweventbindingservice 649
19.2.5 實現eventpropertydescriptor 653
19.2.6 實現workflowpropertyvalueservice 657
19.2.7 實現workflowtoolboxservice 659
19.2.8 實現workflowdesigner 668
19.2.9 實現mainform 674
19.2.10 實現assemblyreferenceform 679
19.2.11 實現newworkflowform 681
19.3 使用設計器 683
19.4 小結 687
· · · · · · (
收起)