Window Workflow Foundation Runtime Services: The Persistence Service

Introduction

This is the first of a series of brief articles intended to illustrate the functionality and customizability of the Windows Workflow Foundation (WF) Runtime Services. This first article is focused on describing WF’s persistence service and ways to customize it. Upcoming articles will cover other WF services such as tracking, communication, timer, and transactions to name a few. The article assumes that you are familiar with WF fundamentals. For an introduction to the WF basics, you can read this interesting article from David Chappell.

WF Runtime Services Overview

The Windows Workflow Foundation runtime engine provides the base set of functionalities required to execute and manage the workflow lifetime. The runtime engine architecture is highly extensible. For example, rather than imposing a specific type of host, the runtime engine can be hosted in almost any kind of Windows process. Furthermore, much of the functionality of the runtime engine, implemented in the individual runtime services, can be easily customized. In fact, developers can easily add/remove services to the runtime engine; and using the WF libraries, developers can actually create their own runtime services.

The following are the default WF services:

Service

Function

Persistence

Save and restore the state of the workflow at certain points to-from a durable medium

Tracking

Tracking services are designed to monitor workflow execution through the exchange of data that can then be persisted to a storage medium or output on a specified stream, the System.Console for instance

Timer

The Timer service within the Windows Workflow Foundation (WF) runtime engine is responsible for managing time-outs such as those required by the Delay activity

Transactions

Provides the transaction support needed for data integrity.

Threading

Dispense physical threads used to execute workflow instances

 

Persistence Service Overview.

By default the workflow hosting application executes the workflow instances in memory without any kind of state maintenance. However there are many scenarios, such as long-running processes for example, that require a mechanism for persisting the state of the workflow during some points of its execution. Using WF terminology, the process of persisting a workflow to a durable medium is known as dehydration while restoring is rehydration.

In WF, persistence is implemented using a runtime service whose main function is to save and restore the state of the workflow at certain points to-from a durable medium. WF provides a default persistence service named SQLStatePersistanceService, however due to the extensible model of the runtime services, developers have a broad set of options in order to deal with state persistence including the ability to create their own persistence service. The following sections explore some of these options. . .

Sample Workflow Overview.

 

This sample WF workflow helps to illustrate the functionality of the persistence service. The workflow consists of a sequence of three activities defined in Table 2.

Activity

Activity Type

Function

Before Serialize

Code

Prints the phrase “Before Serialize” to the console

Delay1

Delay

Suspends the workflow execution for a period of 50 seconds

After Serialize

Code

Prints the phrase “After Serialize” to the console

This figure illustrates a graphical representation of the workflow.

Configuring the Sample Workflow to the Persistence Service

The WF runtime engine uses the SQLStatePersistanceService service to allow the hosting application to save/restore the workflow state to/from a SQL Server database. Microsoft SQL Server is a very common and robust medium to maintain the state of the workflow instances, however you can also use other mediums such as any other relational database, XML files, binary files or just about any mechanism available for storing data. The following are the steps required to configure the sample workflow to use the persistence service:

1.      Create and Configure the Persistence Database

2.      Add the SQLStatePersistanceService Instance to the WorkFlow Runtime

3.      Save the Workflow Instance State

 

1. Create and Configure the Persistence Database

 

One interesting thing to note about the WF installation is that it does not require an existing installation of SQL Server, hence the databases required to use this runtime service are not installed by default. Developers who choose to implement the default persistence service, SQLStatePersistenceService, must first run a series of scripts in order to create and configure the persistence database. The following steps describe how to create the databases for the SQLStatePersistenceService:

a.      Use Microsoft SQL Server Query Analyzer to connect to the database server.

b.      Create a new database by creating a new query with the command: "create database <databasename>".

c.      Execute the query by choosing Query-Execute or by pressing F5.

d.      Choose the database created in step 2 above by selecting it from the database drop down list.

e.      Use File-Open to open the SqlPersistenceService_Schema.sql file located in the SQL script directory described above.

