Justin Mathew Blog

My Innovations in .Net

Archive for the ‘Windows Workflow Services 4.0’ Category

Workflow Service 4.0 with complete working code

leave a comment »


Download Complete working Solution

Workflow Service 4.0

Introduction

It is very interesting that Microsoft has come up with something new in Windows Workflow foundation 4.0. I got a chance to check new Workflow features in Visual Studio 2010 RTM and noticed that there are lots of differences between WF3.5 and WF4. The major replacement is that they removed state machine workflow and provided with a better one “Flow chart” and no more code activity. WCF workflow services 4.0 are implemented very differently, and there are no more code-behind files (sorry to those who are looking for code activity in WF 4.0). All of these changes are done to improve performance, code separation and for better understanding of workflows.

Background

This article is presented for those who have some knowledge about workflow 3.0, 3.5 and WCF service, even though all other beginners can learn workflow by downloading the source code.

New Features and Replacements in Workflow 4.0

Have a look at the below picture between work flow templates in 4.0 and 3.5

WF4_0Vs3

State machine workflow is replaced with Flow chart

As we know, there are two types of workflows in WF3.0 or 3.5, sequential and state machine. You can add activities to these workflows. In WF4, a workflow is an activity which contains other activities. That explains why there is only an Activity Library project template in WF4.Flow chart workflow is a better choice Microsoft has come up with. Most of us know about control of flow chart and this workflow exactly works in the same concept.

No “CodeActivity” in tool box and it can be done by creating a custom code Activity

Workflow 4.0 is completely working based on XAML design and there is no more code behind concept. But still anybody wants to call any method, there are proper control items like method invoker and configure type and method name. I will be explaining below in detail how to call the method in WF4.0.

How to use Invoke method in Workflow service 4.0

Please use my another article : Invoke Method Activity

Message flow and Workflow Instance

Workflow4.0 services start with Receive Request and End with Send response to the service client. All the implementation can be done between these two main activities.

WorkflowInstance

New workflow instance will be created by checking below property “CanCreateInstance” on “Receive Request” (shown in the above picture). We don’t need to create workflow instance as we used to do earlier.

Creating public variables in Workflow instance

Earlier, we used to create public variables in code behind files but in workflow 4 can allow only create variables from workflow XAML designer. These public variables can be used to pass as parameter or return value in method or any kind of manipulations.

Follow below steps to create variables

  1. Select topmost activity (sequence) and click variables link at the bottom of window.
  2. Give name, type, scope and default as shown below, Custom Type can be given by browse option in drop downs.

CreateVariable_small

Getting Started with Workflow Service 4.0 Sample Source code: Calling WCF service from Workflow Service

Overview about Solution structure

Solution_W4

As we see, the solution contains total 6 projects, in three categories Service host, Service Library and Web client to test integration with all these services. I have separated service host and service library for easy deployment and responsibility . Contract is a separate assembly which will be referred across all projects. In this sample application, WCF client is invoking by custom code activity called “CreateOrder” in service library.

Workflow

Custom Exception handling through Fault Exception in Workflow service 4.0

Exception handling ca be done via placing try catch activity in work flow designer and in each catch block will be typed with proper exception type. In the attached code I have created a custom exception class to send custom messages to the client side. Send receive activity is required to place in each catch block to throw back exception to web client.

Conclusion

Initially it will be bit difficult to understand but once you get into then it is very easy. Attached source code is a better tutorial for readers. Any clarification I am happy to help .