<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Marcel de Vries, MVP Team System </title><link>http://blogs.infosupport.com/blogs/marcelv/default.aspx</link><description>.NET Technologies, Architecture and Web Development</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Marcelv" type="application/rss+xml" /><item><title>How to fix Team build Error in TFS2010 “MSTest.exe not found”</title><link>http://feedproxy.google.com/~r/Marcelv/~3/45y1-gP2IQ4/how-to-fix-team-build-error-in-tfs2010-mstest-exe-not-found.aspx</link><pubDate>Thu, 11 Jun 2009 11:57:28 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:16127</guid><dc:creator>marcelv</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.infosupport.com/blogs/marcelv/rsscomments.aspx?PostID=16127</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/marcelv/archive/2009/06/11/how-to-fix-team-build-error-in-tfs2010-mstest-exe-not-found.aspx#comments</comments><description>&lt;p&gt;I must say it really helps a lot when you have someone available from the dev teams to solve some issues with the Beta Bits. As I told in my previous post I worked with Adam Bar from the Microsoft North Carolina Office for our devdays pre-conference. While working on my demo’s I ran into a problem where I did have a tests working locally, but once I ran an Team Build on the solution, I always got the message that MSTest.exe could not be found.&lt;/p&gt;  &lt;p&gt;This happened to be a known bug on 64 bit machines and can easily be fixed by adding a registry key to the non wow64 node in the registry. It appears that in Beta 1, from the team build environment the location of MSTest is searched in the non 64bit registry location. What you need to do to fix this problem is the following:&lt;/p&gt;  &lt;p&gt;Use regedit to add the following Key:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Key Name: &lt;strong&gt;&lt;em&gt;InstallDir &lt;/em&gt;&lt;/strong&gt;and set that key to the location where Visual Studio 2010 is installed (e.g. C:\program files\ Microsoft Visual Studio 10\Common7\IDE)&lt;/p&gt;  &lt;p&gt;Now start a new build and you will see the build will find MSTest again :-)    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Cheers,    &lt;br /&gt;Marcel&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=16127" width="1" height="1"&gt;</description><feedburner:origLink>http://blogs.infosupport.com/blogs/marcelv/archive/2009/06/11/how-to-fix-team-build-error-in-tfs2010-mstest-exe-not-found.aspx</feedburner:origLink></item><item><title>Visual Studio 2010 Beta 1: How to fix Worklow designer crash</title><link>http://feedproxy.google.com/~r/Marcelv/~3/vbr4bRAUFDE/visual-studio-2010-beta-1-how-to-fix-worklow-designer-crash.aspx</link><pubDate>Wed, 10 Jun 2009 19:54:37 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:16118</guid><dc:creator>marcelv</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.infosupport.com/blogs/marcelv/rsscomments.aspx?PostID=16118</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/marcelv/archive/2009/06/10/visual-studio-2010-beta-1-how-to-fix-worklow-designer-crash.aspx#comments</comments><description>&lt;p&gt;Last week I gave a presentation internally at our Info Support Knowledge Transfer evenings. Based on a deep dive training I got to attend on Campus begin of May, I presented a session on Windows Workflow 4.0. As you might know I am passionate about two technologies that I try to dig into as deep a s possible and those are visual Studio Team System and Windows Workflow Foundation. During the preparation of my talk on workflow, I obviously wanted to show some workflow designs and create some designs on the fly.&lt;/p&gt;  &lt;p&gt;But Every time I wanted to create a new Workflow, the designer crashed and Visual Studio got closed :-(&lt;/p&gt;  &lt;p&gt;It took me some while to discover that the crash was caused by the Visual Basic expression editor that gets activated once you create a workflow. This editor was unable to load a required assembly. It appears that this was caused by the fact that I installed Visual Studio at a different location then the default c:\ drive.&lt;/p&gt;  &lt;p&gt;In the Beta the bits don’t check the install directory location in the registry but just assume this to be the default location.&lt;/p&gt;  &lt;p&gt;But how could I fix this? I did install on D:\ and was not willing to install again, since that would take a lot of time.&lt;/p&gt;  &lt;p&gt;After some digging around I found a great solution that is posted at the &lt;a href="https://connect.microsoft.com/VisualStudio/feedback/Workaround.aspx?FeedbackID=457783" target="_blank"&gt;connect site&lt;/a&gt;. You can create a symbolic link at the OS level on the file system.     &lt;br /&gt;When you make a c:\profgram Files\Visual Studio 10.0 directory point to the actual installation on the D:\ drive the issue is solved.&lt;/p&gt;  &lt;p&gt;You can use the mklink command for that and specify the /J option to create a directory junction. After running mklink as an administrator and restarting Visual Studio , I was able to create workflows.&lt;/p&gt;  &lt;p&gt;Hope this helps if you run into the same issue.&lt;/p&gt;  &lt;p&gt;Cheers    &lt;br /&gt;Marcel&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=16118" width="1" height="1"&gt;</description><feedburner:origLink>http://blogs.infosupport.com/blogs/marcelv/archive/2009/06/10/visual-studio-2010-beta-1-how-to-fix-worklow-designer-crash.aspx</feedburner:origLink></item><item><title>How to make Layer Validation Diagrams work in the build</title><link>http://feedproxy.google.com/~r/Marcelv/~3/fWBGGvfEfFs/how-to-make-layer-validation-diagrams-work-in-the-build.aspx</link><pubDate>Tue, 09 Jun 2009 21:10:19 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:16114</guid><dc:creator>marcelv</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.infosupport.com/blogs/marcelv/rsscomments.aspx?PostID=16114</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/marcelv/archive/2009/06/09/how-to-make-layer-validation-diagrams-work-in-the-build.aspx#comments</comments><description>&lt;p&gt;In Visual studio 2010 Team Architect edition, you have a new type of diagram available, called the layer diagram. What is great about this diagram is that you can use it to actually validate if the source code you have written adheres to the rules you defined in terms of allowed dependencies between layers. This adds great value to the notion of modeling the layers for your product and can help you mandate the rules you pose as an architect are actually followed by the development team.&lt;/p&gt;  &lt;p&gt;In the visual studio IDE you can run a layer validation just by right clicking the diagram and selecting the option Validate, as show in screenshot below:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marcelv/image_5F00_0DDDAE1C.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marcelv/image_5F00_thumb_5F00_2A972331.png" width="770" height="432" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;But what If I want to run this validation every time you compile the project, or even better during each build we run on the build server?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/camerons/" target="_blank"&gt;Cameron Skinner&lt;/a&gt; has a &lt;a href="http://blogs.msdn.com/camerons/archive/2008/12/11/incorporate-layer-validation-in-your-builds.aspx" target="_blank"&gt;blog post&lt;/a&gt; based on the PDC CTP bits, on how you can create the layer diagram and link it into your solution for validation. The Beta 1 we currently use has the option to Validate default available in the dropdown of available actions for the linked diagram. But unfortunately it does not validate straight out of the box. &lt;/p&gt;  &lt;p&gt;It took me quite some digging around in the target files that come with the architect edition, but I discovered that there is a property called ValidateArchitectureOnBuild that enables or disables the layer validation during the build.&lt;/p&gt;  &lt;p&gt;So in order to enable the build during build, you must add this property to your build file. This can be done by unloading the project and adding the property to the property group that contains several options you select in the properties page of your project. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;lt;PropertyGroup&amp;gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;…     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;font color="#ff0000"&gt;ValidateArchitectureOnBuild&lt;/font&gt;&amp;gt;true&amp;lt;/&lt;font color="#ff0000"&gt;ValidateArchitectureOnBuild&lt;/font&gt;&amp;gt;      &lt;br /&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Once you reload the the project and run a local compile you will see the layer diagram is validated during the compilation pass.&lt;/p&gt;  &lt;p&gt;Hope this helps you get layer validation running as an integral part of your build process :-)&lt;/p&gt;  &lt;p&gt;cheers,   &lt;br /&gt;Marcel&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=16114" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/DSL/default.aspx">DSL</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/MVP/default.aspx">MVP</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Rosario/default.aspx">Rosario</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><feedburner:origLink>http://blogs.infosupport.com/blogs/marcelv/archive/2009/06/09/how-to-make-layer-validation-diagrams-work-in-the-build.aspx</feedburner:origLink></item><item><title>Devdays 2009</title><link>http://feedproxy.google.com/~r/Marcelv/~3/2Y0XTKuuXqY/devdays-2009.aspx</link><pubDate>Thu, 04 Jun 2009 21:11:47 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:16083</guid><dc:creator>marcelv</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.infosupport.com/blogs/marcelv/rsscomments.aspx?PostID=16083</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/marcelv/archive/2009/06/04/devdays-2009.aspx#comments</comments><description>&lt;p&gt;It has been a few days since we held developer days conference here in the Netherlands. I Must say I was quite pleased to see there where so many attendees especially with the current economic situation.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.devdays.nl/" target="_blank"&gt;Devdays&lt;/a&gt; is always this special week in the year for me since I tend to always give sessions on the latest greatest technologies and they also happen to ship a CTP or beta drop just a week for such a conference. This year again I had to work day and night to get all demo’s working on the latest available bits since that gives the best impression for the attendees in terms of the current available feature set. This year I presented a Pre Conference session on Visual Studio Team System 2010, together with &lt;strong&gt;&lt;em&gt;Adam Barr&lt;/em&gt;&lt;/strong&gt;, who is a Test lead at Microsoft on Team foundation sever. Adam Arrived on Monday and we spend two days getting all the demo’s working correctly. Also Edd Glas from the Team Test Team got over and presented part of the preconference. We decided it was great for the preconference audience to have two people straight from the trenches telling about what they are building. The total content for the Pre Conference covers over 6 hours of content and demos on what is all in the product, and the feedback received during the session was very positive.&lt;/p&gt;  &lt;p&gt;On Devdays day 1, I got my personal 2 Minutes of fame during the Keynote Session. (aprox. 1800 people attending). Begin of January I have been selected to become a &lt;a href="http://www.theregion.com/profile.aspx?rd=1390" target="_blank"&gt;Microsoft regional Director&lt;/a&gt; for the Netherlands together with &lt;a href="http://blogs.class-a.nl/blogs/anko/" target="_blank"&gt;Anko Duizer&lt;/a&gt;. During the Keynote I was asked to talk in maximum 2 Minutes on my vision on ALM and what people should expect to happen in that space the coming year. I Got an picture of a Colleague of mine that has me on stage during the Keynote.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marcelv/DSC00569_5F00_0600D4FB.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="Devdays Keynote" border="0" alt="Devdays Keynote" src="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marcelv/DSC00569_5F00_thumb_5F00_2AB1EC72.jpg" width="472" height="359" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; I must say it really looks different from the other side when you are on stage :-)&lt;/p&gt;  &lt;p&gt;The second Day I gave my Last session that is called “Modeling that works with code” where I show what you can do with all the great new Modeling and DSL stuff shipping with Team Architect Edition 2010. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marcelv/DSC00582_5F00_575AA64B.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="DSC00582" border="0" alt="DSC00582" src="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marcelv/DSC00582_5F00_thumb_5F00_00160B95.jpg" width="467" height="355" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is where I showed the value of modeling up front and Bottom up by generating UML Sequence Diagrams and DGML Diagrams based on the code you have. One of the demo’s I gave was something I was able to craft up with the Help of &lt;a href="http://www.edwardbakker.nl/" target="_blank"&gt;Edward&lt;/a&gt; and &lt;a href="http://www.clemensreijnen.nl/" target="_blank"&gt;Clemens&lt;/a&gt;. This is a Demo where you can create new DGML Models using the available .NET API’s. This is very powerful if you e.g. use this in a Daily build and generate diagrams that show stuff like: Classes with a Code Coverage below a certain quality bar, Hot Maps in terms of code Churn mapped to all projects in your product, Lines of code expressed in the size of DGML Nodes, etc. It is amazing what the possibilities are. &lt;a href="http://www.clemensreijnen.nl/" target="_blank"&gt;Clemens&lt;/a&gt; and &lt;a href="http://www.edwardbakker.nl/" target="_blank"&gt;Edward&lt;/a&gt; are working e.g. on &lt;a href="http://www.edwardbakker.nl/PermaLink,guid,19de7161-769f-4b70-81b6-b435c0557093.aspx" target="_blank"&gt;Architectural Inspections&lt;/a&gt; based on the archetypes described in the Patterns And Practices application architecture guide. &lt;/p&gt;  &lt;p&gt;If you are interested in the slides from this session, you can download them &lt;a href="http://blogs.infosupport.com/media/p/16082.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;In a Next Post I will show you how easily you can create a new Diagram based on the available API, and some fixes on visual Studio 2010 I needed to make for all the demo’s to work.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=16083" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Working+at+Info+Support/default.aspx">Working at Info Support</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Training+and+conferences/default.aspx">Training and conferences</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/MVP/default.aspx">MVP</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Regional+Director/default.aspx">Regional Director</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><feedburner:origLink>http://blogs.infosupport.com/blogs/marcelv/archive/2009/06/04/devdays-2009.aspx</feedburner:origLink></item><item><title>How to enable code coverage in Visual Studio 2010 Unit tests</title><link>http://feedproxy.google.com/~r/Marcelv/~3/4k8RT-YpnOE/how-to-enable-code-coverage-in-visual-studio-2010-unit-tests.aspx</link><pubDate>Thu, 21 May 2009 23:14:06 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:15951</guid><dc:creator>marcelv</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.infosupport.com/blogs/marcelv/rsscomments.aspx?PostID=15951</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/marcelv/archive/2009/05/22/how-to-enable-code-coverage-in-visual-studio-2010-unit-tests.aspx#comments</comments><description>&lt;p&gt;When you want to Enable code coverage in an Unit test run in Visual Studio 2010 you may find that the steps you need to take have changed.    &lt;br /&gt;In Visual Studio 2010 you need to take the following steps:&lt;/p&gt;  &lt;p&gt;Open the Local.testsettings file and there you will see a set of items you can configure on the left hand of the dialog.    &lt;br /&gt;&lt;a href="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marcelv/image_5F00_6EE109F4.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marcelv/image_5F00_thumb_5F00_16C40954.png" width="525" height="395" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Here you need to select the “Execution Criteria” in the left list and then you can see at the bottom of the page the set of collectors that are enabled for a test run.&lt;/p&gt;  &lt;p&gt;In this list you need to select the “Code Coverage” item and mark the enabled check box. In the 2008 ide you would direct see the assemblies that are part of the coverage gathering during the run. In the 2010 dialog you can select the assemblies by first clicking on the “Code Coverage” row in the collectors list and then clicking the “Advanced…” button. Then you will see the more familiar dialog again as shown below:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marcelv/image_5F00_0D87CE13.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marcelv/image_5F00_thumb_5F00_40E3916F.png" width="479" height="331" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Here you need to pick the assembly that is under test and click “Ok”&lt;/p&gt;  &lt;p&gt;Now when you run another unit test you will see code coverage is now enabled.    &lt;br /&gt;When you take&amp;#160; a further look into the set of collectors you might also see a set of new collectors that you have not seen before.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marcelv/image_5F00_18D0E250.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marcelv/image_5F00_thumb_5F00_47D31E27.png" width="447" height="336" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;When you enable e.g. the video recorder, you will get an video capture of your computer while the test was running. While this is less interesting for a Unit test that has no UI interactions, this is very interesting when you create a new type of test called Code UI test that can run an previously recorded UI test and replay it on a test machine. You can see the &lt;a href="http://channel9.msdn.com/shows/10-4/10-4-Episode-18-Functional-UI-Testing/" target="_blank"&gt;channel 9 video&lt;/a&gt; that shows more about coded UI testing if you want some more information on that new feature.&lt;/p&gt;  &lt;p&gt;What is interested to see is enabling e.g. the Test Impact collector, that enables the Test Impact feature. Once this collector has run, you can see in the Visual Studio IDE a list of suggested tests based on code changes you have made to your local source. This enables you to run a minimum set of tests to verify changes you have made to the codebase. this test impact analysis can even be used during the Team Builds run e.g. every night on a server, so you can have a lean and mean build that runs only impacted tests to verify regression on previous tests.&lt;/p&gt;  &lt;p&gt;When you create a new Unit test in a solution you also might notice that there is a second “testsettings” file created called “TraceAndTestImpact.testsettings”. this file contains all the settings to run a set of unit tests with the correct settings that enable test impact analysis.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=15951" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><feedburner:origLink>http://blogs.infosupport.com/blogs/marcelv/archive/2009/05/22/how-to-enable-code-coverage-in-visual-studio-2010-unit-tests.aspx</feedburner:origLink></item><item><title>Windows 7 RC available soon, very soon </title><link>http://feedproxy.google.com/~r/Marcelv/~3/OlAwJnVn0rs/windows-7-rc-available-soon-verry-soon.aspx</link><pubDate>Sun, 26 Apr 2009 22:39:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:15722</guid><dc:creator>marcelv</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.infosupport.com/blogs/marcelv/rsscomments.aspx?PostID=15722</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/marcelv/archive/2009/04/26/windows-7-rc-available-soon-verry-soon.aspx#comments</comments><description>&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;Today I received information that I am allowed to disclose that most people will find very exiting:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;Windows 7 &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;RC will be available end of this week!&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;For MSDN subscribers it will be available at our Queens birthday, April 30th, for the public it will be downloadable May 5th&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;You can read more about it &lt;a target="_blank" href="http://windowsteamblog.com/blogs/windows7/archive/2009/04/24/windows-7-release-candidate-update.aspx"&gt;here&lt;/a&gt; on the Windows 7 blog.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;Can&amp;#39;t wait to get my hand on this new build, it really looks promising if you take a look at all the improvements made while I liked the new OS already :-)&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;Cheers,&lt;br /&gt;Marcel&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=15722" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Windows7/default.aspx">Windows7</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Regional+Director/default.aspx">Regional Director</category><feedburner:origLink>http://blogs.infosupport.com/blogs/marcelv/archive/2009/04/26/windows-7-rc-available-soon-verry-soon.aspx</feedburner:origLink></item><item><title>How to assign a work item to a group and actually have it show a list of values</title><link>http://feedproxy.google.com/~r/Marcelv/~3/5YnY3Q0VlpA/how-to-assign-a-work-item-to-a-group-and-actually-have-it-show-a-list-of-values.aspx</link><pubDate>Tue, 07 Apr 2009 20:45:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:15588</guid><dc:creator>marcelv</dc:creator><slash:comments>6</slash:comments><wfw:commentRss>http://blogs.infosupport.com/blogs/marcelv/rsscomments.aspx?PostID=15588</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/marcelv/archive/2009/04/07/how-to-assign-a-work-item-to-a-group-and-actually-have-it-show-a-list-of-values.aspx#comments</comments><description>&lt;blockquote&gt;
&lt;p&gt;Today I was asked one of the most asked questions related to work item tracking: &amp;ldquo;Can you can assign a work item to a group in stead of a person&amp;rdquo;?&lt;/p&gt;
&lt;p&gt;My standard answer to this question is &amp;ldquo;yes&amp;rdquo; and I tell people this can be easily be done by setting the ALLOWEDVALUES to include the attribute expanditems = &amp;ldquo;false&amp;rdquo; and add list items that contain the TFS group names.&lt;/p&gt;
&lt;p&gt;Since the question came from my team mate I said I would fix the work item type so he did not have to spend to much time for this simple change.&lt;/p&gt;
&lt;p&gt;To my surprise I found that it is easy but you have to know one additional fact and that is that you must not have altered the System.AssignedTo to only allow valid users!&lt;/p&gt;
&lt;p&gt;So what happened?&lt;/p&gt;
&lt;p&gt;I have a work item type called &lt;strong&gt;&amp;ldquo;Deliverable&amp;rdquo;&lt;/strong&gt;. This is a work item that can be assigned to a group of developers, designers, testers, etc. So the requirement was simple, have this work item only assigned to a group in stead of a person. What I did was quite simple, for each state definition I just set the ALLOWEDVALUES to the list of groups I want to have the work item assigned to. See the example below:&lt;/p&gt;
&lt;p&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="background-color:#f2f2f2;border:solid 1px #e5e5e5;width:100%;"&gt;
    &lt;tr style="vertical-align:top;line-height:normal;"&gt;
        &lt;td style="width:40px;text-align:right;"&gt;
            &lt;pre style="font-family:courier new;font-size:11px;color:gray;margin:0px;padding:2px;border-right:solid 1px #e7e7e7;"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&lt;/pre&gt;&lt;/td&gt;
        &lt;td&gt;
            &lt;pre style="overflow:scroll;margin:0px;padding:2px;padding-left:8px;"&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt; 
