
At a Glance
744 Pages
23.2 x 17.9 x 3.7
Paperback
$54.99
or 4 interest-free payments of $13.75 with
 orÂShips in 5 to 7 business days
| About the Author | p. xix |
| About the Technical Reviewer | p. xxi |
| Acknowledgments | p. xxiii |
| Introduction | p. xxv |
| A Quick Tour of Windows Workflow Foundation | p. 1 |
| Why Workflow? | p. 1 |
| Workflows Are Different | p. 1 |
| Why Windows Workflow Foundation? | p. 2 |
| Your Development Environment | p. 3 |
| Hello Workflow | p. 3 |
| Creating the Workflow Project | p. 4 |
| Introducing the Workflow Designer | p. 5 |
| Using Workflow Activities | p. 6 |
| Entering Code | p. 7 |
| Hosting the Workflow Runtime | p. 9 |
| Running the Application | p. 11 |
| Passing Parameters | p. 11 |
| Declaring the Properties | p. 11 |
| Passing Values at Runtime | p. 12 |
| Making Decisions | p. 14 |
| Creating a Workflow Library | p. 14 |
| Adding Workflow Properties | p. 15 |
| Adding IfElse Activities | p. 16 |
| Adding Calculation Logic | p. 19 |
| Creating the Calculator Client | p. 22 |
| Testing and Debugging the Calculator | p. 25 |
| Summary | p. 28 |
| Foundation Overview | p. 29 |
| Workflow Types | p. 29 |
| Sequential Workflows | p. 29 |
| State Machine Workflows | p. 30 |
| Choosing a Workflow Type | p. 31 |
| Foundation Deliverables | p. 32 |
| Class Libraries and Framework | p. 33 |
| Runtime Engine | p. 34 |
| Runtime Services | p. 34 |
| Design Time Tools | p. 35 |
| .NET 2.0 Runtime | p. 35 |
| Runtime Environment | p. 35 |
| Application Host Process | p. 36 |
| Runtime Engine | p. 37 |
| Registered Core Services | p. 39 |
| Registered Local Services | p. 42 |
| Workflow Instance | p. 44 |
| Design Time Environment | p. 46 |
| Workflow Authoring Modes | p. 46 |
| Project Templates | p. 48 |
| Workflow Designer | p. 48 |
| Activity Designer | p. 54 |
| Rule Condition Editor | p. 55 |
| RuleSet Editor | p. 57 |
| Workflow Debugger | p. 61 |
| Command-Line Workflow Compiler | p. 62 |
| Summary | p. 62 |
| Activities | p. 63 |
| Understanding Activities | p. 63 |
| A Dual Audience for Activities | p. 64 |
| Class Hierarchy | p. 64 |
| Exploring Standard Activities | p. 65 |
| Custom Workflow Logic | p. 66 |
| Flow Control | p. 66 |
| State Management | p. 68 |
| Event Handling | p. 69 |
| Local Service Communication | p. 70 |
| Rules | p. 71 |
| Web Services | p. 71 |
| Transactions, Compensation, and Synchronization | p. 72 |
| Exceptions and Error Handling | p. 73 |
| Standard Activities Summary | p. 74 |
| Adding Workflow Logic | p. 75 |
| Using the CodeActivity | p. 76 |
| Creating the Project | p. 77 |
| Defining the Workflow Parameters | p. 77 |
| Validating the Account | p. 81 |
| Validating the Product | p. 82 |
| Entering the Order | p. 83 |
| Running the Workflow | p. 87 |
| Evaluating the Approach | p. 90 |
| Developing Custom Activities | p. 90 |
| Why Custom Activities? | p. 91 |
| Designing for Two Audiences | p. 91 |
| Creating the Project | p. 91 |
| Implementing the Account Validation Activity | p. 92 |
| Implementing the Product Validation Activity | p. 95 |
| Implementing the Order Entry Activity | p. 98 |
| Defining the Workflow Parameters | p. 101 |
| Defining the Workflow | p. 102 |
| Running the Workflow | p. 107 |
| Evaluating the Approach | p. 111 |
| Enhancing the Design Experience | p. 111 |
| Validating the Activity | p. 112 |
| Customizing Toolbox Behavior | p. 116 |
| Customizing the Designer | p. 120 |
| Summary | p. 125 |
| Hosting the Workflow Runtime | p. 127 |
| Overview of Hosting | p. 127 |
| Simple Workflow Hosting | p. 128 |
| Implementing a Test Workflow | p. 128 |
| Implementing a Simple Host Application | p. 131 |
| Improved Workflow Hosting | p. 136 |
| Implementing the Workflow Instance Wrapper | p. 136 |
| Implementing the Workflow Manager Class | p. 139 |
| Hosting with the Workflow Manager | p. 147 |
| Configuring the Runtime with App.Config | p. 153 |
| Controlling a Workflow Instance | p. 158 |
| Synchronous Workflow Execution | p. 162 |
| Summary | p. 165 |
| Flow Control | p. 167 |
| Condition Types | p. 167 |
| Using the IfElseActivity | p. 168 |
| Using an IfElseActivity with Code Conditions | p. 169 |
| Using an IfElseActivity with Rule Conditions | p. 176 |
| Using the WhileActivity | p. 180 |
| Implementing the Workflow | p. 180 |
| Testing the Workflow | p. 184 |
| Using the ParallelActivity | p. 186 |
| Implementing the Workflow | p. 186 |
| Testing the Workflow | p. 190 |
| Adding a DelayActivity | p. 192 |
| Using the ReplicatorActivity | p. 194 |
| Implementing the Sequence Workflow | p. 195 |
| Testing the Sequence Workflow | p. 199 |
| Implementing the Parallel Workflow | p. 200 |
| Testing the Parallel Workflow | p. 204 |
| Using ReplicatorActivity Events | p. 206 |
| Interrupting Execution | p. 206 |
| Using the ConditionedActivityGroup | p. 207 |
| Implementing the Workflow | p. 207 |
| Testing the Workflow | p. 211 |
| Using the InvokeWorkflowActivity | p. 213 |
| Using the TerminateActivity | p. 214 |
| Using the SuspendActivity | p. 214 |
| Summary | p. 215 |
| Local Services | p. 217 |
| Understanding Local Services | p. 217 |
| Implementing a Local Service | p. 218 |
| Using a Local Service | p. 219 |
| Implementing and Using a Local Service | p. 219 |
| Implementing the Account Class | p. 219 |
| Declaring the Service Contract | p. 220 |
| Implementing the Local Service Class | p. 221 |
| Implementing the Workflow | p. 223 |
| Testing the Workflow | p. 226 |
| Loading from App.config | p. 228 |
| Using a Custom Activity | p. 231 |
| Implementing a Custom Activity | p. 231 |
| Modifying the Workflow | p. 234 |
| Testing the Workflow | p. 235 |
| Using the CallExternalMethodActivity | p. 236 |
| Implementing the Workflow | p. 236 |
| Testing the Workflow | p. 238 |
| Summary | p. 239 |
| Event-Driven Activities | p. 241 |
| Using Event-Driven Activities | p. 241 |
| Using the HandleExternalEventActivity | p. 243 |
| Creating the Project | p. 244 |
| Implementing the Event Arguments Class | p. 244 |
| Defining the Service Interface | p. 245 |
| Implementing the Local Service | p. 246 |
| Implementing the Workflow | p. 248 |
| Implementing the Host Application | p. 255 |
| Testing the Workflow | p. 259 |
| Generating Communication Activities | p. 260 |
| Generating the Activities | p. 260 |
| Modifying the Workflow | p. 261 |
| Manually Controlling Correlation | p. 262 |
| Implementing the Event Arguments Class | p. 264 |
| Defining the Service Interface | p. 265 |
| Implementing the Local Service | p. 265 |
| Implementing the Workflow | p. 266 |
| Testing the Workflow | p. 269 |
| Using the EventHandlingScopeActivity | p. 271 |
| Defining the Service Interface | p. 272 |
| Implementing the Local Service | p. 272 |
| Implementing the Workflow | p. 274 |
| Testing the Workflow | p. 280 |
| Summary | p. 283 |
| Workflow Persistence | p. 285 |
| Understanding Persistence | p. 285 |
| Why Persist Workflows? | p. 285 |
| Persistence Overview | p. 286 |
| Using the SqIWorkflowPersistenceService | p. 288 |
| Preparing a Database for Persistence | p. 289 |
| Implementing the Local Service | p. 289 |
| Implementing the Workflow | p. 291 |
| Implementing the Host Application | p. 293 |
| Testing the Application | p. 304 |
| Implementing a Custom Persistence Service | p. 308 |
| Understanding the Abstract Methods | p. 308 |
| Implementing the Service | p. 310 |
| Testing the Custom Service | p. 317 |
| Summary | p. 319 |
| State Machine Workflows | p. 321 |
| Understanding State Machine Workflows | p. 321 |
| Why a State Machine Workflow? | p. 322 |
| State Machine Workflow Overview | p. 323 |
| Implementing a State Machine Workflow | p. 326 |
| Designing the Car State Machine | p. 326 |
| Defining the Local Service Interface | p. 328 |
| Implementing the Local Service | p. 329 |
| Implementing the Workflow | p. 332 |
| Implementing the Host Application | p. 340 |
| Testing the Application | p. 347 |
| Eliminating Duplicate Event Handlers | p. 349 |
| Refactoring the CarWorkflow | p. 349 |
| Testing the Revised Workflow | p. 350 |
| Identifying Available Events | p. 351 |
| Interrogating the Workflow Queues | p. 351 |
| Modifying the CarStateMachine Application | p. 351 |
| Testing the Application | p. 354 |
| Accessing Runtime Information | p. 354 |
| Modifying the CarStateMachine Application | p. 355 |
| Testing the Application | p. 356 |
| Summary | p. 357 |
| Transactions and Compensation | p. 359 |
| Understanding Transactions | p. 359 |
| The Way of Transactions | p. 360 |
| WF Support for Transactions | p. 360 |
| Using the TransactionScopeActivity | p. 362 |
| Implementing the AccountAdjustmentActivity | p. 365 |
| Implementing the AccountTransferWorkflow | p. 369 |
| Testing the Workflow | p. 372 |
| Understanding Compensation | p. 377 |
| Using Compensatable Activities | p. 379 |
| Implementing the InventoryUpdateActivity | p. 379 |
| Implementing the OrderDetailActivity | p. 383 |
| Implementing the OrderEntryWorkflow | p. 388 |
| Testing the Workflow | p. 395 |
| Participating in a Batch of Work | p. 398 |
| Using the IPendingWork Interface | p. 399 |
| Implementing the Local Service | p. 399 |
| Implementing the BatchedWorkWorkflow | p. 402 |
| Testing the Workflow | p. 403 |
| Summary | p. 405 |
| Workflow Rules | p. 407 |
| Understanding Workflow Rules | p. 407 |
| Parts of a Rule | p. 408 |
| Why Use Rules? | p. 408 |
| Using Rules in WF | p. 409 |
| Defining Rules | p. 409 |
| Defining RuleSets | p. 412 |
| Identifying Dependencies with Attributes | p. 414 |
| Defining Rules with a PolicyActivity | p. 416 |
| Implementing the SalesItem Class | p. 416 |
| Declaring the Rules | p. 417 |
| Testing the Workflow | p. 424 |
| Tracing Rules | p. 428 |
| Adjusting Rule Sequence | p. 431 |
| Setting the Rule Priority | p. 431 |
| Testing the Workflow | p. 432 |
| Using Methods Within Rules | p. 434 |
| Adding the Access Methods | p. 434 |
| Using the Methods in the RuleSet | p. 435 |
| Identifying Indirect Relationships | p. 436 |
| Executing a RuleSet in Code | p. 437 |
| Implementing the SellItemSerializedWorkflow | p. 437 |
| Testing the Workflow | p. 440 |
| Constructing a RuleSet in Code | p. 441 |
| Implementing the SellitemInCodeWorkflow | p. 441 |
| Testing the Workflow | p. 444 |
| Summary | p. 445 |
| Exception and Error Handling | p. 447 |
| Understanding Workflow Exception Handling | p. 447 |
| Reviewing Default Behavior | p. 450 |
| Implementing the ExceptionWorkflow | p. 450 |
| Testing the Workflow | p. 452 |
| Using FaultHandlerActivity | p. 454 |
| Handling ArithmeticException | p. 454 |
| Handling DivideByZeroException | p. 458 |
| Containing the Exception | p. 460 |
| Rethrowing an Exception | p. 462 |
| Compensation and Exceptions | p. 463 |
| Implementing the CompensateWorkflow | p. 464 |
| Test the Workflow | p. 466 |
| Using CancellationHandlerActivity | p. 468 |
| Implementing the CancelHandlerWorkflow | p. 468 |
| Testing the Workflow | p. 471 |
| Summary | p. 471 |
| Dynamic Workflow Updates | p. 473 |
| Understanding Dynamic Updates | p. 473 |
| Why Use Dynamic Updates? | p. 474 |
| Applying Dynamic Updates | p. 474 |
| Preventing Dynamic Updates | p. 476 |
| Applying Updates from the Host Application | p. 476 |
| Implementing the DynamicWorkflow | p. 476 |
| Implementing a Custom Activity | p. 478 |
| Implementing the Host Application | p. 480 |
| Testing the Workflow | p. 484 |
| Restricting Dynamic Updates | p. 485 |
| Applying Updates from Within a Workflow | p. 486 |
| Implementing the SelfUpdatingWorkflow | p. 486 |
| Implementing the Host Application | p. 490 |
| Testing the Workflow | p. 491 |
| Updating a Rule Condition | p. 492 |
| Implementing the DynamicConditionWorkflow | p. 492 |
| Implementing the Host Application | p. 494 |
| Testing the Workflow | p. 498 |
| Replacing a Rule Definition | p. 498 |
| Modifying the RuleDefinitions | p. 499 |
| Modifying the Host Application | p. 500 |
| Testing the Revised Application | p. 502 |
| Summary | p. 502 |
| Workflow Tracking | p. 503 |
| Understanding Workflow Tracking | p. 503 |
| Tracking Services | p. 504 |
| Tracking Event Types | p. 504 |
| Custom Tracking Profiles | p. 505 |
| Using the Tracking Data | p. 506 |
| Benefiting from Workflow Tracking | p. 506 |
| Using the SqlTrackingService | p. 507 |
| Preparing the Tracking SQL Database | p. 507 |
| Developing a Test Workflow | p. 508 |
| Developing the Host Application | p. 510 |
| Executing the Host Application | p. 512 |
| Retrieving Tracking Data | p. 513 |
| Creating User Track Points | p. 521 |
| Enhancing the TrackingExampleWorkflow | p. 522 |
| Testing the Revised Workflow | p. 523 |
| Tracking Rules Evaluation | p. 523 |
| Implementing the TrackingRulesWorkflow | p. 523 |
| Testing the Workflow | p. 525 |
| Extracting Data with a Custom Tracking Profile | p. 526 |
| Working with Tracking Profiles | p. 527 |
| Implementing the TrackingProfileHelper | p. 528 |
| Creating the Tracking Profile | p. 532 |
| Testing the Tracking Profile | p. 535 |
| Maintaining the SQL Tracking Database | p. 536 |
| Partitioning | p. 536 |
| Setting the Partition Interval | p. 536 |
| Automatic or Manual Partitioning | p. 536 |
| Accessing Partitioned Data | p. 537 |
| Detaching or Dropping a Partition | p. 537 |
| Developing a Tracking Service | p. 538 |
| Implementing a Tracking Channel | p. 538 |
| Implementing a Tracking Service | p. 540 |
| Testing the Custom Tracking Service | p. 544 |
| Summary | p. 547 |
| Web Services and ASP.NET | p. 549 |
| Publishing a Workflow As a Web Service | p. 549 |
| Understanding the Web Service Activities | p. 549 |
| Publishing and Configuration | p. 551 |
| Developing a Web Service Workflow | p. 552 |
| Defining the Web Service Interface | p. 552 |
| Defining the MathServiceWorkflow | p. 552 |
| Publishing the Workflow | p. 555 |
| Testing the Web Service | p. 557 |
| Returning a Web Service Fault | p. 560 |
| Modifying the MathServiceWorkflow | p. 560 |
| Testing the Revised Web Service | p. 562 |
| Developing a Stateful Web Service | p. 562 |
| Defining the Web Service Interface | p. 563 |
| Implementing the MathServiceStatefulWorkflow | p. 563 |
| Publishing the New Workflow | p. 567 |
| Testing the Web Service | p. 567 |
| Invoking a Web Service from a Workflow | p. 567 |
| Implementing the InvokeWebServiceWorkflow | p. 567 |
| Testing the Workflow | p. 571 |
| Using Workflows from ASP.NET | p. 573 |
| Implementing the DivideNumberWorkflow | p. 573 |
| Implementing the UseWorkflowWebsite | p. 574 |
| Testing the Web Site | p. 578 |
| Summary | p. 579 |
| Workflow Serialization and Markup | p. 581 |
| Understanding Workflow Authoring Modes | p. 581 |
| Code-Only Authoring Mode | p. 581 |
| Code-Separation Authoring Mode | p. 583 |
| No-Code Authoring Mode | p. 584 |
| Developing a Code-Only Workflow | p. 586 |
| Implementing the Workflow | p. 586 |
| Testing the Workflow | p. 588 |
| Reviewing the Generated Code | p. 590 |
| Developing a Code-Separation Workflow | p. 592 |
| Implementing the Workflow | p. 592 |
| Testing the Workflow | p. 592 |
| Reviewing the Markup | p. 592 |
| Developing a No-Code Workflow | p. 594 |
| Implementing the Base Workflow Class | p. 594 |
| Implementing the Custom Activity | p. 595 |
| Defining the Workflow Markup | p. 596 |
| Enhancing the WorkflowRuntimeManager | p. 597 |
| Testing the Workflow | p. 599 |
| Using Rules with a No-Code Workflow | p. 601 |
| Defining the Rule Condition | p. 601 |
| Modifying the Workflow Markup | p. 603 |
| Testing the Workflow | p. 603 |
| Serializing to Markup | p. 604 |
| Compiling a Workflow | p. 608 |
| Compiling a Workflow with Rules | p. 611 |
| Compiling from the Command Line | p. 614 |
| Deserializing Markup | p. 615 |
| Summary | p. 619 |
| Hosting the Workflow Designers | p. 621 |
| Understanding the Workflow Designers | p. 621 |
| Designer Namespaces | p. 622 |
| Designer Classes | p. 622 |
| Designer Services | p. 623 |
| Building a Designer Application | p. 624 |
| Creating the Designer Project | p. 625 |
| Implementing WorkflowLoader | p. 626 |
| Implementing WorkflowMenuService | p. 635 |
| Implementing WorkflowEventBindingService | p. 639 |
| Implementing EventPropertyDescriptor | p. 643 |
| Implementing WorkflowPropertyValueService | p. 648 |
| Implementing WorkflowToolboxService | p. 650 |
| Implementing WorkflowDesigner | p. 661 |
| Implementing MainForm | p. 668 |
| Implementing AssemblyReferenceForm | p. 674 |
| Implementing NewWorkflowForm | p. 676 |
| Using the Designer | p. 679 |
| Summary | p. 684 |
| Index | p. 685 |
| Table of Contents provided by Ingram. All Rights Reserved. |
ISBN: 9781590597781
ISBN-10: 1590597788
Series: Expert's Voice in .NET
Published: 10th July 2008
Format: Paperback
Language: English
Number of Pages: 744
Audience: General Adult
Publisher: Springer Nature B.V.
Country of Publication: GB
Dimensions (cm): 23.2 x 17.9 x 3.7
Weight (kg): 1.16
Shipping
| Standard Shipping | Express Shipping | |
|---|---|---|
| Metro postcodes: | $9.99 | $14.95 |
| Regional postcodes: | $9.99 | $14.95 |
| Rural postcodes: | $9.99 | $14.95 |
Orders over $79.00 qualify for free shipping.
How to return your order
At Booktopia, we offer hassle-free returns in accordance with our returns policy. If you wish to return an item, please get in touch with Booktopia Customer Care.
Additional postage charges may be applicable.
Defective items
If there is a problem with any of the items received for your order then the Booktopia Customer Care team is ready to assist you.
For more info please visit our Help Centre.
You Can Find This Book In

Access Database Design & Programming
Creating Programmable Database Applications with Access 97, 2000, 2002 & 2003
Paperback
RRP $76.00
$30.00
OFF
This product is categorised by
- Non-FictionComputing & I.T.Computer Programming & Software DevelopmentWeb Programming
- Non-FictionComputing & I.T.Operating SystemsMicrosoft (Windows) Operating Systems
- Non-FictionComputing & I.T.Computer Programming & Software DevelopmentSoftware Engineering
- Non-FictionComputing & I.T.Computer Programming & Software DevelopmentMicrosoft Programming