f.        Execute the query by choosing Query-Execute or by pressing F5. This will create the tables for the SqlStatePersistenceService service.

g.       Use File-Open to open the SqlPersistenceService_Logic.sql file located in the SQL script directory described above.

h.      Execute the query by choosing Query-Execute or by pressing F5. This will create the stored procedures for the SqlStatePersistenceService service.

2. Add the SQLStatePersistanceService Instance to the WorkFlow Runtime

The next step is to add an instance of the SQLStatePersistenceService service to the workflow runtime. You can add an instance by either embedding code in the host application itself or in its App.Config file.

Adding a Service Instance by Embedding Code in the Host Application

The following code snippet is used inside a host application in order to illustrates how to add an instance of the SQLStatePersistenceService service to the workflow runtime

WorkflowRuntime workflowRuntime = new WorkflowRuntime();

SqlStatePersistenceService stateservice = new SqlStatePersistenceService("Data Source=localhost;Initial Catalog=WFState;Integrated Security=True");

workflowRuntime.AddService(stateservice);

Adding the Service by Writing Code in the Host Application’s App.Config file

Alternatively we can use the App.Config file in order to add an instance of the SQLStatePersistenceService service:

<WorkflowRuntime Name="SampleApplication" UnloadOnIdle="true">

<Services>

<add type="System.Workflow.Runtime.Hosting.SqlStatePersistenceService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" ConnectionString="Data Source=localhost;Initial Catalog=WFState;Integrated Security=True;" />

</Services>

</WorkflowRuntime>

3. Persisting the Workflow Instance State to a Durable Medium

Once the persistence service is added to the Workflow Runtime Engine it is ready to persist the state of the workflow instance to a durable medium. One way, to force the workflow instance to persist its state is by calling the Unload method of the workflow instance. Be default, this method uses the persistence service associated with it to remove the workflow instance from memory and save its state.

 

Another way of persisting the workflow state, which is implemented in our sample workflow, is to instruct the Workflow Runtime to persist the state of the instance when entering an idle state. However, this event happens only if the UnLoadOnIdle property is set to true. This property must be set in your code prior to calling the StartRuntime method. The code for configuring this property appears below.

workflowRuntime.UnloadOnIdle = true;

workflowRuntime.StartRuntime();

How it does it

The Workflow Runtime engine persists the workflow state by calling the SaveWorkflowInstanceState method of the persistence service associated with the runtime engine. SaveWorkflowInstanceState is a virtual method of the StatePersistenceService class which is the base class of all persistence services in Windows Workflow Foundation.

 

4. Restoring Workflow Instance from a Durable Medium

The WF runtime engine can restore the workflow instance into memory allowing the instance to be scheduled for execution. One way to restore a workflow instance is by calling the Load method of the workflow instance. The runtime engine will also restore a workflow instance to memory upon reaching the end an idle period.

One other way of restoring the Workflow instance to memory is by interacting explicitly with the persistence service. To do this you have to call the GetWorkflow and Loads methods of the WorkflowRuntime class.

Suppose that in our example we instruct the workflow runtime to persist the instance state upon entering an idle state and then we subsequently suspend the workflow execution just when it reaches the After_Serialize code Activity. At this point, we can query the InstanceState table in the database associated with the SqlStatePersistenceService to get the serialized state.

SELECT uidInstanceID, state

FROM InstanceState

If we then restore the instance using the code below we will ge the following output, “After Serialize…”.

workflowRuntime = new WorkflowRuntime();