&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;STATE&lt;/span&gt; &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;value&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&amp;quot;Scoped&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;gt;&lt;/span&gt; 
   &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;FIELDS&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;gt;&lt;/span&gt; 
      &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;FIELD&lt;/span&gt; &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;refname&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&amp;quot;System.AssignedTo&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;gt;&lt;/span&gt; 
          &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;ALLOWEDVALUES&lt;/span&gt; &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;expanditems&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;gt;&lt;/span&gt; 
                &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;LISTITEM&lt;/span&gt; &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;value&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&amp;quot;[project]\Project Managers&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/&amp;gt;&lt;/span&gt; 
                &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;LISTITEM&lt;/span&gt; &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;value&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&amp;quot;[project]\Feature Managers&amp;quot;&lt;/span&gt;  &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/&amp;gt;&lt;/span&gt; 
                &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;LISTITEM&lt;/span&gt; &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;value&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&amp;quot;[project]\Software Architects&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/&amp;gt;&lt;/span&gt; 
                &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;LISTITEM&lt;/span&gt; &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;value&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&amp;quot;[project]\Designers&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/&amp;gt;&lt;/span&gt; 
                &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;LISTITEM&lt;/span&gt; &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;value&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&amp;quot;[project]\Implementers&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/&amp;gt;&lt;/span&gt; 
                &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;LISTITEM&lt;/span&gt; &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;value&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&amp;quot;[project]\Testers&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/&amp;gt;&lt;/span&gt; 
                &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;LISTITEM&lt;/span&gt; &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;value&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&amp;quot;[project]\Integrators&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/&amp;gt;&lt;/span&gt; 
          &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;ALLOWEDVALUES&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;gt;&lt;/span&gt; 
          &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;REQUIRED&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/&amp;gt;&lt;/span&gt; 
       &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;FIELD&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;gt;&lt;/span&gt; 
   &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;FIELDS&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;gt;&lt;/span&gt; 
&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;STATE&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;&lt;/p&gt;
&lt;p&gt;After uploading the work item, I got a strange surprise, the assigned to field always appeared empty &lt;img src="http://blogs.infosupport.com/emoticons/emotion-6.gif" alt="Sad" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marcelv/image_5F00_2513DEF8.png"&gt;&lt;img height="369" width="507" src="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marcelv/image_5F00_thumb_5F00_37E862A2.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;It took me quite some time to figure out what happened here. I finally figured out that this is caused by the fact that the Work Item Field definition for System.AssignedTo has a constraint set of &amp;lt;VALIDUSER/&amp;gt; and a TFS group is not considered to be a valid user. (This is something that probably your custom work item has as well since the common way to customize your work items is to pick the Microsoft work items and change those. The Microsoft work item types have this constraint set as well )&lt;/p&gt;
&lt;p&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="background-color:#f2f2f2;border:solid 1px #e5e5e5;width:100%;"&gt;
    &lt;tr style="vertical-align:top;line-height:normal;"&gt;
        &lt;td style="width:40px;text-align:right;"&gt;
            &lt;pre style="font-family:courier new;font-size:11px;color:gray;margin:0px;padding:2px;border-right:solid 1px #e7e7e7;"&gt;1
2
3
4
&lt;/pre&gt;&lt;/td&gt;
        &lt;td&gt;
            &lt;pre style="overflow:scroll;margin:0px;padding:2px;padding-left:8px;"&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt; 