workflowRuntime.AddService(new SqlStatePersistenceService("Data Source=localhost;Initial Catalog=WFState;Integrated Security=True");

workflowRuntime.AddService(new SqlTimerService("Data Source=localhost;Initial Catalog=WFState;Integrated Security=True"));

workflowRuntime.StartRuntime();

CurrentInstance = workflowRuntime.GetWorkflow(new Guid("DC466C9E-5285-4D88-A9A2-FB79EAF81360"));

CurrentInstance.Load();

Developing a Custom Persistence Service.

WF provides bases classes that abstract the basic functionality of each of the default runtime services. The StatePersistenceService represents the abstract class that must be inherited by all persistence services. To develop a custom persistence service developers can inherit from this class and override the methods defined in the following table:

Method

Function

SaveWorkflowInstanceState

Saves the workflow instance state to a data store

SaveCompletedContextActivity

Saves the specified completed scope to a data store

LoadWorkflowInstanceState

Loads the specified state of the workflow instance back into memory

LoadCompletedContextActivity

Loads the specified completed scope back into memory

UnlockWorkflowInstanceState

Unlocks the specified workflow instance state

The following code shows a sample persistence service that serializes the workflow instance state to a file.

public class FilePersistenceProvider: StatePersistenceService

                {

                                public FilePersistenceProvider(string basedir)

                                {

                                                FBaseDir = basedir;

                                }

 

                                private string FBaseDir;

                               

                                public override void SaveWorkflowInstanceState(Activity rootActivity, bool unlock)

                                {

                                                ActivityExecutionContextInfo contextInfo = (ActivityExecutionContextInfo)rootActivity.GetValue(Activity.ActivityExecutionContextInfoProperty);

                                                SerializeActivity(rootActivity, contextInfo.ContextGuid);

                                }

 

                                // load workflow instance state

                                public override Activity LoadWorkflowInstanceState(Guid instanceId)

                                {

                                                object obj = DeserializeActivity(null, instanceId);

                                                return (Activity)obj ;

                                }

                               

                                // unlock workflow instance state.

                                // instance state locking is necessary when multiple runtimes share instance persistence store

                                public override void UnlockWorkflowInstanceState(Activity state)

                                {

                                                //not implemented...

                                }

 

                                // save completed scope activity state

                                public override void SaveCompletedContextActivity(Activity rootActivity)

                                {

                                                ActivityExecutionContextInfo contextInfo = (ActivityExecutionContextInfo)rootActivity.GetValue(Activity.ActivityExecutionContextInfoProperty);

                                                SerializeActivity(rootActivity, contextInfo.ContextGuid);

                                }

 

                                // Load completed scope activity state.

                                public override Activity LoadCompletedContextActivity(Guid activityId, Activity outerActivity)

                                {

                                                object obj = DeserializeActivity(outerActivity, activityId);

                                                return (Activity)obj ;

                                }

 

                                private void SerializeActivity(Activity RootActivity, Guid id)

                                {

                                                string filename = FBaseDir + "\\" + id.ToString() + ".bin";

                                                FileStream stream = new FileStream(filename, FileMode.OpenOrCreate);

                                                RootActivity.Save(stream);

                                                stream.Close();

                                }

 

                                private object DeserializeActivity(Activity RootActivity, Guid id)

                                {

                                                string filename = FBaseDir + "\\" + id.ToString() + ".bin";

                                                FileStream stream = new FileStream(filename, FileMode.Open);

                                                object Result = Activity.Load(stream, RootActivity);

                                                return Result;

                                }

                }

The steps to add this service to the workflow runtime are similar to what we did with the SqlStatePersistenceService. The following code shows how to add the FilePersistenceProvider to the workflow runtime.

WorkflowRuntime workflowRuntime= new WorkflowRuntime();

FilePersistenceProvider customservice = new FilePersistenceProvider("c:\\WF");

workflowRuntime.AddService(customservice);

What does it all Mean?

Persistence is one of the most important services required by workflow applications. Windows Workflow Foundation does not impose a specific persistence service. Instead it provides a highly extensible and flexible framework that allows developers to define and customize the persistence architecture for each specific runtime hosts or group of hosts.

 

 

 

Published Wednesday, October 5, 2005 5:00 PM by gsusx

Comments

# re: Window Workflow Foundation Runtime Services: The Persistence Service

Would it be possible to distribute workflow instances via this method over a cluster of computers, ie use this to enable some sort of grid computing? If a workflow doesn't interact with the outside world but only does heavy calculations, there should be no real problem, right? I can't wait to read your article on the threading service!

Thursday, October 6, 2005 9:49 AM by David

# re: Window Workflow Foundation Runtime Services: The Persistence Service

Nice one! Great to get low level access.....

Tuesday, October 25, 2005 1:42 AM by Mick Badran

# re: Window Workflow Foundation Runtime Services: The Persistence Service

Really good article!

Thursday, January 25, 2007 6:42 AM by moredotnet

# re: Window Workflow Foundation Runtime Services: The Persistence Service

The article is really good. Please tell more on how to persist on Oracle DB. If possible, with an example.

Thanks

Wednesday, February 7, 2007 1:56 AM by moredotnet

# re: Window Workflow Foundation Runtime Services: The Persistence Service

This article is very nice, but I need information on how to persist on Oracle DB. Please look at in to this request.

Wednesday, February 7, 2007 3:46 AM by Satya Kollapudi

# re: Window Workflow Foundation Runtime Services: The Persistence Service

This article is very helpful but do you have any sample codes in making Custom Persistence Service for databases?

Thursday, February 8, 2007 9:26 PM by Kyle San Diego

# re: Window Workflow Foundation Runtime Services: The Persistence Service

Agreed.  Great article.  Any chance of seeing an Oracle example of this?

Monday, March 5, 2007 1:58 PM by Daniel

# re: Window Workflow Foundation Runtime Services: The Persistence Service

Most of professionnal users will require an ORACLE adapter to use it on Oracle DB...

If I understood quite right the whole thing, this is namely to create an Oracle Table to save the serialized workflow and its GUID as primary key in a relationnal table

Tell me if I am wrong !

Wednesday, March 28, 2007 11:56 AM by Yannick

# re: Window Workflow Foundation Runtime Services: The Persistence Service

I am having a huge problem using the persistence service in a workflow project that consumes webservices. When I call the Unload method, I get an error telling me that my web service is not marked as serializable. What is going on????? Why does persistence have anything to do with the web reference??

Can you help me?

Wednesday, April 11, 2007 1:25 PM by Joe Krueger

# re: Window Workflow Foundation Runtime Services: The Persistence Service

Is it possible to seperate the persistate and the unload of the workflow?

Wednesday, May 30, 2007 9:55 AM by mark

# re: Window Workflow Foundation Runtime Services: The Persistence Service

I believe a help ful starter for a begginer

Tuesday, August 7, 2007 8:31 AM by srinivas

# re: Window Workflow Foundation Runtime Services: The Persistence Service

I have a problem with a custom implementation of the Windows Workflow Persistence Service that writes to file. If the host application quits while there are workflow instances on idle states due to delay activity, when loads again I need to manually tell the runtime "WF_Runtime.GetWorkflow(InstanceId)" even when the workflow instance time of delay aren't finished yet. Doing so makes everything works, but if not the instances never load again even when the delay activity's time finish. Although if I use an ExternalCall activity the "GetWorkflow"'s call is not necessary. At the same time if I never close the host application both types of activities works fine without the call.

What do you thing I'm doing wrong?

The implementation of the file persistence service I'm testing is the one given on the Windows Vista and Framework 3 SDK.

Thanks in advance, Nils.

Thursday, April 17, 2008 6:51 PM by nils

# re: Window Workflow Foundation Runtime Services: The Persistence Service

I don’t see NextTimer field in ur Table. I’m considering how the workflow runtime engine can “complete” the workflow instance when DelayActivity timeout?

I have problem with it.

Please give me some advice to solve this one.

Tuesday, July 8, 2008 12:42 AM by Thanh

# re: Window Workflow Foundation Runtime Services: The Persistence Service

Thinking about a church wedding? Congratulations, we wish you well as you begin

your journey into married life. In this section you will find a number of ...

Friday, October 17, 2008 8:44 AM by fadikjan

# re: Window Workflow Foundation Runtime Services: The Persistence Service

I have a different situation. I want to get a deep clone of a persisted workflow and move it to another state. the clone changes the state not the original one. I am fine if the GUID changes for the instance iD.

Is it anyway doable?

Thursday, March 5, 2009 7:46 AM by robin

# re: Window Workflow Foundation Runtime Services: The Persistence Service

So where it to find,

Wednesday, July 29, 2009 12:19 PM by name

# re: Window Workflow Foundation Runtime Services: The Persistence Service

So where it to find?,

Thursday, July 30, 2009 1:59 AM by name

# re: Window Workflow Foundation Runtime Services: The Persistence Service

Nice post! GA is also my biggest earning. However, it’s not a much.

Sunday, October 11, 2009 12:18 AM by shelpblethy

# re: Window Workflow Foundation Runtime Services: The Persistence Service

This brings to mind this thing my mom used to say...

Obviously it's surely inappropriate right this moment...

Wednesday, November 11, 2009 7:23 PM by Cynthia Roberts

# re: Window Workflow Foundation Runtime Services: The Persistence Service

This brings to mind this thing my grandma always said...

However it is probably inappropriate right now...

Wednesday, November 11, 2009 11:53 PM by James Anderson

# re: Window Workflow Foundation Runtime Services: The Persistence Service

This brings to mind something funny that my uncle always said...

Obviously it's definitely not appropriate at this time...

Thursday, November 12, 2009 12:04 AM by Wayne West

# re: Window Workflow Foundation Runtime Services: The Persistence Service

This brings back to mind this thing my mom used to say...

But then it's most likely inappropriate just now...

Thursday, November 12, 2009 1:27 AM by Marilyn Hernandez

# re: Window Workflow Foundation Runtime Services: The Persistence Service

This brings back to mind something that my grandmother would always say...

Then its totally not appropriate right this moment...

Thursday, November 12, 2009 3:07 AM by Jeffrey Jordan

# re: Window Workflow Foundation Runtime Services: The Persistence Service

This brings back to mind something that my sister always said...

But then it is so not appropriate just now...

Thursday, November 12, 2009 5:45 AM by Nicole Harris

# re: Window Workflow Foundation Runtime Services: The Persistence Service

This reminds me of something that my aunt always said...

However it's probably inappropriate just now...

Thursday, November 12, 2009 6:07 AM by Virginia Fisher

# re: Window Workflow Foundation Runtime Services: The Persistence Service

This brings back to mind something my grandfather always said...

However it is surely not appropriate right this moment...

Thursday, November 12, 2009 7:33 AM by Jeremy Ross

# re: Window Workflow Foundation Runtime Services: The Persistence Service

Hi there, I begin your blog via Google while searching for the purpose cardinal abet representing a marrow descend upon and your post looks definitely beguiling seeing that me

Saturday, August 28, 2010 9:59 PM by albuterol sulfate

# re: Window Workflow Foundation Runtime Services: The Persistence Service

Look before you leap

Monday, December 6, 2010 10:56 AM by bama belles

# re: Window Workflow Foundation Runtime Services: The Persistence Service

The best hearts are always the bravest.

-----------------------------------

Friday, December 17, 2010 9:03 PM by ipad app template

# re: Window Workflow Foundation Runtime Services: The Persistence Service

-----------------------------------------------------------

My English conversation isn't so super butI think I understand everything. Give thanks to u so much for that great weblog publish. I really get pleasure from reading it. I believe you  are a absolute writer. At this second added ur internet site to my favorites and can come once more to yor web page. Keep up that wonder operate. Hope to see  a lot more soon.

Saturday, January 8, 2011 9:00 PM by best ipad stand

# re: Window Workflow Foundation Runtime Services: The Persistence Service

It's an ill wind that blows no one any good

Tuesday, January 18, 2011 9:53 AM by nolvadex Generico

# re: Window Workflow Foundation Runtime Services: The Persistence Service

People who live in glass houses shouldn't throw stones

Sunday, January 23, 2011 7:48 AM by silagra 100 used for

# re: Window Workflow Foundation Runtime Services: The Persistence Service

It's all grist to the mill

Saturday, January 29, 2011 8:31 AM by lasix medicamento

# re: Window Workflow Foundation Runtime Services: The Persistence Service

Marriages are made in heaven

Thursday, February 17, 2011 7:08 PM by Wholesale-oem-software

# re: Window Workflow Foundation Runtime Services: The Persistence Service

While there's life there's hope

Saturday, February 19, 2011 9:23 PM by serien online schauen

# re: Window Workflow Foundation Runtime Services: The Persistence Service

The premise of Caesar’s skit quickly became dated as Tom Monaghan institutionalized the innovation that transformed America’s infatuation with pizza into a lasting relationship: home delivery.

"I call it happy food," Slomon said.

Thursday, March 10, 2011 9:56 AM by Pizza

# re: Window Workflow Foundation Runtime Services: The Persistence Service

A poor man is fain of little.

Friday, March 18, 2011 7:54 PM by Roberto Cavalli Dress

# re: Window Workflow Foundation Runtime Services: The Persistence Service

I just book marked your blog on Digg and StumbleUpon.I enjoy reading your commentaries.

Friday, March 18, 2011 8:35 PM by KemeImmolfefe

# re: Window Workflow Foundation Runtime Services: The Persistence Service

I am am excited too with this question. You will not prompt to me, where I can find more information on this question?

Tuesday, March 22, 2011 7:21 PM by zuzana-zeleznovova

# re: Window Workflow Foundation Runtime Services: The Persistence Service

Hello! I love watching football and I loved your blog as well.

Saturday, May 21, 2011 8:54 AM by football

# re: Window Workflow Foundation Runtime Services: The Persistence Service

I adore your wp web template, where did you get a hold of it?

Wednesday, July 6, 2011 4:24 PM by Mariann Keamo

# re: Window Workflow Foundation Runtime Services: The Persistence Service

The guidelines you shared here are actually valuable. Rrt had been such a fun surprise to have that waiting for me right after i woke up this extremely day. They're consistently to the point and straightforward to find out. Thanks a ton for the valuable ideas you've got shared proper here.

Sunday, July 10, 2011 6:39 AM by Ute Joyne

# re: Window Workflow Foundation Runtime Services: The Persistence Service

I think this is a real great blog article.Really looking forward to read more. Much obliged.

Friday, April 13, 2012 12:22 PM by laptop notebook

# re: Window Workflow Foundation Runtime Services: The Persistence Service

composed by hsm 2012-05-28

Thursday, May 31, 2012 3:58 AM by Beetafriele

# re: Window Workflow Foundation Runtime Services: The Persistence Service

mr5UXA Major thanks for the blog post.Really looking forward to read more. Awesome.

Monday, July 9, 2012 10:41 AM by Article Submission

# re: Window Workflow Foundation Runtime Services: The Persistence Service

ERYERSDGSADADFHAD  YUKYSDGSADDSFGHADS

YUYSDGSADSDGASD  YUYASDGASDDFHAD

DSGAASDGASDSDGASD  FGBNFZSDGASDADFHAD

QWERSDGSADADFHAD  GJTRADFHGDAFADFHGAD

Sunday, August 26, 2012 6:56 PM by smadayKab

# re: Window Workflow Foundation Runtime Services: The Persistence Service

YUYADFGASDGSDFH  ASFDADFHGDAFSDAFHSAD

YUKYADFHGDAFDSFGHADS  SDGSDZSDGASDSDAFHSAD

ZVXZADFHGDAFXZCBZX  FGBNFSDGSADGASDFHGAD

YUYSDGSADADFHAD  SDGSDASDGASDXZCBZX

Sunday, August 26, 2012 7:19 PM by reriAcroria

# re: Window Workflow Foundation Runtime Services: The Persistence Service

ASFDSDGSADSDAFHSAD  ADFHGSDGSADASDFHGAD

ASFDSDGSADDSFGHADS ZVXZADFHGDAFADFHAD

ASFDASDGASDASDGHASD ZVXZASDGASDADFHGAD

YUYZSDGASDDFHAD YUKYSDGSADDSFGHADS

Sunday, August 26, 2012 10:28 PM by Asteleplorept

# re: Window Workflow Foundation Runtime Services: The Persistence Service

SDGSDZSDGASDASDFHGAD  YUYADFGASDGASDFHGAD

GJTRADFGASDGSDAFHSAD ADFHGSDGSADDFHAD

ASFDSDGSADGSDAFHSAD ASFDSDGSADASDFHGAD

ADFHGSDGSADGXZCBZX ASFDZSDGASDADFHAD

Tuesday, September 4, 2012 2:22 PM by GafeWrofe

# re: Window Workflow Foundation Runtime Services: The Persistence Service

SDGSDSDGSADSDGASD  ZVXZASDGASDADFHAD

ASFDZSDGASDDSFGHADS  ADFHGSDGSADADFHGAD

GJTRSDGSADASDFHGAD  YUKYADFHGDAFSDAFHSAD

ZVXZADFHGDAFXZCBZX  ERYERADFHGDAFASDFHGAD

Wednesday, September 5, 2012 6:09 AM by Zesemensush

# re: Window Workflow Foundation Runtime Services: The Persistence Service

YUYZSDGASDXZCBZX  SDGSDSDGSADGSDAFHSAD

SDGSDASDGASDSDAFHSAD  ASFDSDGSADADFHAD

ERYERSDGSADADFHAD  ERYERADFHGDAFADSFHGADFS

ASFDADFHGDAFSDGASD  YUYZSDGASDASDFHGAD

Thursday, September 13, 2012 8:58 PM by Choifebiole

# re: Window Workflow Foundation Runtime Services: The Persistence Service

DSGASDGSADASDGHASD  YUKYSDGSADDSFGHADS

FGBNFSDGSADGASDGHASD  ADFHGASDGASDSDAFHSAD

SDGSDSDGSADADSFHGADFS  DSGAZSDGASDXZCBZX

GJTRSDGSADADFHGAD  ADFHGASDGASDASDFHGAD

Tuesday, September 18, 2012 9:23 PM by myncWrismic

# re: Window Workflow Foundation Runtime Services: The Persistence Service

YUKYSDGSADDSFGHADS  ZVXZADFHGDAFSDAFHSAD

FGBNFSDGSADGDFHAD  GJTRADFHGDAFASDFHGAD

FGBNFSDGSADGXZCBZX  YUYZSDGASDASDGHASD

QWERZSDGASDSDGASD  SDGSDADFGASDGADFHAD

Wednesday, September 19, 2012 9:55 PM by Blawlnard

# re: Window Workflow Foundation Runtime Services: The Persistence Service

qF9Mni Thanks for sharing, this is a fantastic post.Thanks Again. Keep writing.

Wednesday, September 19, 2012 9:58 PM by crork

# re: Window Workflow Foundation Runtime Services: The Persistence Service

ASFDZSDGASDADFHGAD  SDGSDASDGASDADSFHGADFS

DSGASDGSADASDGHASD  GJTRADFHGDAFDFHAD

QWERADFHGDAFADFHGAD  ASFDADFHGDAFDFHAD

SDGSDADFGASDGASDFHGAD  DSGASDGSADXZCBZX

Thursday, September 20, 2012 3:09 AM by Choifebiole

# re: Window Workflow Foundation Runtime Services: The Persistence Service

8KWW2X Very informative blog.Thanks Again.

Thursday, September 20, 2012 1:26 PM by cheap seo services

# re: Window Workflow Foundation Runtime Services: The Persistence Service

Major thankies for the blog article. Fantastic.

Wednesday, October 31, 2012 11:19 AM by help me lose weight

# re: Window Workflow Foundation Runtime Services: The Persistence Service

DDfLhR I truly appreciate this blog article.Really looking forward to read more. Great.

Sunday, November 25, 2012 1:47 AM by Seo Company