&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;FIELD&lt;/span&gt; &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;reportable&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&amp;quot;dimension&amp;quot;&lt;/span&gt; &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;type&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&amp;quot;String&amp;quot;&lt;/span&gt; &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&amp;quot;Assigned To&amp;quot;&lt;/span&gt; &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;refname&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&amp;quot;System.AssignedTo&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;gt;&lt;/span&gt; 
&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;strong&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;gt;&lt;/span&gt;  &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;VALIDUSER&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/&amp;gt;&lt;/span&gt; 
&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:Maroon;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;FIELD&lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;&lt;/p&gt;
&lt;p&gt;So to fix this problem, I removed the &amp;lt;VALIDUSER/&amp;gt; constraint on the System.AssignedTo field. After removing the constraint and restarting Visual Studio after uploading the new type definition(I used WITImport at the command line, but this can also be done using the power tools) , the dropdown will show the options I expected to see.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marcelv/image_5F00_2F848D4B.png"&gt;&lt;img height="361" width="500" src="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marcelv/image_5F00_thumb_5F00_5B54E13A.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;So it is nice when you know the answer , but here you can see again that only knowing the answer is not enough to be productive, you actually have to have done this so you also know the problems you might run into &lt;img src="http://blogs.infosupport.com/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Hope this keeps you from pulling your hair out.&lt;/p&gt;
&lt;p&gt;Cheers, &lt;br /&gt;Marcel&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=15588" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Team+System+Extensibility/default.aspx">Team System Extensibility</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Team+Foundation+Server/default.aspx">Team Foundation Server</category><feedburner:origLink>http://blogs.infosupport.com/blogs/marcelv/archive/2009/04/07/how-to-assign-a-work-item-to-a-group-and-actually-have-it-show-a-list-of-values.aspx</feedburner:origLink></item><item><title>Hot fix available for Transaction inside receive activity scope bug workflow 3.5</title><link>http://feedproxy.google.com/~r/Marcelv/~3/NmlW6JgxZdU/Hot-fix-available-for-Transaction-inside-receive-activity-scope-bug-workflow-3.5.aspx</link><pubDate>Sun, 08 Mar 2009 22:57:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:15220</guid><dc:creator>marcelv</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.infosupport.com/blogs/marcelv/rsscomments.aspx?PostID=15220</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/marcelv/archive/2009/03/08/Hot-fix-available-for-Transaction-inside-receive-activity-scope-bug-workflow-3.5.aspx#comments</comments><description>&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Back in august I worked with a customer to build a workflow solution using Workflow 3.5. We crafted up a simple workflow where we would like to get a message into the workflow using the receive activity and then persist this call in the database, giving the caller a ticket that he can use later for reference. We could do some processing in the background and then when we finish the caller could get information based on the ticket. Now this is in my opinion a very common scenario that you probably will run into with your solutions as well.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;to make this scenario more reliable, we used a transaction scope activity to guard the database transaction and make sure the workflow get&amp;#39;s persisted in the same transaction. &lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;A simplified version of the workflow we used is shown below.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;img height="358" src="http://blogs.infosupport.com/photos/marcelv/images/15221/original.aspx" style="width:260px;height:358px;" width="260" /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Now this looks to work perfectly correct, but we discovered that if the transaction fails you will get the following error: &lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;&amp;quot;Workflow service unexpectedly unloaded from memory while executing a ReceiveActivity. Make sure that the the workflow does not contain any blocking activities within a ReceiveActivity.&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;After getting the error back the workflow will be terminated since it got an unexpected exception.&lt;br /&gt;Things can even become worse if you look from the messaging perspective, that the caller will recieve an timeout on the call, since no reply is send back. It appeared that this happened when you set the UnloadOnIdle&lt;span&gt;&amp;nbsp; &lt;/span&gt;to false.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;To make sure I did not do anything wrong I called a friend who is also very knowledgeable about workflow and asked him what his thoughts where. He also made a blog post about this issue and spend quite some time to figure out what was going wrong here. (http://msmvps.com/blogs/theproblemsolver/archive/2008/08/06/using-a-transactionscopeactivity-with-a-wcf-receiveactivity.aspx) &lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Finally I decided that this looked like a bug in the activities, so I issues a PSS call to ask for a hot fix for this problem. After working with the support department and some developers on a simple repro of the problem we finally got to the point that it was recognized as a bug and that they could build a hot fix to solve the problem. &lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;So back in November I received a private hot fix that solved the problem, but I wanted to make sure everybody else could leverage the fix as well, since this is such an common scenario. &lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;I crafted up some tests to show the problem and I could use that easily to verify if the hot fix solved the problem or not. You can see below that after applying the hot fix all tests showed green again :-)&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Before:&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;img height="204" src="http://blogs.infosupport.com/photos/marcelv/images/15222/original.aspx" width="552" /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;After:&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;img height="202" src="http://blogs.infosupport.com/photos/marcelv/images/15223/original.aspx" width="384" /&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Last week I got the official hot fix and the analysis back from the development team that states the following:&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;strong&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Root cause of the problem:&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;span style="color:#1f497d;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;WorkflowRequestContext, a member of ReceiveActivity, is not serialized as part of the checkpoint. Consequently, when we restore the checkpoint upon TSA fault, we are unable to send a reply message to the ReceiveActivity caller.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;span style="color:#1f497d;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;We produced a fix to address this issue and delivered to our customer. This fix will be part of the next major releases of WF 3.5 (if any). KB Article 959362 will be published soon&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;So if you have this same scenario in your solution, check what happens when your transaction fails, e.g. by stopping the database so the call will fail, and see if you run into the same issue. The problem I found with this bug, is that this only surfaces when you have good tests in place that also test for the failure of the transaction and that is probably not always the case. You might not even have noticed you have a problem, but at least you know you can get a hot fix now. You can refer to KB 959362 and they can hand you the hot fix for your environment.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Cheers,&lt;br /&gt;Marcel&lt;/font&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=15220" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/.NET+development/default.aspx">.NET development</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Windows+Workflow+Foundation/default.aspx">Windows Workflow Foundation</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><feedburner:origLink>http://blogs.infosupport.com/blogs/marcelv/archive/2009/03/08/Hot-fix-available-for-Transaction-inside-receive-activity-scope-bug-workflow-3.5.aspx</feedburner:origLink></item><item><title>Security update for Team System Web Access SP1</title><link>http://feedproxy.google.com/~r/Marcelv/~3/_qAaE3eTD5g/Security-update-for-Team-System-Web-Access-SP1.aspx</link><pubDate>Tue, 27 Jan 2009 22:11:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14986</guid><dc:creator>marcelv</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.infosupport.com/blogs/marcelv/rsscomments.aspx?PostID=14986</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/marcelv/archive/2009/01/27/Security-update-for-Team-System-Web-Access-SP1.aspx#comments</comments><description>&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;I just found out that on January 16th Microsoft has released an security update for Team System Web Access that I would urge everybody to install. You can read more on the update on Hakan Eskici&amp;#39;s blog &lt;a href="http://blogs.msdn.com/hakane/archive/2009/01/16/security-update-for-tswa-2008-sp1.aspx" target="_blank"&gt;here&lt;/a&gt;. &lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;Note that this is a full install so you must run an uninstall and install to complete. This means you will have some downtime to apply this update.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;I just wanted to give everybody a heads up on this.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;Cheers&lt;br /&gt;Marcel&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14986" width="1" height="1"&gt;</description><feedburner:origLink>http://blogs.infosupport.com/blogs/marcelv/archive/2009/01/27/Security-update-for-Team-System-Web-Access-SP1.aspx</feedburner:origLink></item><item><title>Yessssss, Another year as MVP!</title><link>http://feedproxy.google.com/~r/Marcelv/~3/y1r9sCOJglg/Yessssss_2C00_-Another-year-as-MVP_2100_.aspx</link><pubDate>Fri, 02 Jan 2009 09:21:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14893</guid><dc:creator>marcelv</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.infosupport.com/blogs/marcelv/rsscomments.aspx?PostID=14893</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/marcelv/archive/2009/01/02/Yessssss_2C00_-Another-year-as-MVP_2100_.aspx#comments</comments><description>&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;When I got back in the office this morning I was very pleased to see the Congratulations email in my inbox. Little excerpt from the mail:&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;em&gt;Congratulations! We are pleased to present you with the 2009 Microsoft&amp;reg; MVP Award! This award is given to exceptional technical community leaders who actively share their high quality, real world expertise with others.&lt;/em&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;em&gt;The Microsoft MVP Award provides us the unique opportunity to celebrate and honor your significant contributions and say &amp;quot;Thank you for your technical leadership.&amp;quot;&lt;/em&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;em&gt;Toby Richards&lt;br /&gt;General Manager &lt;br /&gt;Community Support Services&lt;/em&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;I feel really privileged to be awarded for a 4th year in a row as Team System MVP. &lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;The most important reason I am so glad to be awarded Team System MVP is that it enables me to be part of a community of really great and knowledgeable people. Not only is the Team System team a great group of people to work with, they also really value the feedback we give and transform our feedback in shaping the product to be the best ALM offering around against a really affordable price.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;I want to thank Microsoft in recognizing the work I have done last year for the Team System and developer community. I also want to thank Info Support since they enable me to work at the bleeding edge of technology and support the work I do in the community as Architect, Speaker and Author.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;Happy New Year!&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;Cheers,&lt;br /&gt;Marcel&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14893" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Working+at+Info+Support/default.aspx">Working at Info Support</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/MVP/default.aspx">MVP</category><feedburner:origLink>http://blogs.infosupport.com/blogs/marcelv/archive/2009/01/02/Yessssss_2C00_-Another-year-as-MVP_2100_.aspx</feedburner:origLink></item><item><title>First release of Team System Web Access Translations now available!</title><link>http://feedproxy.google.com/~r/Marcelv/~3/j6MMgMlWS3w/First-release-of-Team-System-Web-Access-Translations-now-available_2100_.aspx</link><pubDate>Mon, 17 Nov 2008 22:56:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14740</guid><dc:creator>marcelv</dc:creator><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.infosupport.com/blogs/marcelv/rsscomments.aspx?PostID=14740</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/marcelv/archive/2008/11/17/First-release-of-Team-System-Web-Access-Translations-now-available_2100_.aspx#comments</comments><description>&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;A few weeks ago I already posted about the fact that we have made great progress on the translation project at codeplex.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;I am proud to announce that we completed the first set of languages and we have a first release available for download at &lt;a href="http://www.codeplex.com/TSWAL/Release/ProjectReleases.aspx?ReleaseId=18055" target="_blank"&gt;codeplex&lt;/a&gt;.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;The following languages are now available in addition to the default languages available from Microsoft:&lt;/p&gt;&lt;p class="MsoListParagraphCxSpFirst" style="margin:6pt 0in 0pt 47.35pt;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&amp;middot;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Croatian, done by &lt;a href="http://ognjenbajic.com/blog" target="_blank"&gt;Ognjen Bajic&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin:0in 0in 0pt 47.35pt;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&amp;middot;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Portuguese (Brazilian), done by &lt;a href="http://igoravl.spaces.live.com/" target="_blank"&gt;Igor Abade&lt;/a&gt; and &lt;a href="http://blogs.2pc.com.br/ramonduraes" target="_blank"&gt;Ramon Dur&amp;atilde;es&lt;/a&gt;.&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin:0in 0in 0pt 47.35pt;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&amp;middot;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Turkish, done by &lt;a href="http://www.cengizhan.com/" target="_blank"&gt;Cengiz Han&lt;/a&gt;, &lt;a href="http://www.sunali.com" target="_blank"&gt;Coskun Sunali&lt;/a&gt; and &lt;a href="http://www.okantekeli.com" target="_blank"&gt;Okan Tekeli&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin:0in 0in 0pt 47.35pt;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&amp;middot;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Danish, done by Gert Christiansen&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin:0in 0in 0pt 47.35pt;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&amp;middot;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Swedish, done by &lt;a href="http://olausson.net/blog" target="_blank"&gt;Mathias Olausson&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin:0in 0in 0pt 47.35pt;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&amp;middot;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Polish, done by &lt;a href="http://zine.net.pl/blogs/bysza" target="_blank"&gt;Marek Byszewski&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpLast" style="margin:0in 0in 3pt 47.35pt;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&amp;middot;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Dutch, done by myself &lt;span style="font-family:Wingdings;"&gt;&lt;span&gt;J&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;So what do you get when you download the installer?&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;We provide you with a very straight trough installation process. We have a MSI installer and the only clicks needed are accepting the license agreement (the same as on &lt;a href="http://www.codeplex.com/TSWAL/license" target="_blank"&gt;codeplex&lt;/a&gt; and you are done. The installer will automatically detect if Team System Web Access SP1 is installed on your box and it will use the path found to install the additional resource files. If Team System Web Access is not installed, the installer will refuse to install, since installation would make no sense in these conditions.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;For a user to see the pages in its favorite language, he might need to set the profile options in Team System Web Access. If the user has e.g. an English OS setup, but wants to view the pages in e.g. Dutch, he can force Team System Web Access to always use Dutch and ignore the browser settings for the preferred language. To make this happen go to the settings-&amp;gt;profile-&amp;gt;options page (found at the right side of the home page) and there go to the regional Settings tab. There you see a drop down that defaults to &amp;quot;browser accepted language&amp;quot; and you can there select e.g. Dutch. After clicking OK, the page will refresh and you will see the site in the selected language. Any user that has already a localized version of the OS installed will most of the time get the translated pages, since the default browser settings will take the localization settings of the user as the preferred language.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;One question that might pop your mind is do I need SP1 of Team System Web Access? And the answer is yes you do. This is because SP1 enables the multi language feature that we use to provide the additional translation. The good news is that this does not mean you are required to install SP1 of TFS. Although it is a very good practice that you would keep your server to the latest service pack level, it is not required by team system web access Sp1.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;Now that we have released, it is also time to address the fact that we might have made some mistakes in the translations. If you find any typo&amp;#39;s, misspelled words or other errors, please be so kind as to provide us with feedback, using the issue tracker at &lt;a href="http://www.codeplex.com/TSWAL/WorkItem/List.aspx" target="_blank"&gt;codeplex&lt;/a&gt;. Please make sure you provide information which language you found the bug, how it manifests itself and what the correct spelling would be. We will make sure as a team to fix them a.s.a.p. and provide you with a new version promptly.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;My special Thanks go out to all contributors to the project and Microsoft especially, since they were so kind as to help us with the resource files that are needed to do this project.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;For the next release we already have a few other people working on new languages. The once currently in development are Portuguese, Norwegian and Arabic.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;If you would like to contribute to this project, please contact me (using the contact tools on my blog or at codeplex) and I will get back to you a.s.a.p. and provide you with the proper access and instructions to contribute.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;Please give us your feedback on what you think of this project.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;Cheers,&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;Marcel&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14740" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Team+System+Extensibility/default.aspx">Team System Extensibility</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/MVP/default.aspx">MVP</category><feedburner:origLink>http://blogs.infosupport.com/blogs/marcelv/archive/2008/11/17/First-release-of-Team-System-Web-Access-Translations-now-available_2100_.aspx</feedburner:origLink></item><item><title>TSWAL project working towards a first release</title><link>http://feedproxy.google.com/~r/Marcelv/~3/FX0eTgVZiFw/TSWAL-project-working-towards-a-first-release.aspx</link><pubDate>Tue, 14 Oct 2008 06:59:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14545</guid><dc:creator>marcelv</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.infosupport.com/blogs/marcelv/rsscomments.aspx?PostID=14545</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/marcelv/archive/2008/10/14/TSWAL-project-working-towards-a-first-release.aspx#comments</comments><description>&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span&gt;The past few weeks a lot of contributers have been extremely busy getting a first release out of the door of our Team System Web Access Translation project. I bloged about this initiative &lt;a href="http://blogs.infosupport.com/marcelv/archive/2008/07/30/Announcing_3A00_-Team-System-Web-Access-Translation-Project.aspx"&gt;previously&lt;/a&gt; and I just wanted to give you a little update. We currently are working towards a release somewhere end of october, begin of november. We have currently contributions for the languages:&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span&gt;Portugees (Brazilian)&lt;br /&gt;Turkish&lt;br /&gt;Dutch&lt;br /&gt;Norwegian &lt;br /&gt;Swedish (this one is not confirmed yet)&lt;br /&gt;&lt;br /&gt;We also created a very nice installer that will install all additional languages at the right location with only two clicks (yes, first the licence, then finsh and you are done &lt;/span&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span&gt;J&lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span&gt;I think that is a nice list for a first release I would say. At &lt;a href="http://www.codeplex.com/TSWAL"&gt;codeplex &lt;/a&gt;you can follow the progress we make, but to give you a little teaser, I thought I would post some screenshots for the Dutch and Potugees version, as they have already finished their work.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span&gt;If you would like to participate in this project on a language not supported yet, then please let me know. I am happy to accept you as a contributer and I will give you the instructions needed to commit to the repository.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span&gt;&lt;span&gt;Portugees (Brazilian) version of the home page (click on images to enlarge)&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;a href="http://blogs.infosupport.com/photos/marcelv/images/14542/original.aspx"&gt;&lt;img height="400" src="http://blogs.infosupport.com/photos/marcelv/images/14542/640x400.aspx" style="width:640px;height:400px;" width="640" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;Portugees (Brazilian) version add new document library&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;a href="http://blogs.infosupport.com/photos/marcelv/images/14543/original.aspx"&gt;&lt;img height="400" src="http://blogs.infosupport.com/photos/marcelv/images/14543/640x400.aspx" style="width:640px;height:400px;" width="640" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span&gt;Dutch version the Home Page&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;a href="http://blogs.infosupport.com/photos/marcelv/images/14540/original.aspx"&gt;&lt;img height="400" src="http://blogs.infosupport.com/photos/marcelv/images/14540/640x400.aspx" style="width:640px;height:400px;" width="640" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;Dutch&amp;nbsp;version of add new document library&lt;br /&gt;&lt;a href="http://blogs.infosupport.com/photos/marcelv/images/14541/original.aspx"&gt;&lt;img height="400" src="http://blogs.infosupport.com/photos/marcelv/images/14541/640x400.aspx" style="width:640px;height:400px;" width="640" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span&gt;Cheers,&lt;br /&gt;Marcel&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14545" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/MVP/default.aspx">MVP</category><feedburner:origLink>http://blogs.infosupport.com/blogs/marcelv/archive/2008/10/14/TSWAL-project-working-towards-a-first-release.aspx</feedburner:origLink></item><item><title>Presentation and demo materials, SDC sessions</title><link>http://feedproxy.google.com/~r/Marcelv/~3/x8oG9ifZUV8/Presentation-and-demo-materials_2C00_-SDC-sessions.aspx</link><pubDate>Wed, 08 Oct 2008 07:28:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14533</guid><dc:creator>marcelv</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.infosupport.com/blogs/marcelv/rsscomments.aspx?PostID=14533</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/marcelv/archive/2008/10/08/Presentation-and-demo-materials_2C00_-SDC-sessions.aspx#comments</comments><description>&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;The past few days I gave some sessions at the Software Developers Conference.&lt;br /&gt;As promised to the audience I would post the presentations and the demos I gave on my blog, so here goes:&lt;/p&gt;&lt;p class="MsoListParagraphCxSpFirst" style="margin:6pt 0in 0pt 47.35pt;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&amp;middot;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://blogs.infosupport.com/files/folders/marcelv/entry14535.aspx" target="_blank"&gt; &lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://blogs.infosupport.com/files/folders/marcelv/entry14535.aspx" target="_blank"&gt;What&amp;#39;s new In Visual Studio Team System 2008 &amp;amp; SP1&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpLast" style="margin:0in 0in 3pt 47.35pt;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&amp;middot;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://blogs.infosupport.com/files/folders/marcelv/entry14536.aspx" target="_blank"&gt;Creating Scalable statefull services using WF and WCF&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;The demo files can be found &lt;a href="http://blogs.infosupport.com/files/folders/marcelv/entry14534.aspx" target="_blank"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;To run the demos, just unzip the file and open the .sln files found in the directories. The folders are numbered in demo sequence so you can find the demo in line with the presentation.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;Enjoy,&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;Marcel&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14533" width="1" height="1"&gt;</description><feedburner:origLink>http://blogs.infosupport.com/blogs/marcelv/archive/2008/10/08/Presentation-and-demo-materials_2C00_-SDC-sessions.aspx</feedburner:origLink></item><item><title>Recovering workflows that did not complete work</title><link>http://feedproxy.google.com/~r/Marcelv/~3/rCBTrVwuvKo/Recovering-workflows-that-did-not-complete-work.aspx</link><pubDate>Tue, 30 Sep 2008 15:20:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14508</guid><dc:creator>marcelv</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.infosupport.com/blogs/marcelv/rsscomments.aspx?PostID=14508</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/marcelv/archive/2008/09/30/Recovering-workflows-that-did-not-complete-work.aspx#comments</comments><description>&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;Last week I have been working on our workflow solution where someone discovered that in some cases it appeared that certain workflows did not complete and would never wake up again.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;It took me a while to figure out why this was the case. We host our workflows in IIS and there we use the ManualWorkflowSchedulerService to schedule the workflow. What we do is have a WCF call coming in, persist some data in the database and return an ID that the customer can use for future reference. Then we use a threadpool (a custom implementation, since we needed to prioritize the initial requests from the background work done later) to schedule the remaining work that needs to complete in the background. We use the SqlWorkflowPersistenceService to make sure the workflows can be recovered if the IS worker process is recycled.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;We did a lot of testing previously(as you might have read before), and there we have seen the workflows did get recovered.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;So what happened&amp;hellip;?&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&amp;lt;edit&amp;gt;&amp;nbsp;&lt;br /&gt;During performance testing we found that the configuration section for workflow contained the a wrong name for the workflow configuration. This caused a second workflow runtime to be started with default settings. The default settings use the default scheduler and that was causing problems in terms of a fight for threads in the host process. (Lots of context switching) this made us decide to do two things. First remove the wrong configuration, so we would only have one workflow runtime and secondly write a custom threadpool implementation where we could throttle the number of requests we want to process.&lt;br /&gt;&amp;lt;/edit&amp;gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;What we did not realize when we removed the erroneous entry, that this also killed our auto recovery of workflows. The second workflow runtime got loaded with the same services as the main workflow runtime, except that it used the default scheduler. As you might recall this scheduler uses a thread pool to schedule its workflows and that was where the workflow recovery took place.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;In our main workflowruntime we use the ManualWorkflowSchedulerService and the SQLWorkflowPersistenceService, but this does not take care of the actual recovery of the workflows.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;It appears (after some reflection work&lt;span style="font-family:Wingdings;"&gt;&lt;span&gt;J&lt;/span&gt;&lt;/span&gt;) that the SQLWorklflowPersistenceService does do recovery of instances, but it assumes these will be automatically scheduled. Unfortunately this is not documented, but when you dig around in the implementation (using reflector of course) you can see that the only thing the Recovery does is get all running instances from the database and call a WorkflowRuntime.GetWorkflow(ID).Load().&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;This means it will only load the workflow into the workflow runtime memory, but not schedule the workflow to actually proceed with its work!&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;As a matter a fact the whole implementation for recovery does not take in account e.g. the fact that we have multiple nodes running in a load balancing scenario where you perhaps want to recover the workflows in a balanced fashion as well. So to get around this problem I wrote a custom scheduler that does nothing more than deriving from the manual scheduler, except that it also takes care of the recovery of workflows. Since this might be a problem you will run into yourself, I have pasted the code below for you to reuse &lt;span style="font-family:Wingdings;"&gt;&lt;span&gt;J&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span&gt;&lt;font face="Arial"&gt;The only thing you need to do is copy the code compile it and then configure your workflow runtime to use this scheduler service.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span&gt;&lt;font face="Arial"&gt;It will just bahave the same as the manual scheduler with the only difference that it will recover your workflows when needed on the threadpool in the background. You can trim the number of workflows that are recovered as one batch, you can configure the wait time after startup, to start the recovery (normaly you want to start after a minute or so, since the first request needs to be serviced first before you want to start do recovery) and the poll time is configurable as well.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span&gt;&lt;font face="Arial"&gt;Hope you find it usefull.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span&gt;&lt;font face="Arial"&gt;Cheers,&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span&gt;&lt;font face="Arial"&gt;Marcel&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:#2b91af;font-family:'Courier New';"&gt;Serializable&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;]&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;public&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;class&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:#2b91af;font-family:'Courier New';"&gt;RecoveringWorkflowSchedulerService&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; : &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:#2b91af;font-family:'Courier New';"&gt;ManualWorkflowSchedulerService&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; , &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:#2b91af;font-family:'Courier New';"&gt;IDisposable&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;private&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:#2b91af;font-family:'Courier New';"&gt;Timer&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; _recoveryPollTimer;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;private&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;int&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; _recoveryDuePeriod;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;private&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;int&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; _recoveryPollPeriod;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;private&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;int&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; _recoveryBatchSize;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;private&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;bool&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; _disposed = &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;false&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:green;font-family:'Courier New';"&gt;// default to one minute, so we don&amp;#39;t frustrate the initial request that activates the service&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;private&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;static&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;readonly&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;int&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; DEFAULTRECOVERYDUEPERIOD = 60000;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:green;font-family:'Courier New';"&gt;// default to every 5 minutes to check if there are workflows to recover&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;private&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;static&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;readonly&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;int&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; DEFAULTRECOVERYPOLLPERIOD = 300000;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:green;font-family:'Courier New';"&gt;// default to recovery batch size of 5 &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;private&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;static&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;readonly&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;int&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; DEFAULTRECOVERYBATCHSIZE = 5;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;public&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; RecoveringWorkflowSchedulerService(&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;bool&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; useActiveTimers) : &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;base&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;(useActiveTimers)&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_recoveryPollPeriod = DEFAULTRECOVERYPOLLPERIOD;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_recoveryDuePeriod = DEFAULTRECOVERYDUEPERIOD;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_recoveryBatchSize = DEFAULTRECOVERYBATCHSIZE;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;public&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; RecoveringWorkflowSchedulerService(&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;bool&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; useActiveTimers, &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;int&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; recoveryDuePeriod, &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;int&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; recoveryPollPeriod, &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;int&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; recoveryBatchSize):&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;base&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;(useActiveTimers)&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_recoveryPollPeriod = recoveryPollPeriod;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_recoveryDuePeriod = recoveryDuePeriod;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_recoveryBatchSize = recoveryBatchSize;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;public&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; RecoveringWorkflowSchedulerService(&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:#2b91af;font-family:'Courier New';"&gt;NameValueCollection&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; parameters):&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;base&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;(parameters)&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;string&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; recoveryDuePeriodString = parameters[&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:#a31515;font-family:'Courier New';"&gt;&amp;quot;RecoveryDuePeriod&amp;quot;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;];&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;string&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; recoveryPollPeriod = parameters[&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:#a31515;font-family:'Courier New';"&gt;&amp;quot;RecoveryPollPeriod&amp;quot;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;];&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;string&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; recoveryBatchSize = parameters[&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:#a31515;font-family:'Courier New';"&gt;&amp;quot;RecoveryBatchSize&amp;quot;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;];&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;if&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; (!&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;int&lt;/span&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;.TryParse(recoveryDuePeriodString, &lt;span style="color:blue;"&gt;out&lt;/span&gt;&lt;strong&gt; _recoveryDuePeriod))&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_recoveryDuePeriod = DEFAULTRECOVERYDUEPERIOD;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;if&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; (!&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;int&lt;/span&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;.TryParse(recoveryPollPeriod, &lt;span style="color:blue;"&gt;out&lt;/span&gt;&lt;strong&gt; _recoveryPollPeriod))&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_recoveryPollPeriod = DEFAULTRECOVERYPOLLPERIOD;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;if&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; (!&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;int&lt;/span&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;.TryParse(recoveryBatchSize, &lt;span style="color:blue;"&gt;out&lt;/span&gt;&lt;strong&gt; _recoveryBatchSize))&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_recoveryBatchSize = DEFAULTRECOVERYBATCHSIZE;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;protected&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;override&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;void&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; OnStarted()&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;base&lt;/span&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;.OnStarted();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:green;font-family:'Courier New';"&gt;// initialize a recovery timer, where we pickup anny instances that got terminated by &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;color:green;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// system failure&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:green;font-family:'Courier New';"&gt;// like power outage, IISReset commands or other process recycles.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_recoveryPollTimer = &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;new&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:#2b91af;font-family:'Courier New';"&gt;Timer&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;(RecoveryThreadCallback, &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;this&lt;/span&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;.Runtime, &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_recoveryDuePeriod, _recoveryPollPeriod);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;protected&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;override&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;void&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; OnStopped()&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;base&lt;/span&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;.OnStopped();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:green;font-family:'Courier New';"&gt;// cleanup the polling timer&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;if&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; (_recoveryPollTimer != &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;null&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;_recoveryPollTimer.Dispose();&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:gray;font-family:'Courier New';"&gt;///&lt;/span&gt;&lt;span style="font-size:8pt;color:green;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size:8pt;color:gray;font-family:'Courier New';"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;void&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; RecoveryThreadCallback(&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;object&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; stateInfo)&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;if&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; (!_disposed)&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;try&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:#2b91af;font-family:'Courier New';"&gt;RecoveringWorkflowSchedulerService&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; schedulerService = &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;this&lt;/span&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;.Runtime.GetService&amp;lt;&lt;span style="color:#2b91af;"&gt;RecoveringWorkflowSchedulerService&lt;/span&gt;&amp;gt;();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;if&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; (schedulerService != &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;null&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:#2b91af;font-family:'Courier New';"&gt;SqlWorkflowPersistenceService&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; persistenceService = &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;this&lt;/span&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;.Runtime.GetService&amp;lt;&lt;span style="color:#2b91af;"&gt;SqlWorkflowPersistenceService&lt;/span&gt;&amp;gt;();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:green;font-family:'Courier New';"&gt;// there is an persistence service so get workflows that need recovery&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;if&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; (persistenceService != &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;null&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;if&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; (Runtime.IsStarted)&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;var&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; allPersistedWorkflows = persistenceService.GetAllWorkflows();&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;var&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; allRecoverableWorkflows = &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;from&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; persistedWorkflow &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;in&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; allPersistedWorkflows&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;where&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; !persistedWorkflow.IsBlocked &amp;amp;&amp;amp; &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;persistedWorkflow.Status == &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:#2b91af;font-family:'Courier New';"&gt;WorkflowStatus&lt;/span&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;.Running&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;select&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;persistedWorkflow.WorkflowInstanceId).Take&amp;lt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:#2b91af;font-family:'Courier New';"&gt;Guid&lt;/span&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&amp;gt;(_recoveryBatchSize);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;foreach&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; (&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:#2b91af;font-family:'Courier New';"&gt;Guid&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; workflowInstanceID &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;in&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; allRecoverableWorkflows)&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:green;font-family:'Courier New';"&gt;// process the recovery work on the threadpool thread;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:#2b91af;font-family:'Courier New';"&gt;ThreadPool&lt;/span&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;.QueueUserWorkItem(WorkflowWaitCallback, &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;workflowInstanceID);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;catch&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; (System.&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:#2b91af;font-family:'Courier New';"&gt;ObjectDisposedException&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:green;font-family:'Courier New';"&gt;// appdomain is beeing teared down, gracefully swallow exception &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// and exit by clearing the timer&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_recoveryPollTimer.Dispose();&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;color:gray;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;///&lt;/span&gt;&lt;span style="font-size:8pt;color:green;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size:8pt;color:gray;font-family:'Courier New';"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:gray;font-family:'Courier New';"&gt;///&lt;/span&gt;&lt;span style="font-size:8pt;color:green;font-family:'Courier New';"&gt; This is where the execution continues after we queue a recovery workflow &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;color:green;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:gray;font-family:'Courier New';"&gt;///&lt;/span&gt;&lt;span style="font-size:8pt;color:green;font-family:'Courier New';"&gt; on the threadpool.&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:gray;font-family:'Courier New';"&gt;///&lt;/span&gt;&lt;span style="font-size:8pt;color:green;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size:8pt;color:gray;font-family:'Courier New';"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:gray;font-family:'Courier New';"&gt;///&lt;/span&gt;&lt;span style="font-size:8pt;color:green;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size:8pt;color:gray;font-family:'Courier New';"&gt;&amp;lt;param name=&amp;quot;stateInfo&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;void&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; WorkflowWaitCallback(&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;object&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; stateInfo)&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:green;font-family:'Courier New';"&gt;// here we get the threadpool thread donated, now use it to schedule the requested&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:green;font-family:'Courier New';"&gt;// workflow&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;this&lt;/span&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;.RunWorkflow((&lt;span style="color:#2b91af;"&gt;Guid&lt;/span&gt;&lt;strong&gt;)stateInfo);&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;#region&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; IDisposable Members&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;public&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;void&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; Dispose()&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_disposed = &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;true&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;if&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt; (_recoveryPollTimer != &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;null&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_recoveryPollTimer.Dispose();&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;color:blue;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;#endregion&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:8pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14508" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Windows+Workflow+Foundation/default.aspx">Windows Workflow Foundation</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><feedburner:origLink>http://blogs.infosupport.com/blogs/marcelv/archive/2008/09/30/Recovering-workflows-that-did-not-complete-work.aspx</feedburner:origLink></item><item><title>How the transaction property for WF tracking can make a huge performance difference</title><link>http://feedproxy.google.com/~r/Marcelv/~3/AwQY2GCRk0k/How-the-transaction-property-for-WF-tracking-can-make-a-huge-performance-difference.aspx</link><pubDate>Wed, 03 Sep 2008 10:35:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14404</guid><dc:creator>marcelv</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.infosupport.com/blogs/marcelv/rsscomments.aspx?PostID=14404</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/marcelv/archive/2008/09/03/How-the-transaction-property-for-WF-tracking-can-make-a-huge-performance-difference.aspx#comments</comments><description>&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span style="font-size:8pt;color:black;line-height:110%;font-family:'Verdana','sans-serif';"&gt;The past two days I have been working on a performance problem we were having with a workflow implementation. The workflow was quite simple, A WCF call coming in, then registering the request data in a SQL database and return a ticket that the request was received. The ticket can be used by people to get information later on the status of their request. (A pretty common SOA pattern)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span style="font-size:8pt;color:black;line-height:110%;font-family:'Verdana','sans-serif';"&gt;The workflow used a TransactionScope activity to guard the persistence of the workflow with the registration call of the custom activity in the database. The workflow runtime had the SqlPersistence service loaded and we use the &lt;a href="http://msdn.microsoft.com/en-us/library/system.workflow.runtime.tracking.sqltrackingservice.aspx"&gt;&lt;span style="color:#0033cc;line-height:110%;text-decoration:none;text-underline:none;"&gt;SqlTrackingService&lt;/span&gt;&lt;/a&gt; to enable administrators of the system to monitor and see workflow progress of certain requests.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span style="font-size:8pt;color:black;line-height:110%;font-family:'Verdana','sans-serif';"&gt;The time to register a request appeared to be around the 18 seconds per request when we have 20 concurrent users?!? We expected this to be around 1 second Max, depending on the server load.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span style="font-size:8pt;color:black;line-height:110%;font-family:'Verdana','sans-serif';"&gt;After some digging around We detected that if we remove the tracking service the response times where back to what we expected, somewhere around the 0.6 seconds. So how can this happen?&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span style="font-size:8pt;color:black;line-height:110%;font-family:'Verdana','sans-serif';"&gt;The answer to this is one very important property that can be set for the tracking service configuration called &lt;strong&gt;Transactional&lt;/strong&gt;. This property was set to false, by one of the developers. This simple setting added around 17 of overhead in SQL communication(with the load we already had on SQL, so can be much less in other specific cases). The property is used to determine if each tracking record that needs to be saved to SQL is done one call at the time or if all work is queued and persisted in one work batch. As you can imagine this will reduce the number of roundtrips to SQL significantly and when the workflow and database server are as busy as with the work we do, times can add up pretty fast.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span style="font-size:8pt;color:black;line-height:110%;font-family:'Verdana','sans-serif';"&gt;So when you see a slow performance in workflow and you have tracking enabled, Look at the transactional property and check if it is not set to false (default is true, so someone would explicitly change this)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span style="font-size:8pt;color:black;line-height:110%;font-family:'Verdana','sans-serif';"&gt;Cheers,&lt;br /&gt;Marcel&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;&lt;span style="font-size:8pt;color:black;line-height:110%;font-family:'Verdana','sans-serif';"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14404" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/.NET+development/default.aspx">.NET development</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Windows+Workflow+Foundation/default.aspx">Windows Workflow Foundation</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/.NET+3.0/default.aspx">.NET 3.0</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.infosupport.com/blogs/marcelv/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><feedburner:origLink>http://blogs.infosupport.com/blogs/marcelv/archive/2008/09/03/How-the-transaction-property-for-WF-tracking-can-make-a-huge-performance-difference.aspx</feedburner:origLink></item></channel></rss>
