<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-3805743522888899142</atom:id><lastBuildDate>Sun, 20 May 2012 06:03:53 +0000</lastBuildDate><category>Fluent</category><category>Unit testing</category><category>proxy</category><category>Team Foundation Server</category><category>Microsoft</category><category>MVC</category><category>SendActivity</category><category>AppFabric</category><category>Moq</category><category>Azure Blob</category><category>Azure</category><category>help</category><category>query</category><category>stsadm</category><category>Infopath 2007</category><category>duplicates</category><category>t-sql</category><category>c#</category><category>3.5</category><category>JQuery</category><category>RSS</category><category>TDD</category><category>delete</category><category>cursor</category><category>GAC</category><category>Entity Framework 4.3</category><category>comments</category><category>xml</category><category>linq</category><category>TFS</category><category>convert</category><category>sql2008</category><category>Entity Framework 4.0</category><category>Workflow</category><category>bdc</category><category>service pack</category><category>sql2005</category><category>w3wp</category><category>Niject</category><category>Attributes</category><category>NuGet</category><category>ContentType</category><category>sql</category><category>WCF</category><category>Workflow 4.0</category><category>DLLS</category><category>ASP Membership</category><category>Sharepoint</category><category>Entity Framework 4.1</category><category>Visual studio 2008</category><category>command line</category><category>datetime</category><category>System.Web.Providers</category><category>Tracking Profile</category><category>Entity Framework</category><category>quiesce</category><title>RUSSELL MCCLOY</title><description>Senior Software Developer - c#, .NET 4.0
&lt;br&gt;
MVC&lt;br&gt;
ASP.NET forms&lt;br&gt;
WCF&lt;br&gt;
Entity Framework 4.3&lt;br&gt;
IOC&lt;br&gt;
Unit Testing&lt;br&gt;
Mocking&lt;br&gt;
Enterprise architecture design&lt;br&gt;
CRM 2011&lt;br&gt;
JQuery&lt;br&gt;
HTML5&lt;br&gt;
SQL&lt;br&gt;
Linq&lt;br&gt;
&lt;br&gt;
I have worked in many industries both in Australia and overseas
&lt;br&gt;
Latest Industries: MEMBER SERVICES, MEDIA, PROPERTY, ACCOUNTANCY, DIGITAL AGENCY
&lt;br&gt;
&lt;i&gt;{ Background photo taken by my mum! }&lt;/i&gt;</description><link>http://www.russellmccloy.com/</link><managingEditor>noreply@blogger.com (russell mccloy)</managingEditor><generator>Blogger</generator><openSearch:totalResults>71</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-5939971380591318679</guid><pubDate>Thu, 15 Mar 2012 05:22:00 +0000</pubDate><atom:updated>2012-03-16T11:32:51.058+11:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>ASP Membership</category><category domain='http://www.blogger.com/atom/ns#'>Azure</category><category domain='http://www.blogger.com/atom/ns#'>System.Web.Providers</category><title>ASP.NET Membership System.Web.Providers. Can&amp;apos;t log in to my siteon Azure but can locally.</title><description>&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Hi there,&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;I had an interesting issue last night. I deployed my local Azure emulated MVC 3 role and worker role to my Windows Azure instance. All worked perfectly &lt;b&gt;locally &lt;/b&gt;and in particular the logon page I built allows me to log onto the secure area of my MVC 3 site using System.WebProviders (ASP.Membership).&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;I found an issue when I tried to log onto my remote Azure site using my deployed logon view.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;The logon on the server failed and told me my user name or password was wrong.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Ok, so I then pointed my local instance ASP.NET configuration (the built in membership, role etc.. tool for setting up members and roles) at my Azure SQL database and tried to manage my members from there and it worked.&amp;nbsp;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Even when I changed my local connection string to point to my Azure SQL database and tried logging on, it worked. WEIRD!!! (ie.. local browser, remote Azure database).&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;So then today I fould this blog:&amp;nbsp;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;a href="http://stackoverflow.com/questions/8415822/asp-net-membership-login-works-locally-fails-on-azure"&gt;http://stackoverflow.com/questions/8415822/asp-net-membership-login-works-locally-fails-on-azure&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;and then this one:&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;a href="http://geekswithblogs.net/DavidHoerster/archive/2010/06/15/asp.net-membership-password-hash----.net-3.5-to-.net-4.aspx"&gt;http://geekswithblogs.net/DavidHoerster/archive/2010/06/15/asp.net-membership-password-hash----.net-3.5-to-.net-4.aspx&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;The part of the post in particular that caught my attention was this:&lt;/div&gt;&lt;blockquote class="tr_bq" style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;i&gt;I tracked it down, thanks to some info in &lt;a href="http://geekswithblogs.net/DavidHoerster/archive/2010/06/15/asp.net-membership-password-hash----.net-3.5-to-.net-4.aspx" title="ASP.NET Membership Password Hash -- .NET 3.5 to .NET 4 Upgrade Surprise!"&gt;this article by David Hoerster&lt;/a&gt;. The problem is that the default password hashing algorithm on Azure is different from the .NET 4.0 defaults. It is set to SHA1 on Azure, and HMACSHA256 is the new standard setting on 4.0.&lt;/i&gt;&lt;/blockquote&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;The rest of the post is here:&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;This can be fixed by specifying the hash type explicitly in web.config. If you decide to use a method like HMACSHA256, make sure you also specify a machine key - otherwise you will run into similar problems as the autogenerated machine key will differ from server to server.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;The configuration element you need to change is &lt;i&gt;&lt;machinekey&gt;&lt;/machinekey&gt;&lt;/i&gt; under &lt;i&gt;&lt;system.web&gt;&lt;/system.web&gt;&lt;/i&gt;:&lt;br /&gt;&lt;/div&gt;&lt;blockquote class="tr_bq"&gt;&lt;pre class="lang-cs prettyprint" style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;code&gt;&lt;span class="pun"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln"&gt;machineKey decryptionKey&lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="str"&gt;"PUT_DECRYPTION_KEY_HERE"&lt;/span&gt;&lt;span class="pln"&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class="lang-cs prettyprint" style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;code&gt;&lt;span class="pln"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; validationKey&lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="str"&gt;"PUT_VALIDATION_KEY_HERE"&lt;/span&gt;&lt;span class="pln"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class="lang-cs prettyprint" style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;code&gt;&lt;span class="pln"&gt;decryption&lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="str"&gt;"AES"&lt;/span&gt;&lt;span class="pln"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class="lang-cs prettyprint" style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;code&gt;&lt;span class="pln"&gt;validation&lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="str"&gt;"HMACSHA256"&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;pre class="lang-cs prettyprint" style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;You can use &lt;a href="http://www.sourcetree.net/sourcetree/Development/Aspnet%20Examples/GenerateMachineKeyForWebConfig.aspx" title="Generate Machine Key for web.config"&gt;this machine key generator&lt;/a&gt; to generate random keys in the proper format.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;a href="http://www.sourcetree.net/sourcetree/Development/Aspnet%20Examples/GenerateMachineKeyForWebConfig.aspx"&gt;&lt;/a&gt;I will go home tonight and try this and update this post in the morning.......time passes.......ok, so went home last night and tried a few things. My password hashing algorithm was different between my local and azure. I just used the Azure machine config setting on my local and it all works fine now. Good times!!!&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;RuSs&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-5939971380591318679?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2012/03/aspnet-membership-systemwebproviders.html</link><author>noreply@blogger.com (russell mccloy)</author><thr:total>0</thr:total><georss:featurename>Melbourne VIC, Australia</georss:featurename><georss:point>-37.8131869 144.9629796</georss:point><georss:box>-37.8382759 144.92349760000002 -37.7880979 145.0024616</georss:box></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-5413869790105029471</guid><pubDate>Wed, 07 Mar 2012 23:07:00 +0000</pubDate><atom:updated>2012-03-16T11:38:53.091+11:00</atom:updated><title>A look at ASP.NET MVC 4</title><description>&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Morning,&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;I am currently getting up to speed on MVC 4. Thought i'd post Scot Guthrie's video on the subject.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-eW_XVkFIiv4/T2KLYpONKJI/AAAAAAAAHFY/zjwJwa3cfsk/s1600/16-03-2012+11-36-49+AM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="205" src="http://4.bp.blogspot.com/-eW_XVkFIiv4/T2KLYpONKJI/AAAAAAAAHFY/zjwJwa3cfsk/s400/16-03-2012+11-36-49+AM.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is the real link as I didn't want to embed the video as the width was to large:&lt;br /&gt;&lt;a href="http://channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/2364"&gt;http://channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/2364&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;RuSs&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-5413869790105029471?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2012/03/look-at-aspnet-mvc-4.html</link><author>noreply@blogger.com (russell mccloy)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-eW_XVkFIiv4/T2KLYpONKJI/AAAAAAAAHFY/zjwJwa3cfsk/s72-c/16-03-2012+11-36-49+AM.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-4931337822714243622</guid><pubDate>Sun, 19 Feb 2012 23:59:00 +0000</pubDate><atom:updated>2012-02-29T10:37:04.437+11:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>MVC</category><category domain='http://www.blogger.com/atom/ns#'>Entity Framework 4.3</category><category domain='http://www.blogger.com/atom/ns#'>Azure Blob</category><category domain='http://www.blogger.com/atom/ns#'>ASP Membership</category><category domain='http://www.blogger.com/atom/ns#'>Azure</category><title>My weekend (I'm a geek) of deploying my new Kite Boarding site to Windows Azure with an Azure SQL database, membership and blob storage</title><description>&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;Good Morning,&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;I just thought I'd post to my blog after a long period of being to lazy to do it and also being too busy at work to get around to it.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;I spent part of the weekend deploying my latest side project to Azure. I won't tell you what it's all about until I have it all polished and shiny as right now it's a definite work in progress.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;b&gt;What I have deployed:&lt;/b&gt;&lt;/div&gt;&lt;ul style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;li&gt;MVC 3, Html5, Razor website - I'm thinking about moving to MVC 4 as I think the beta just came out.&lt;/li&gt;&lt;li&gt;The site runs off Entity Framework 4.3 and I used code first poco classes with DBContext.&lt;/li&gt;&lt;li&gt;Users and Roles are managed by&amp;nbsp; &lt;a href="http://nuget.org/packages/System.Web.Providers" target="_blank"&gt;http://nuget.org/packages/&lt;wbr&gt;&lt;/wbr&gt;System.Web.Providers&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;My custom data is stored an an Azure Sql relational database&amp;nbsp; &lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;I posted the following questions on MSDN and have now got the answers I need so i'll update the questhions with answers. As I was an Azure newbie a 2 weeks ago, these questions now seem a bit lame to me!!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Questions&lt;/b&gt;:&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;ul&gt;&lt;li&gt;I have used an Azure SQL relational database for my database. They talk a lot about &lt;b&gt;table storage&lt;/b&gt;. I assume I have done the right thing in using a relational database? &lt;br /&gt;&lt;span style="color: #073763;"&gt;Ok, so this one was easy. Whilst I could probably use table storage to store me data (xxx.table.core.windows.net) I am not ready to ditch my relational database way of thinking. My site will have many tables with relationships so for now I am playing it safe and using SQL Azure. I have, however, used blob storage (xxx.blob.core.windows.net) to store the gallery images I need for my site. So, and I may be wrong here, if I had a list of people whom each had a picture attached to their relational database record, I think I could store the blob Url in a field in their record and, when rendering, iterate the records and retrieve the blob image from my storage account.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;I have used the &lt;a href="http://nuget.org/packages/System.Web.Providers"&gt;http://nuget.org/packages/System.Web.Providers &lt;/a&gt;to manage users and roles. Once I deployed to Azure using the same  database in my web.release.config for my custom data AND the membership  tables it all works great. I can register a new user using the standard  MVC 3 register user view and I can see this  new user in my Users table inside the asp membership table. &lt;br /&gt;&lt;b&gt;My question here then&lt;/b&gt;: and I have Googled this but cant  find it, is how do I manage my users and roles on the azure server as I  would when I use the asp.netwebadminfiles/default.aspx in Visual  Studio? Do I, and I plan to this anyway down the  line, write my own custom membership management code to do this or can I  use an instance of asp.netwebadminfiles/default.aspx on the server  somewhere?&lt;br /&gt;&lt;span style="color: #073763;"&gt;I figured this one out too. Although there are ways to use the netwebadminfiles tool to manage users and there is also third party &lt;/span&gt;&lt;span style="color: #073763;"&gt;code that can do this for you, ultimately I want to manage these users myself. I will build all my user and role code into the site.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;When I deployed for the first time it created my web svc role on Azure &lt;b&gt;AND &lt;/b&gt;my Sql database mentioned above. Lets say I have the site  live for a few months and want to redeploy, will my membership and  custom data get wiped out? What if a deploy schema changes to my  database, will this be taken care of without affecting  my data. I know I can use a one way data sync to get the data onto  local but im sure I would not have to worry about this&lt;span style="color: black;"&gt;?&lt;/span&gt;&lt;span style="background-color: #073763;"&gt;&lt;/span&gt;&lt;span style="color: #073763;"&gt;Not 100% sure on this one but I now know that firstly, I don't have to redeploy / publish the whole site, storage and database every time I make a change. I can use Visual Studio WebDeploy to push new changes to my site. If I needed to sync data from my local I think I could use the Data Sync in the Azure portal and I assume I could manage my users via SQL mambership stored procs. until I get all my membership screens written.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;thanks&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;RuSs &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-4931337822714243622?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2012/02/my-weekend-im-geek-of-deploying-my-new.html</link><author>noreply@blogger.com (russell mccloy)</author><thr:total>0</thr:total><georss:featurename>Melbourne VIC, Australia</georss:featurename><georss:point>-37.8131869 144.9629796</georss:point><georss:box>-37.8382759 144.92349760000002 -37.7880979 145.0024616</georss:box></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-707350952488262454</guid><pubDate>Mon, 05 Dec 2011 21:11:00 +0000</pubDate><atom:updated>2011-12-06T08:13:25.037+11:00</atom:updated><title>Saving the internet</title><description>All,&lt;br /&gt;&lt;br /&gt;Quote from: &lt;a href="http://www.avaaz.org/en/save_the_internet/?mzla" target="_blank"&gt;http://www.avaaz.org/en/save_the_internet/?mzla &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;"As concerned global citizens, we call on you to stand for a free and  open Internet and vote against both the Protect IP Act and the Stop  Online Piracy Act. The Internet is a crucial tool for people around the  world to exchange ideas and work collectively to build the world we all  want. We urge you to show true global leadership and do all you can to  protect this basic pillar of our democracies worldwide."&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;Please sign up to save the internet. This is important for all of us to  continue to have an open and uncensored internet. Imagine if the police  monitored all your phone calls, you wouldn't like that would you?&lt;br /&gt;&lt;br /&gt;&lt;a class="ot-anchor" href="http://www.avaaz.org/en/save_the_internet/?mzla"&gt;http://www.avaaz.org/en/save_the_internet/?mzl&lt;wbr&gt;&lt;/wbr&gt;a&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;thanks&lt;br /&gt;RuSs&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-707350952488262454?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2011/12/saving-internet.html</link><author>noreply@blogger.com (russell mccloy)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-8995126888152952173</guid><pubDate>Mon, 07 Nov 2011 06:05:00 +0000</pubDate><atom:updated>2011-11-07T17:05:59.672+11:00</atom:updated><title>Explanation of Ninject Bindings and where we used them in our MVC Website (Part 1 - MVC Website)</title><description>&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Afternoon,&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Im going to summarize what we have done with our Ninject bindings and injection which allows us to follow the "&lt;b&gt;Inversion of Control (IOC Container)&lt;/b&gt;" principle in a project we are working on.&amp;nbsp;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;As mentioned we are using Ninject as our IOC container: &lt;a href="http://ninject.org/"&gt;http://ninject.org/&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;The project architecture looks much like the following diagram:&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-vI0-cawBG2Q/TrNiLIMRw0I/AAAAAAAAG-8/RpJ5gYptu1E/s1600/Architecture.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="329" src="http://2.bp.blogspot.com/-vI0-cawBG2Q/TrNiLIMRw0I/AAAAAAAAG-8/RpJ5gYptu1E/s640/Architecture.jpg" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Architecture Diagram&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;I will work my way from the top to the bottom of the architecture. Starting with the MVC web site all the way through to the Microsoft Crm layer.(This post&amp;nbsp; (Part 1 - MVC Website) just refers to the web site.)&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;One of the 2 &lt;b&gt;BIG &lt;/b&gt;reasons we are using an IOC container (Ninject) is to allow us to separate all our layers (separation of concerns) so that they are Unit testable and also so that we can swap components out at a later date. We may want to replace our Crm later with a Sql server layer, doubtful but we are catering for this anyway as you never know what will be a requirement in the future. As long as our Sql server repository layer implements the same interface as our existing Crm repository layer, we can more or less swap out the Crm Repository with a new Sql Repository. &lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;u&gt;&lt;b&gt;Mvc Website:&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;On the website layer we will be using Ninject to inject the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A GatewayAgent layer into our controller - the GatewayAgent layer separates the concerns of the controller from the concerns of our WCF SOA layer.&amp;nbsp;&lt;/li&gt;&lt;li&gt;An AutoMapper implimentation into our GatewayAgent - the mapper will map our presentation entities to our Domain entities.&lt;/li&gt;&lt;li&gt;Our presentation entity validation classes into our presentation entities - as we are using Fluent validation, we may want to ditch this later and inject a different type of validation.&lt;/li&gt;&lt;/ul&gt;The following diagram show part of the web site's global.asax file. This code uses Ninject to inject the above 3 items.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-6jW8vz71CRI/TrdyvIiMqdI/AAAAAAAAHBI/2hf3RSP8BQ4/s1600/GlobalAsaxInjection.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="258" src="http://2.bp.blogspot.com/-6jW8vz71CRI/TrdyvIiMqdI/AAAAAAAAHBI/2hf3RSP8BQ4/s640/GlobalAsaxInjection.jpg" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;i style="color: #073763;"&gt;&lt;b&gt;The Ninject Binding in the Global.asax class&lt;/b&gt;&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Obviously, the web site has a reference to the Ninject.dll.&lt;br /&gt;&lt;br /&gt;Most of this is set in stone for our site but one thing to note. As more development is done we will need to add more validators as we add more presentation entities to our site. So when we add an Invoice presentation entity to the site a related Invoice Validator class will need to be added to the ConfigureKernel method, shown above, in our global.asax file.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Note&lt;/u&gt;: the line:&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas; font-size: 13;"&gt;&lt;span style="font-size: small;"&gt;- kernel.Bind&amp;lt;&lt;span style="color: #2b91af;"&gt;IValidator&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Contact&lt;/span&gt;&amp;gt;&amp;gt;().To&amp;lt;&lt;span style="color: #2b91af;"&gt;ContactValidator&lt;/span&gt;&amp;gt;();&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;means, when we call validate on a Contact presentation entity,&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: Consolas; font-size: 13px;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;we would like to use the ContactValidator class to carry out the validation&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-73IBQ5grAoY/TrdyPIB8ZTI/AAAAAAAAHA4/Wsa3je14PdY/s1600/SampleContactValidator.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="278" src="http://4.bp.blogspot.com/-73IBQ5grAoY/TrdyPIB8ZTI/AAAAAAAAHA4/Wsa3je14PdY/s640/SampleContactValidator.jpg" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;i style="color: #073763;"&gt;&lt;b&gt;Sample Contact Validator&lt;/b&gt;&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;You can see in the ConfigureKernel method above that we also inject a ContactGateway.&lt;br /&gt;The following line shows this:&lt;br /&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: Consolas;"&gt;&lt;span style="font-size: small;"&gt;kernel.Bind&amp;lt;&lt;span style="color: #2b91af;"&gt;IContactGateway&lt;/span&gt;&amp;gt;().To&amp;lt;&lt;span style="color: #2b91af;"&gt;ContactGateway&lt;/span&gt;&amp;gt;();&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;This means that when we refer to &lt;span style="font-size: small;"&gt;&lt;span style="color: #2b91af;"&gt;IContactGateway &lt;/span&gt;&lt;/span&gt;we would like to use the concrete class&lt;span style="font-size: small;"&gt;&lt;span style="color: #2b91af;"&gt; ContactGateway.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;So in our controller we see the following code:&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-kFvPYUcN4Yo/TrdycMYJyUI/AAAAAAAAHBA/YqzkL0Hoa7M/s1600/ContactController.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="300" src="http://2.bp.blogspot.com/-kFvPYUcN4Yo/TrdycMYJyUI/AAAAAAAAHBA/YqzkL0Hoa7M/s640/ContactController.jpg" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;i style="color: #073763;"&gt;&lt;b&gt;Sample controller&lt;/b&gt;&lt;/i&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Why is this good? Because you can then mock up a ContactGateway in a unit test to test your controller.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-4XwKOhSx8e4/TrdzJAgTnAI/AAAAAAAAHBQ/CG1Zp1wKtAo/s1600/ControllerTest.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="346" src="http://3.bp.blogspot.com/-4XwKOhSx8e4/TrdzJAgTnAI/AAAAAAAAHBQ/CG1Zp1wKtAo/s640/ControllerTest.JPG" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;i style="color: #073763;"&gt;&lt;b&gt;A unit test for the controller&lt;/b&gt;&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;As mentioned above, we also inject a mapper implementation into our web site:&lt;/div&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: Consolas;"&gt;&lt;span style="font-size: small;"&gt;kernel.Bind&amp;lt;&lt;span style="color: #2b91af;"&gt;IMapper&lt;/span&gt;&amp;gt;().To&amp;lt;&lt;span style="color: #2b91af;"&gt;AutoMapperMapper&lt;/span&gt;&amp;gt;();&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;This is used to map our domain entities to our presentation entities on the way up and our&amp;nbsp; presentation entities to our domain entities on the way down.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Why is this good? We may way to use a different mapping tool other than AutoMapper in the future. Injection will enable us to swap AutoMapper out for a different mapper tool.&lt;/div&gt;&lt;br /&gt;This is the end of Part 1 - Explanation of Ninject Bindings and where we used them in our MVC Website&lt;br /&gt;&lt;br /&gt;I will do another couple of posts on the other layers mentioned in the architecture diagram at the start of this post.&lt;br /&gt;&lt;br /&gt;RuSs&lt;br /&gt; &lt;br /&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: Consolas;"&gt;&lt;/pre&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-8995126888152952173?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2011/11/explanation-of-ninject-bindings-and.html</link><author>noreply@blogger.com (russell mccloy)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-vI0-cawBG2Q/TrNiLIMRw0I/AAAAAAAAG-8/RpJ5gYptu1E/s72-c/Architecture.jpg' height='72' width='72'/><thr:total>0</thr:total><georss:featurename>Melbourne VIC, Australia</georss:featurename><georss:point>-37.8131869 144.9629796</georss:point><georss:box>-37.8382759 144.92349760000002 -37.7880979 145.0024616</georss:box></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-1370572017228991140</guid><pubDate>Mon, 03 Oct 2011 05:26:00 +0000</pubDate><atom:updated>2011-10-03T16:26:42.561+11:00</atom:updated><title>How Jimmy Bogard does MVC</title><description>&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Bonjour,&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;Following is a link to a very good post called &lt;b&gt;"How we do MVC"&lt;/b&gt; on some DOs and DON'Ts of MVC. We are about to start a fresh enterprise level project and this article is great for getting a few things done correctly from the start.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;a href="http://lostechies.com/jimmybogard/2009/04/24/how-we-do-mvc/"&gt;http://lostechies.com/jimmybogard/2009/04/24/how-we-do-mvc/&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;There is also another article he has written on &lt;b&gt;"How we do view models"&lt;/b&gt;:&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;a href="http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/"&gt;http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Hope you find this useful.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;RuSs&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-1370572017228991140?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2011/10/how-jimmy-bogard-does-mvc.html</link><author>noreply@blogger.com (russell mccloy)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-2609319558149030855</guid><pubDate>Mon, 26 Sep 2011 00:56:00 +0000</pubDate><atom:updated>2011-09-26T10:57:12.220+10:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>MVC</category><category domain='http://www.blogger.com/atom/ns#'>Unit testing</category><category domain='http://www.blogger.com/atom/ns#'>Fluent</category><category domain='http://www.blogger.com/atom/ns#'>TDD</category><title>Entity validation, unit testing and MVC 3 with Fluent - RuleSets and Predicates</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-qwC0of0jZIE/Tn_MeRNoLXI/AAAAAAAAG9M/bQTH9YhVJuw/s1600/fv.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-qwC0of0jZIE/Tn_MeRNoLXI/AAAAAAAAG9M/bQTH9YhVJuw/s1600/fv.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Morning all,&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;I have been looking at validation for my current project. We are building an MVC 3 site that calls a wcf service later that is wrapped around Crm 2011.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Initially I was looking at data annotations out of the box. These work really well and MVC 3 works seamlessly with these with client validation and unobtrusive JQuery.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;When&amp;nbsp; I came to look at rulesets however it seems a lot more complicated. I them stumbled upon Fluent validation:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://fluentvalidation.codeplex.com/"&gt;http://fluentvalidation.codeplex.com/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;This is a very user friendly clean way of writing validation on your entities in the same way that data annotations are written. The difference came when I started to look at rule sets which you will see in my attached screen shots.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Firstly I defined 2 classes in my domain model. Thsese are called &lt;b&gt;ContactForValidationPOC&lt;/b&gt; and &lt;b&gt;AddressForValidationPOC &lt;/b&gt;as shown below:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-tY07i3z5N88/Tn-woptxAmI/AAAAAAAAG7U/LzK_0qIxrBw/s1600/contact.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-tY07i3z5N88/Tn-woptxAmI/AAAAAAAAG7U/LzK_0qIxrBw/s1600/contact.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;----------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://2.bp.blogspot.com/-KdbqzYvNRl0/Tn-wn7l6ECI/AAAAAAAAG7Q/h28G2QDUs0M/s1600/Address.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" id=":current_picnik_image" src="http://2.bp.blogspot.com/-KdbqzYvNRl0/Tn-wn7l6ECI/AAAAAAAAG7Q/h28G2QDUs0M/s1600/Address.jpg" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;As you can see there are no data annotations and ContactForValidationPOC has a complex property of Addresses.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;We are going to write some rulesets that will validate the contact for a STAFF ruleset and a public ruleset. (Note that there are not real world validation needs as of yet,it's just proof of concept code.)&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;You will notice that at the top of the &lt;b&gt;ContactForValidationPOC &lt;/b&gt;class we have an attribute shown as follows:&lt;/span&gt;&lt;/div&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;[&lt;span style="color: #2b91af;"&gt;Validator&lt;/span&gt;(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;ContactValidator&lt;/span&gt;))]&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;This tells the class that there is a validator class call ContactValidator somewhere.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Also please note that I have referenced the correct Fluent  validation dlls in my project.&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;You can find the details of this here:&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://fluentvalidation.codeplex.com/"&gt;http://fluentvalidation.codeplex.com/&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;So back to the &lt;b&gt;ContactValidator&lt;/b&gt;. Here it is:&lt;/span&gt;&lt;/pre&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://1.bp.blogspot.com/-lZCR-vPfyhQ/Tn-wpYZ76RI/AAAAAAAAG7Y/XpAeiJ9r2j4/s1600/RuleSets.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" id=":current_picnik_image" src="http://1.bp.blogspot.com/-lZCR-vPfyhQ/Tn-wpYZ76RI/AAAAAAAAG7Y/XpAeiJ9r2j4/s1600/RuleSets.jpg" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;You can see that we have 2 rule sets. The first is a staff rule set and the second is a public rule set.&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;They are quite similar and the only difference really is that the Age must be over 18 for a staff member. &lt;/span&gt;&lt;/pre&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Both rule sets also use a &lt;b&gt;.Must&lt;/b&gt; predicate validator.&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;This is a great place to put more complex logic.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;Here we need to ensure that there is at least 1 address in the Addresses collection that is marked as IsPrefferedAddress.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Ok, so that is all done, now we need to unit test or validation rules.&amp;nbsp; &lt;/span&gt;&lt;/pre&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://2.bp.blogspot.com/-Z3qbxtj8Muo/Tn-26aKyZKI/AAAAAAAAG8c/aDp0HJwLhaM/s1600/UnitTest.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-Z3qbxtj8Muo/Tn-26aKyZKI/AAAAAAAAG8c/aDp0HJwLhaM/s1600/UnitTest.JPG" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;br /&gt;So I have a unit test written here. Firstly I set up a new &lt;b&gt;ContactForValidationPOC &lt;/b&gt;entity and add a couple of addresses to it.&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;I then call Validate on it and ask it to validate using the Staff rule set. After validation we check that the ValidationResult (result) is valid&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;and then do a simple check for the number of validation errors. Obviously my test could be more detailed in a real world example.&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;As I debug through my test I can see that my entity is not valid (&lt;b style="color: red;"&gt;IsValid = false&lt;/b&gt;)&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;and it has a collection of validation errors on it.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://4.bp.blogspot.com/-pY2QAZigEBE/Tn-36uf3PxI/AAAAAAAAG8g/wFn7G1Fzj0k/s1600/IsValid.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-pY2QAZigEBE/Tn-36uf3PxI/AAAAAAAAG8g/wFn7G1Fzj0k/s1600/IsValid.jpg" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://1.bp.blogspot.com/-hKVD1vLRHgc/Tn-4A3UNFNI/AAAAAAAAG8k/cQdVPQf2LGs/s1600/Errors.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-hKVD1vLRHgc/Tn-4A3UNFNI/AAAAAAAAG8k/cQdVPQf2LGs/s1600/Errors.jpg" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;This is good as we didn't enter a first name, our Age is under 18 and we set all AddressForValidationPOC's in the Addresses collection to IsPrefferedAddress = false. &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Ok so we now know that our validation is working correctly on the server side. &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;We haven't even touched the MVC code yet.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;I have whipped up a quick MVC controller with a view and have disabled the settings&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;in the web.config that make client side validation work as shown in the following picture:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://4.bp.blogspot.com/-64_cQL_eQls/Tn_C5LaD5PI/AAAAAAAAG84/NWVBVvL8Abg/s1600/AppConfigFalse.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-64_cQL_eQls/Tn_C5LaD5PI/AAAAAAAAG84/NWVBVvL8Abg/s1600/AppConfigFalse.JPG" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Note&lt;/b&gt;: they should be set to false to prove that server side validation is still working correctly now that we are validating through MVC.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Here are my controller and view:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Note: I have just &lt;b&gt;forced &lt;/b&gt;2 addresses into the &lt;/span&gt;&lt;span style="font-size: small;"&gt;ContactForValidationPOC entity to make things easier, these are both set to IsPrefferedAddress = false&lt;/span&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://3.bp.blogspot.com/-fgdrghMSEwo/Tn_BZWN9mdI/AAAAAAAAG8w/DE9aUmHWWMo/s1600/Controller.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-fgdrghMSEwo/Tn_BZWN9mdI/AAAAAAAAG8w/DE9aUmHWWMo/s1600/Controller.jpg" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Here is the view that kicked off the validation:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://2.bp.blogspot.com/-m6HzYGYthQo/Tn_Idw9xBRI/AAAAAAAAG9I/SE5nVoSdGaQ/s1600/ViewEmpty.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-m6HzYGYthQo/Tn_Idw9xBRI/AAAAAAAAG9I/SE5nVoSdGaQ/s1600/ViewEmpty.JPG" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;You can see that, when debugging the controller we get the same validation results.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;IsValid = false and a number of errors relating to our Staff rule set.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Note that in our controller we could have control over what rule set is loaded if we so desired:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://3.bp.blogspot.com/-nViG-vY07Nc/Tn_Ch_LT9JI/AAAAAAAAG80/pIJF_ywq7kA/s1600/SewtingRuleSetinCode.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-nViG-vY07Nc/Tn_Ch_LT9JI/AAAAAAAAG80/pIJF_ywq7kA/s1600/SewtingRuleSetinCode.JPG" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;We could use some logic to check what type of rule set to load, staff or public.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Now I will change the web.config setting to ensure that client side validation gets included:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://3.bp.blogspot.com/-ZpDL7kTMwtM/Tn_DIO4hq-I/AAAAAAAAG88/amHYyq1M5Fg/s1600/AppConfig.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-ZpDL7kTMwtM/Tn_DIO4hq-I/AAAAAAAAG88/amHYyq1M5Fg/s1600/AppConfig.JPG" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;We now can fire up the view in a web browser and see client side validation in action:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://3.bp.blogspot.com/-H_eXuBDmfGI/Tn_IPAf2GuI/AAAAAAAAG9E/D2bIMB89B84/s1600/View.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-H_eXuBDmfGI/Tn_IPAf2GuI/AAAAAAAAG9E/D2bIMB89B84/s1600/View.JPG" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Well that is it, a high level explanation of domain entity server and client validation using Fluent, unit tests and MVC.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Some positive points:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ul style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;All the validation for an entity is contained wholly on the entity.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Fluent validation is very easy to write and read.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;More more complete business rules you can use a predicate delegate.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;You can unit test your entity validation results with ease.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;It works seamlessly with&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;jquery.validate&lt;/span&gt;&lt;span style="font-size: small;"&gt; and&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;jquery.validate.unobtrusive&lt;/span&gt;&lt;span style="font-size: small;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;With MVC you could also use IOC to instatiate your validators:&lt;br /&gt;&lt;a href="http://fluentvalidation.codeplex.com/wikipage?title=ValidatorFactory&amp;amp;referringTitle=Documentation"&gt;http://fluentvalidation.codeplex.com/wikipage?title=ValidatorFactory&amp;amp;referringTitle=Documentation&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&lt;b&gt;Some possible negatives:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Only the following validators are supported on the client:&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;- NotNull/NotEmpty&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;- Matches (regex)&lt;br /&gt;- &lt;/span&gt;&lt;span style="font-size: small;"&gt;InclusiveBetween (range)&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;- CreditCard&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;- Email&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;- EqualTo (cross-property equality comparison)&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;- Length&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Cant think of any more at the moment.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;I hope this was helpful.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;RuSs&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://4.bp.blogspot.com/-qKr-f2EdfcE/Tn-wLuBgMKI/AAAAAAAAG7A/doo-vzsA0BY/s1600/ContactClass.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: #2b91af;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-2609319558149030855?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2011/09/entity-validation-unit-testing-and-mvc.html</link><author>noreply@blogger.com (russell mccloy)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-qwC0of0jZIE/Tn_MeRNoLXI/AAAAAAAAG9M/bQTH9YhVJuw/s72-c/fv.png' height='72' width='72'/><thr:total>0</thr:total><georss:featurename>Melbourne VIC, Australia</georss:featurename><georss:point>-37.809575 144.965186</georss:point><georss:box>-38.211024 144.333472 -37.408126 145.59689999999998</georss:box></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-7152685744807806319</guid><pubDate>Tue, 06 Sep 2011 00:54:00 +0000</pubDate><atom:updated>2011-09-06T11:05:15.464+10:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>linq</category><category domain='http://www.blogger.com/atom/ns#'>Entity Framework 4.1</category><category domain='http://www.blogger.com/atom/ns#'>Entity Framework 4.0</category><title>EDMX or DbContext API</title><description>&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Hi all,&lt;br /&gt;&lt;br /&gt;I have used EF for a while. I am used to using an EDMX file for my model. I have also recently used Code First and the DbContext API and I really like this.&lt;br /&gt;Last night I started building an app. and was thinking, am I starting on the right foot? Do I use EDMX or DbContext API? If the thing i'm building turns out to be big, will I have chosen the right technology. &lt;br /&gt;&lt;br /&gt;What if I use DbContext API and get it to generate my database. Obviously I don't want this to keep generating my database down the track when i'm at a stable point in development (or do I?). Then if I want to tweak my database or domain model will all the strings come un done?&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;The DbContext API is a simplified version. Will it do everything I need? I dont think ill need stored procedures as I can do everything with linq. &lt;br /&gt;&lt;br /&gt;So my real question is. If I am building something that is &lt;b&gt;serious &lt;/b&gt;and out there is the real world and it may turn out to require some complex coding, which way do I go? EDMX or DbContext API?&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Is EDMX now old school?&amp;nbsp;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;Comments / thoughts?&lt;br /&gt;&lt;br /&gt;RuSs&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-7152685744807806319?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2011/09/hi-all-i-have-used-ef-for-while.html</link><author>noreply@blogger.com (russell mccloy)</author><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-9099276802804627268</guid><pubDate>Mon, 05 Sep 2011 05:35:00 +0000</pubDate><atom:updated>2011-09-06T10:56:53.260+10:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Niject</category><category domain='http://www.blogger.com/atom/ns#'>MVC</category><category domain='http://www.blogger.com/atom/ns#'>JQuery</category><category domain='http://www.blogger.com/atom/ns#'>NuGet</category><category domain='http://www.blogger.com/atom/ns#'>Entity Framework</category><category domain='http://www.blogger.com/atom/ns#'>Moq</category><title>A small update</title><description>&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Morning all,&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Well it's been a while since I posted  in my blog that i'm sure no one reads! I have finally got used to living  in Melbourne and have started enjoying it more now that the weather is  getting better.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;I will hopefully be posting some interesting stuff on MVC up here is the next few weeks.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Here is a list of things I have looked at in the last few weeks.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;li&gt;&lt;b&gt;MVC(3) &lt;/b&gt;- I have been trying to get around to getting up to date on MVC for years. Ever since I tried and failed to read Martin fowler's book on design patterns (http://martinfowler.com/eaaDev/uiArchs.html). &lt;br /&gt;Well finally I have got around to it and I love it. Combined with the Entity Framework edmx or code first it is such a great way to work. This is the way, for most sites, the web should be built. No hidden viewstate, no nightmare page load order and code that you have total granular control over. Awesome!!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Razor view engine&lt;/b&gt; - initially it looks dodgy but after a little playing around it's cleaner and easier to read than traditional asp.net forms. One thing I have learned about Razor is, if it looks messy and hard to read, then you probably have started putting business logic where it should not go.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Unit testing and TDD with MVC&lt;/b&gt; - Combined with &lt;a href="http://ninject.org/"&gt;Ninject&lt;/a&gt; and &lt;a href="http://code.google.com/p/moq/"&gt;Moq&lt;/a&gt; this is easy. You can directly test your controllers. Compare this to ASP.NET web forms where your controller was, sort of, your code behind. You needed httpContext etc. Now you can test just your controller logic without other webby things clouding the test.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;JQuery &lt;/b&gt;- ok so this is not new but im loving it so far. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;NuGet &lt;/b&gt;- the NuGet package manager is quite cool. NuGet is a Visual Studio extension that makes it easy to add, remove,  and update libraries and tools in Visual Studio projects that use the  .NET Framework. When you add a library or tool, NuGet copies files to  your solution and automatically makes whatever  changes are needed in your project, such as adding references and  changing your &lt;i&gt;app.config&lt;/i&gt; or &lt;i&gt;web.config&lt;/i&gt; file. When you remove a library,  NuGet removes files and reverses whatever changes it made in your  project so that no clutter is left. &lt;br /&gt;For example if you need to get the latest JQuery libraries into you solution you open &lt;b&gt;Tools &lt;/b&gt;&amp;gt; &lt;b&gt;library package manager&lt;/b&gt; &amp;gt; &lt;b&gt;package manager console&lt;/b&gt; and type:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;PM&amp;gt; Update-Package jquery&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;PM with auto update your JQuery to the correct version. Note that your references inside Views &amp;gt; Shared &amp;gt; _Layout.cshtml (for example) will not be auto updated. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Well, I know this is a bit of a lame post but it was more to get me back into the habit of writing on my blog. I hope to come up with some more interesting stuff soon.&lt;br /&gt;&lt;br /&gt;RuSs&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-9099276802804627268?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2011/09/morning-all-well-its-been-while-since-i.html</link><author>noreply@blogger.com (russell mccloy)</author><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-3168186003210337085</guid><pubDate>Tue, 07 Jun 2011 23:34:00 +0000</pubDate><atom:updated>2011-06-08T09:37:39.855+10:00</atom:updated><title>SQL Profiler - Being self-centered is a good thing (thanks Jeff Handley)</title><description>&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;When I'm faced with app. debugging, especially procedures  that take awhile to run, or require a series of steps in the  application to fire off, I often use SQL Profiler to capture the SQL  call.&amp;nbsp; Then I'll re-run the call directly in SQL Management Studio.&amp;nbsp; But  SQL Profiler can bring back a lot of noise, making it tough to grab  only what I need.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;  &lt;/span&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;I finally created a custom trace template and  set it to be my default.&amp;nbsp; It will only show me calls  made from my local workstation to the development database. &lt;em&gt;(we have a shared development database*)&lt;/em&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;  &lt;/span&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;This article will help you set up a personalised trace. For expample you can filter by Application Name or Host Name to reduce the noise in your trace.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;a href="http://jeffhandley.com/archive/2008/02/07/sql-profiler---being-self-centered-is-a-good-thing.aspx"&gt;Link to the full article by Jeff Handley&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Thanks&lt;/div&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;RuSs&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-3168186003210337085?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2011/06/sql-profiler-being-self-centered-is.html</link><author>noreply@blogger.com (russell mccloy)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-5927144056355375011</guid><pubDate>Wed, 23 Mar 2011 01:23:00 +0000</pubDate><atom:updated>2011-03-23T12:23:36.832+11:00</atom:updated><title>Finding all stored procedures updated in the last (n) days</title><description>&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;This was quite helpful:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;SELECT name&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;FROM sys.objects&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;WHERE type = 'P'&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;AND DATEDIFF(D,modify_date, GETDATE()) &amp;lt; 30&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-5927144056355375011?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2011/03/finding-all-stored-procedures-updated_23.html</link><author>noreply@blogger.com (russell mccloy)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-8987240519213809765</guid><pubDate>Sat, 15 Jan 2011 03:33:00 +0000</pubDate><atom:updated>2011-01-15T14:33:28.054+11:00</atom:updated><title>My new life in Melbourne</title><description>&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Morning,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;After 8 years in London I have decided enough is enough. I'm on the way to Melbourne to see what the future holds.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Im currently getting my CV ready and if anyone out there has any leads I can follow in Melbourne that would be great.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;I'm currently in Sydney with my family and will head south in the next couple of weeks.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;RuSs&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-8987240519213809765?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2011/01/my-new-life-in-melbourne.html</link><author>noreply@blogger.com (russell mccloy)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-4292418980572256429</guid><pubDate>Wed, 10 Nov 2010 16:41:00 +0000</pubDate><atom:updated>2010-11-11T03:41:58.105+11:00</atom:updated><title>Re-map an SQL server login to a database login</title><description>&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Hello,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Sometimes users get un-mapped from the server to database login after a database restore.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Here is the command to fix it:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;EXEC&lt;/span&gt;&lt;span class="Apple-style-span" style="color: red;"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #783f04;"&gt;sp_change_users_login&lt;/span&gt;&lt;span class="Apple-style-span" style="color: red;"&gt; 'Auto_Fix', 'SRSUser'&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;RuSs&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-4292418980572256429?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2010/11/re-map-sql-server-login-to-database.html</link><author>noreply@blogger.com (russell mccloy)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-6356731689989511498</guid><pubDate>Wed, 10 Nov 2010 11:52:00 +0000</pubDate><atom:updated>2010-11-10T22:52:35.997+11:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Sharepoint</category><category domain='http://www.blogger.com/atom/ns#'>3.5</category><category domain='http://www.blogger.com/atom/ns#'>Workflow</category><category domain='http://www.blogger.com/atom/ns#'>quiesce</category><title>Workflow 3.5 and MOSS 2007 - This task is currently locked by a running workflow and cannot be edited.</title><description>&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Morning,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Today I had an interesting issue with my WF3.5 SharePoint workflow.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;A user was attempting to action a SharePoint workflow task and was given the error:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="ctl00_PlaceHolderMain_LabelMessage"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;This task is currently locked by a  running workflow and cannot be edited.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="ctl00_PlaceHolderMain_LabelMessage"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TNqFsjiAt5I/AAAAAAAAGuA/lhEgT9W3JqI/s1600/TaskLocked.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="157" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TNqFsjiAt5I/AAAAAAAAGuA/lhEgT9W3JqI/s400/TaskLocked.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span id="ctl00_PlaceHolderMain_LabelMessage"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I have seen this error a small number of times (5-10) amongst the 1000's of workflow instances that have passed through my production system.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I am always very careful with quiescing and always release a new workflow version the correct was using workflow.xml, feature.xml and stsadm.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;There was a time a few weeks ago when we had to do an emergency bug fix as some of my business logic was not functioning as expected.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I know that I can never change an activity in my workflow without quiescing otherwise the serialization and deserialization (dyhydrate / re-hydrate) from the persistence store gets confused and hence an error like this occurs.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The funny thing is, I only changed code in a utility class and only the code inside an existing method (ie...method definition was not changed) so I thought that there was no need for quiescing. (no core workflow code was altered).&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Anyway,just writing here incase anyone has an opinion on this.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;From now on I will quiesce no matter what the emergency is!!&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;RuSs&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-6356731689989511498?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2010/11/workflow-35-and-moss-2007-this-task-is.html</link><author>noreply@blogger.com (russell mccloy)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TNqFsjiAt5I/AAAAAAAAGuA/lhEgT9W3JqI/s72-c/TaskLocked.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-6582511123353051918</guid><pubDate>Tue, 19 Oct 2010 08:54:00 +0000</pubDate><atom:updated>2010-10-20T00:22:51.602+11:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Workflow 4.0</category><title>Workflow 4.0 Activity Designer</title><description>&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;In this post i'm going to explain how to make a custom activity better visually.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;First of all I have a custom code activity called RequestManagerAction. It inherits from CodeActivity and overrides its Execute method. (I may do a post on code activities later).&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The visual representation of code activity, by default, looks like this:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TL1HIkYD1ZI/AAAAAAAAGqA/Pxk_oU2z5Ro/s1600/DefaultCodeActivity.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TL1HIkYD1ZI/AAAAAAAAGqA/Pxk_oU2z5Ro/s1600/DefaultCodeActivity.jpg" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;And by the end of this post it will look like this:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TL1HIgEhNUI/AAAAAAAAGqE/9_nFlywwbVY/s1600/TheFinalResult.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TL1HIgEhNUI/AAAAAAAAGqE/9_nFlywwbVY/s1600/TheFinalResult.jpg" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The first step is to create a new peoject for your activity designer. As we want to "design" RequestManagerAction I have created a new project called:&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;RequestManagerActionDesignerLibrary&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;. And inside this I add a new Activity Designer Item from the Workflow - installed templates called&amp;nbsp;RequestManagerActionDesigner.xaml.&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TL1JZboei5I/AAAAAAAAGqM/iafdGpjFaD8/s1600/NewActivityDesignerProject.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="404" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TL1JZboei5I/AAAAAAAAGqM/iafdGpjFaD8/s640/NewActivityDesignerProject.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;the initial view after opening&amp;nbsp;RequestManagerActionDesigner.xaml is a split screen with the Xaml that represents the design in the bottom part of the screen and the actualy visual design in the top part.&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TL1J8T7qzjI/AAAAAAAAGqU/RjvV6KsXmME/s1600/XamlBottomDesignTop.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TL1bVjHb6GI/AAAAAAAAGsM/_tSkb5-Vg7Y/s1600/InitView.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="496" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TL1bVjHb6GI/AAAAAAAAGsM/_tSkb5-Vg7Y/s640/InitView.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;In the bottom pane we can see the Xaml. First of all I want to set the Collapsible property to false as I don't want my designer to be collapsible.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TL1JZaShTeI/AAAAAAAAGqQ/_tp4LEqAgOg/s1600/DefaultXamlWithNoCollapse.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="106" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TL1JZaShTeI/AAAAAAAAGqQ/_tp4LEqAgOg/s640/DefaultXamlWithNoCollapse.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The 2nd taks is to add an&amp;nbsp;ArgumentToExpressionConverter to my Xaml. This defines the mapping between arguments and expressions and provides the functionality to convert between these objects. Typically, this converter is used declaratively when using an ExpressionTextBox in a custom activity designer.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TL1MJUx08TI/AAAAAAAAGqk/xCRfLWSLcw0/s1600/ArgumentToExpressionConverter.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="180" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TL1MJUx08TI/AAAAAAAAGqk/xCRfLWSLcw0/s640/ArgumentToExpressionConverter.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The next thing I want to do it sort out my layout. As my custom activity has 3 properties:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TL1LUeAR8yI/AAAAAAAAGqc/d2fL6bTknW8/s1600/3Properties.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="62" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TL1LUeAR8yI/AAAAAAAAGqc/d2fL6bTknW8/s640/3Properties.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The main aim of what we are doing here is to show ExpressionTextBoxes for all 3 of these.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I will add a grid of 2 columns and 3 rows for our properties.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TL1McDPJU2I/AAAAAAAAGqo/-CsaUPetlYc/s1600/Grid.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="336" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TL1McDPJU2I/AAAAAAAAGqo/-CsaUPetlYc/s400/Grid.jpg" width="400" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;You can see that inside this grid we have some (3) collapsed TextBlock sections. I will explain these now.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Each TextBlock is for a property.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The first TextBlock is for the ExpenseRequest property of our custom activity:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TL1M57rrELI/AAAAAAAAGqs/vVCjAo5xSog/s1600/FirstTextBlock.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="148" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TL1M57rrELI/AAAAAAAAGqs/vVCjAo5xSog/s640/FirstTextBlock.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;You can see the obvious items marked out in the above picture.Note that the position inside the grid defined above is set by the Grid.Row and Grid.Column indexes which are zero(0) based.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;You can also see that our expression text box is bound to ModelItem.SubmitExpenseRequest.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;SubmitExpenseRequest is a class in my Contracts project that is part of my domain model:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TL1cDevT4-I/AAAAAAAAGsU/8pCE0IIleKM/s1600/SubmitExpenseRequestCode.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="456" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TL1cDevT4-I/AAAAAAAAGsU/8pCE0IIleKM/s640/SubmitExpenseRequestCode.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TL1b1MlBdJI/AAAAAAAAGsQ/JmbR9hwXSi8/s1600/SubmitExpenseRequest.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="236" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TL1b1MlBdJI/AAAAAAAAGsQ/JmbR9hwXSi8/s640/SubmitExpenseRequest.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The ModelItem represents the activity that that the designer is currently editing. This object sits between the visual elements that present an activity to the developer and the in-memory representation of the activity.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;You can now see that we are well on the way to building our custom design:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TL1RhE352SI/AAAAAAAAGq0/3HFSr2nLm2E/s1600/Just!Property.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="135" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TL1RhE352SI/AAAAAAAAGq0/3HFSr2nLm2E/s400/Just!Property.jpg" width="400" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I will now go ahead and add the other 2 ExpressionTextBoxes and the relevant properties.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TL1R_1otouI/AAAAAAAAGq4/d3gP53kxeLc/s1600/AllProperty.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="203" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TL1R_1otouI/AAAAAAAAGq4/d3gP53kxeLc/s400/AllProperty.jpg" width="400" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;You will notice the little smiley icon in the top left of the designer. To add this, I added the following xaml:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TL1S1_G6CPI/AAAAAAAAGrE/1OB8FwF6O74/s1600/icon.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="358" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TL1S1_G6CPI/AAAAAAAAGrE/1OB8FwF6O74/s640/icon.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Now I am ready to associate my designer with the actual code activity that is already part of my workflow. If you remember it currently looks like this:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TL1HIkYD1ZI/AAAAAAAAGqA/Pxk_oU2z5Ro/s1600/DefaultCodeActivity.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TL1HIkYD1ZI/AAAAAAAAGqA/Pxk_oU2z5Ro/s1600/DefaultCodeActivity.jpg" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;First I will add a reference to the project that my code activity is part of:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TL1cjMuIBtI/AAAAAAAAGsY/KQJqZIdPn3s/s1600/AddReferenceToCodeActProj2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="302" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TL1cjMuIBtI/AAAAAAAAGsY/KQJqZIdPn3s/s640/AddReferenceToCodeActProj2.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Once its referenced we can add an attribute to the top of our codeActivity class (Don't forget the System.ComponentModel import at the top!):&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TL1VgzqjimI/AAAAAAAAGr8/PP36-iZ1tZE/s1600/AddAttribToClass.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="136" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TL1VgzqjimI/AAAAAAAAGr8/PP36-iZ1tZE/s400/AddAttribToClass.jpg" width="400" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Once you have built the projects you will see the "RequestManagerAction" code activity in the toolbox. Drag this onto your workflow surface if it's not already there and you will see that the look of the activity is not just a small yellow box any more. Nice!!&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TL1aJvq_FAI/AAAAAAAAGsE/KkbWEjLZp0A/s1600/FinalWorkflow.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="437" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TL1aJvq_FAI/AAAAAAAAGsE/KkbWEjLZp0A/s640/FinalWorkflow.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;This is obviously more useful as we don't need to &amp;nbsp;use the properties pane to set the properties for our code activity, we can just type them straight into the workflow.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;RuSs&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-6582511123353051918?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2010/10/workflow-40-activity-designer.html</link><author>noreply@blogger.com (russell mccloy)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TL1HIkYD1ZI/AAAAAAAAGqA/Pxk_oU2z5Ro/s72-c/DefaultCodeActivity.jpg' height='72' width='72'/><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-6090354402463690273</guid><pubDate>Fri, 08 Oct 2010 09:54:00 +0000</pubDate><atom:updated>2010-10-19T23:34:32.386+11:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Workflow 4.0</category><category domain='http://www.blogger.com/atom/ns#'>Tracking Profile</category><category domain='http://www.blogger.com/atom/ns#'>AppFabric</category><category domain='http://www.blogger.com/atom/ns#'>Entity Framework 4.0</category><title>Workflow 4.0 - Adding annotations to your workflow tracking profile</title><description>&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Lets say you have a workflow that is running on a DEV / TEST and LIVE server. Lets say, also for the sake of it, that we are using the same AppFabric database for all 3. (yes, this is not the best idea but to explain annotations it helps.)&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TK7qnIBMLQI/AAAAAAAAGl8/SgWsB65LiEI/s1600/web.config.TrackingProfile.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="498" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TK7qnIBMLQI/AAAAAAAAGl8/SgWsB65LiEI/s640/web.config.TrackingProfile.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;So what we want to acheive is the show, in AppFabric monitoring, which server we are using. So the monitoring with show either:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;ServerThatEmittedThis: DEV_Server&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;ServerThatEmittedThis: TEST_Server&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;ServerThatEmittedThis: LIVE_Server&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Again, this example is useless in the real world but i'm sure by the end of this post you will be able to imagine some real world uses for this functionality.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;So you can see that in my current tracking profile I have added an annotation of my DEV server as follows:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TK7kxo_MdFI/AAAAAAAAGlQ/4hCrk5Qvx9E/s1600/web.config.TrackingProfile.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;You can see in the pic. "&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;ServerThatEmittedThis: DEV_Server&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;" which will now show up in AppFabric monitoring.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;So I will now run the workflow which is hosted in IIS / AppFabric.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;My workflow runs and is persisted into my persistence store. So I click on the Active or Idle Intance in my AppFabric dashboard:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TK7m55fnBCI/AAAAAAAAGlY/cxA_VOIRCk0/s1600/AppFabricDashboard.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="508" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TK7m55fnBCI/AAAAAAAAGlY/cxA_VOIRCk0/s640/AppFabricDashboard.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Note I could also navigate to the annotated info if my workflow wasnt using a persistence store by Looking on the dashboard for the WCF Call History section and click on the link in the Completed Calls section.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TK7m57Jg6nI/AAAAAAAAGlc/F5RcaevJ4t0/s1600/clickOnPersisted.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="631" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TK7m57Jg6nI/AAAAAAAAGlc/F5RcaevJ4t0/s640/clickOnPersisted.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Once I can see the instance I click to select view tracked events:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TK7m6IDXoeI/AAAAAAAAGlg/kak2hzbgahY/s1600/ClickOnViewTrackedEvents.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="564" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TK7m6IDXoeI/AAAAAAAAGlg/kak2hzbgahY/s640/ClickOnViewTrackedEvents.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Once here, I can see all the events that my workflow has passed through.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Note that I am using a custom tracking profile that emits less than some of the default profiles. My custom tracking profile named: &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;ExpenseServiceTrackingProfile&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;is shown in the first screen shot of a part of my web.config in this post.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TK7m6BO21FI/AAAAAAAAGlk/tbTlyqcj768/s1600/clickOnRecordInQuestion.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="410" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TK7m6BO21FI/AAAAAAAAGlk/tbTlyqcj768/s640/clickOnRecordInQuestion.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;As i placed my annotation in my web.config as a child node to the activityStateQuery named Screen Expense I know to expect to see my annotation in AppFabric at the point where my screen expense activity emitting its tracking record.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TK7pr41RqpI/AAAAAAAAGlw/7D8vwjxQ4zs/s1600/ScreenExpPortionOfWebConfig.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TK7rHyuefAI/AAAAAAAAGmE/m0DxhPgcTko/s1600/ScreenExpPortionOfWebConfig.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="232" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TK7rHyuefAI/AAAAAAAAGmE/m0DxhPgcTko/s640/ScreenExpPortionOfWebConfig.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;As you can see from the above pic. I have clicked on the Screen expense item and at the bottom you can see a tab called "tracked variables" shown below:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TK7pgecgEOI/AAAAAAAAGls/WG24htC6lVU/s1600/ClickOnTrackedVarsTab.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="166" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TK7pgecgEOI/AAAAAAAAGls/WG24htC6lVU/s640/ClickOnTrackedVarsTab.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;So I know that the workflow (server) emitting this tracking record is from my dev server.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Rubbish example, but &amp;nbsp;I hope you get the point.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;R&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-6090354402463690273?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2010/10/workflow-40-adding-annotations-to-your.html</link><author>noreply@blogger.com (russell mccloy)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TK7qnIBMLQI/AAAAAAAAGl8/SgWsB65LiEI/s72-c/web.config.TrackingProfile.JPG' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-5182426085467707197</guid><pubDate>Tue, 05 Oct 2010 09:22:00 +0000</pubDate><atom:updated>2010-10-05T20:52:49.479+11:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Workflow 4.0</category><category domain='http://www.blogger.com/atom/ns#'>Tracking Profile</category><category domain='http://www.blogger.com/atom/ns#'>AppFabric</category><category domain='http://www.blogger.com/atom/ns#'>Entity Framework 4.0</category><title>AppFabric Hosting PowerShell Cmdlets</title><description>&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;This seems to be the place for the AppFabric Hosting PowerShell Cmdlets:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee767662(v=WS.10).aspx"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;http://msdn.microsoft.com/en-us/library/ee767662(v=WS.10).aspx&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The following shows the current state of my AppFabric. It has nothing persisted.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKrq1Uk-pBI/AAAAAAAAGkI/ELRJJBrVILo/s1600/AppFabricDash_BeforePersistedInstance.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="600" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKrq1Uk-pBI/AAAAAAAAGkI/ELRJJBrVILo/s640/AppFabricDash_BeforePersistedInstance.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I start a workflow that I know will persist to my persistence store:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKrq1YqPnOI/AAAAAAAAGkM/zKE7zV0ln7E/s1600/WindowsClient.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKrq1YqPnOI/AAAAAAAAGkM/zKE7zV0ln7E/s1600/WindowsClient.jpg" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I can then look back at my AppFabric dashboard and see that 1 workflow is persisted and active.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKrq1vu9CsI/AAAAAAAAGkQ/guY9MWevuAg/s1600/AppFabricDash_AfterPersistedInstance.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKrq1vu9CsI/AAAAAAAAGkQ/guY9MWevuAg/s1600/AppFabricDash_AfterPersistedInstance.jpg" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I can then open&amp;nbsp;Windows PowerShell Modules. It calls this from the server menu behind the scenes:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NoExit -ImportSystemModules&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKrq1xmSg-I/AAAAAAAAGkY/kLFRiL85zwM/s1600/LoadedPowerShell.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="408" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKrq1xmSg-I/AAAAAAAAGkY/kLFRiL85zwM/s640/LoadedPowerShell.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Ok so it's loaded. Now, just as a simple example we can query for&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;all instances in the default persistence store.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;We call "&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 16px; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Get-ASAppServiceInstance&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;".&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKrq42wVCbI/AAAAAAAAGkc/woPWn6Mv5Kw/s1600/LoadedPowerShell_PostQuery.jpg" imageanchor="1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="408" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKrq42wVCbI/AAAAAAAAGkc/woPWn6Mv5Kw/s640/LoadedPowerShell_PostQuery.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;It returns all the info about my persisted workflow instance.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;This is interesting as I have just noticed that I have an extra unnecessary&amp;nbsp;service contract name, a spelling mistake and hence an extra bookmark.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKrs-QrpJMI/AAAAAAAAGkk/de0MO8kMxw0/s1600/ManagerActionComplete.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="65" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKrs-QrpJMI/AAAAAAAAGkk/de0MO8kMxw0/s640/ManagerActionComplete.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Ok, so I went in, altered the service contract name to get rid of the extra IService ref as it should only have an &amp;nbsp;IExpenseService ref. I also renamed my bookmark from ManagerActionComplete to&amp;nbsp;ManagerActionCompleted. Then I re-ran my workflow thinking all was ok.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;An exception was thrown so obviously I just did something incorrectly.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I re-ran my&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 16px; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Get-ASAppServiceInstance&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;". and saw the following information which of course is very obvious:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The exception is:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;ExceptionMessage: A bookmark with the name 'ManagerActionCompleted|{http://tempuri.org/}IExpenseService' already exists.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Obviously I just named a bookmark in my workflow to the same name as another one.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I renamed&amp;nbsp;ManagerActionCompleted to&amp;nbsp;ManagerActionCompletedReminder as this bookmark gets resumed after a delay activity expiration time has elapsed.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;So&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 16px; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Get-ASAppServiceInstance&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;" now shows:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKrwFsU7hRI/AAAAAAAAGk0/PGduWInzNGc/s1600/LoadedPowerShell_AllGood.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="408" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKrwFsU7hRI/AAAAAAAAGk0/PGduWInzNGc/s640/LoadedPowerShell_AllGood.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;We then wait for the delay time to expire and run&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 16px; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Get-ASAppServiceInstance&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;" again and we then see:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKrwv1d_5BI/AAAAAAAAGk4/iCzUqNiaWLs/s1600/LoadedPowerShell_AllGoodPostDelay.jpg" imageanchor="1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="408" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKrwv1d_5BI/AAAAAAAAGk4/iCzUqNiaWLs/s640/LoadedPowerShell_AllGoodPostDelay.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Ok so I set off to write myself an investigative blog into&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Windows PowerShell Modules for AppFabric and this technology already showed me a couple of issues with my workflow. Nice!!&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Again, look at this link for loads of other useful commands: &lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee767624(v=WS.10).aspx"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;http://msdn.microsoft.com/en-us/library/ee767624(v=WS.10).aspx&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;thanks&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;RuSs&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-5182426085467707197?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2010/10/appfabric-hosting-powershell-cmdlets.html</link><author>noreply@blogger.com (russell mccloy)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKrq1Uk-pBI/AAAAAAAAGkI/ELRJJBrVILo/s72-c/AppFabricDash_BeforePersistedInstance.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-6035556960574316396</guid><pubDate>Tue, 05 Oct 2010 08:17:00 +0000</pubDate><atom:updated>2010-10-19T21:07:43.929+11:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Workflow 4.0</category><category domain='http://www.blogger.com/atom/ns#'>Tracking Profile</category><category domain='http://www.blogger.com/atom/ns#'>AppFabric</category><category domain='http://www.blogger.com/atom/ns#'>Entity Framework 4.0</category><title>Why does my workflow die when I add a TransactedReceiveActivity?</title><description>&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;dzien dobry,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I dont know the answer to this one but hopefully I will be able to update this post when I find out.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The issue is this:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;When I add a TransactedReceiveScope to a fully functional, persisted workflow monitored by AppFabric the workflow throws an exception.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I have looked at the exception and my trace / log files and can't find any useful information.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;My Workflow looks like this:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKrena2S1iI/AAAAAAAAGj8/NHskMwMogqc/s1600/pictureOfItandF4Properties.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TL1tuw7kfUI/AAAAAAAAGtA/JTinnX4ezuY/s1600/updatedWhereItIs.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="282" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TL1tuw7kfUI/AAAAAAAAGtA/JTinnX4ezuY/s640/updatedWhereItIs.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;And the error is this:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKrenICUUbI/AAAAAAAAGj4/sU5X3kN0zQI/s1600/Error.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="300" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKrenICUUbI/AAAAAAAAGj4/sU5X3kN0zQI/s640/Error.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The error text is&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The execution of the InstancePersistenceCommand named {urn:schemas-microsoft-com:System.Activities.Persistence/command}LoadWorkflow was interrupted by an error.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;And the stack trace is:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Server stack trace:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc&amp;amp; rpc)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.ServiceChannelProxy.InvokeEndService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Exception rethrown at [0]:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;&amp;nbsp; at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;&amp;nbsp; at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&amp;amp; msgData, Int32 type)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;&amp;nbsp; at WindowsClient.ExpenseServiceRef.IExpenseService.EndGetData(IAsyncResult result)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;&amp;nbsp; at WindowsClient.ExpenseServiceRef.ExpenseServiceClient.WindowsClient.ExpenseServiceRef.IExpenseService.EndGetData(IAsyncResult result) in C:\PROJECTS\TelerealTrillium.Expense.Workflow.Soln\TelerealTrillium.Expense.Workflow.Soln\WindowsClient\Service References\ExpenseServiceRef\Reference.cs:line 532&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;&amp;nbsp; at WindowsClient.ExpenseServiceRef.ExpenseServiceClient.EndGetData(IAsyncResult result) in C:\PROJECTS\TelerealTrillium.Expense.Workflow.Soln\TelerealTrillium.Expense.Workflow.Soln\WindowsClient\Service References\ExpenseServiceRef\Reference.cs:line 537&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;&amp;nbsp; at WindowsClient.Form1.OnStartCompleted(IAsyncResult asr) in C:\PROJECTS\TelerealTrillium.Expense.Workflow.Soln\TelerealTrillium.Expense.Workflow.Soln\WindowsClient\Form1.cs:line 93&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Ill keep hunting for solution and will post back when I find it.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;========================== Time passes =========================&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Ok so I came back to this little issue after remembering about the MSDTC.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I realized that my app. updates my persistence store AND my custom expense database inside the&amp;nbsp;TransactedReceiveActivity. (I update my custom expense database using Entity Framework 4.0)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Now my connection strings for these 2 things are different obviously so I am trying to wrap a transaction around some activities that span 2 databases.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TL1qgHTdQuI/AAAAAAAAGss/JmbhwDPNjtU/s1600/ConnectionStringEntities.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="58" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TL1qgHTdQuI/AAAAAAAAGss/JmbhwDPNjtU/s640/ConnectionStringEntities.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TL1rD3bZ79I/AAAAAAAAGsw/EFyScg_2Gpw/s1600/PersistenceConn.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="34" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TL1rD3bZ79I/AAAAAAAAGsw/EFyScg_2Gpw/s640/PersistenceConn.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;So what I did first was enable MSDTC on my local server that hosts my WCF Workflow 4.0.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;It was like:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TL1reQYEgyI/AAAAAAAAGs0/EhVuT2xLT7s/s1600/MSDTCwasLike.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TL1reQYEgyI/AAAAAAAAGs0/EhVuT2xLT7s/s400/MSDTCwasLike.jpg" width="366" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Now its like:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TL1rkcZdo_I/AAAAAAAAGs4/4eyTNoHLizM/s1600/MSDTCNowLike.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TL1rkcZdo_I/AAAAAAAAGs4/4eyTNoHLizM/s400/MSDTCNowLike.jpg" width="367" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;But that still didnt work. Although I did see a one off Transaction Aborted error which I can't reproduce.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I then went to my remote SQL server that hosts my Persistence store and custom Expense database which is what I should have looked at first really.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I enabled the same open-ish security on the Sql box and it fixed everything!!&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TL1rkcZdo_I/AAAAAAAAGs4/4eyTNoHLizM/s1600/MSDTCNowLike.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TL1rkcZdo_I/AAAAAAAAGs4/4eyTNoHLizM/s400/MSDTCNowLike.jpg" width="367" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TL1st5JninI/AAAAAAAAGs8/QgCIn5IpjUI/s1600/GoodResult.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="268" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TL1st5JninI/AAAAAAAAGs8/QgCIn5IpjUI/s400/GoodResult.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;thanks&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;RuSs&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-6035556960574316396?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2010/10/why-does-my-workflow-die-when-i-add.html</link><author>noreply@blogger.com (russell mccloy)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TL1tuw7kfUI/AAAAAAAAGtA/JTinnX4ezuY/s72-c/updatedWhereItIs.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-67435879786978935</guid><pubDate>Tue, 05 Oct 2010 07:41:00 +0000</pubDate><atom:updated>2010-10-05T20:43:33.620+11:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Workflow 4.0</category><category domain='http://www.blogger.com/atom/ns#'>Tracking Profile</category><category domain='http://www.blogger.com/atom/ns#'>AppFabric</category><category domain='http://www.blogger.com/atom/ns#'>Entity Framework 4.0</category><title>Resetting the AppFabric dashboard whilst in development iterations</title><description>&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Bonjour,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I have found a little bit of t-sql that cleans out the required sql tables that the AppFabric dashboard uses. I have not researched this much but it seems to do the job.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;It is very useful if you are doing constant development iterations and you don't want loads of instances of your workflow clogging up the AppFabric dashboard.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;The t-sql is this&lt;/b&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: blue; font-family: 'Courier New'; font-size: 10pt;"&gt;delete&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt;"&gt; [dbo]&lt;span style="color: grey;"&gt;.&lt;/span&gt;[ASWfInstancesTable] &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: blue; font-family: 'Courier New'; font-size: 10pt;"&gt;delete&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt;"&gt; [dbo]&lt;span style="color: grey;"&gt;.&lt;/span&gt;[ASWfEventsTable]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: blue; font-family: 'Courier New'; font-size: 10pt;"&gt;delete&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt;"&gt; [dbo]&lt;span style="color: grey;"&gt;.&lt;/span&gt;[ASWcfEventsTable]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: blue; font-family: 'Courier New'; font-size: 10pt;"&gt;delete&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt;"&gt; [System.Activities.DurableInstancing]&lt;span style="color: grey;"&gt;.&lt;/span&gt;[KeysTable] &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: blue; font-family: 'Courier New'; font-size: 10pt;"&gt;delete&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt;"&gt; [System.Activities.DurableInstancing]&lt;span style="color: grey;"&gt;.&lt;/span&gt;[InstancesTable]&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Probably not a god idea to rely on this in anything but a development context.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Please comment if you know any more on this.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;thanks&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;RuSs&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-67435879786978935?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2010/10/resetting-appfabric-dashboard-whilst-in.html</link><author>noreply@blogger.com (russell mccloy)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-4773068203330778474</guid><pubDate>Fri, 01 Oct 2010 16:02:00 +0000</pubDate><atom:updated>2010-10-05T21:16:03.640+11:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Workflow 4.0</category><category domain='http://www.blogger.com/atom/ns#'>Tracking Profile</category><category domain='http://www.blogger.com/atom/ns#'>AppFabric</category><category domain='http://www.blogger.com/atom/ns#'>Entity Framework 4.0</category><title>Workflow Tracking Profile Editor</title><description>&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Here is a great link on&amp;nbsp;Dennis van der Stelt's blog about&amp;nbsp;info. about the workflow tracking profile editor.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://bloggingabout.net/blogs/dennis/archive/2010/06/08/workflow-tracking-profile-editor.aspx"&gt;&lt;span class="Apple-style-span" style="color: #3d85c6;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;http://bloggingabout.net/blogs/dennis/archive/2010/06/08/workflow-tracking-profile-editor.aspx&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;This tool makes it easy to create a tracking profile. It allows you to load up a WF4 XAMLX file. It then shows the editor and you’re allowed to browse through all (composite) activities. After right-clicking an activity (with a blue circle on it) you can specify what you exactly want to track. It even knows everything about arguments and (scoped) variables so you can use checkboxes to turn them on or off.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Here are some screen shots:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKYFyP1OqNI/AAAAAAAAGfw/6SNFGbtdpHY/s1600/WorkflowTrackingProfileEditor.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="420" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKYFyP1OqNI/AAAAAAAAGfw/6SNFGbtdpHY/s640/WorkflowTrackingProfileEditor.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKYFyAo37cI/AAAAAAAAGf0/89OeTSmOSz8/s1600/WorkflowTrackingProfileEditor_design.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="480" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKYFyAo37cI/AAAAAAAAGf0/89OeTSmOSz8/s640/WorkflowTrackingProfileEditor_design.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKYFyfDlb9I/AAAAAAAAGf4/ReNU_QLGLBs/s1600/xml.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="434" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKYFyfDlb9I/AAAAAAAAGf4/ReNU_QLGLBs/s320/xml.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;span id="goog_1992741359"&gt;&lt;/span&gt;&lt;span id="goog_1992741360"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;So following on from my other post:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://russellmccloy.blogspot.com/2010/10/workflow-40-sample-development.html"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;http://russellmccloy.blogspot.com/2010/10/workflow-40-sample-development.html&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I will create a simple tracking profile for my workflow.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Currently my workflow is using a default tracking profile that is set by my root web.config:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKnSRtPZx2I/AAAAAAAAGgk/c5oOm9aPli4/s1600/rootTrackingProfile.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="186" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKnSRtPZx2I/AAAAAAAAGgk/c5oOm9aPli4/s640/rootTrackingProfile.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;You can see that it is using the "HealthMonitoring tracking Profile"which seems to be the default one. there are a few others to choose from and to configure these you:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;right click on your WF in IIS and select "Manage WCF and WF services" and then "Configure..."&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Click on Monitoring&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;then use the slider to choose what you require.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKndXmt1SGI/AAAAAAAAGh0/o4fJL6JnR-U/s1600/MonitoringProfile_Off.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="480" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKndXmt1SGI/AAAAAAAAGh0/o4fJL6JnR-U/s640/MonitoringProfile_Off.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKndX_n6YmI/AAAAAAAAGh4/rQbcdR_8wLs/s1600/MonitoringProfile_ErrorsOnly.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="480" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKndX_n6YmI/AAAAAAAAGh4/rQbcdR_8wLs/s640/MonitoringProfile_ErrorsOnly.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKndX_mjMoI/AAAAAAAAGh8/RyOKPkpeBEQ/s1600/MonitoringProfile_HealthMonitoring.JPG" imageanchor="1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="480" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKndX_mjMoI/AAAAAAAAGh8/RyOKPkpeBEQ/s640/MonitoringProfile_HealthMonitoring.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKndX9IV1rI/AAAAAAAAGiA/va702lh8n4s/s1600/MonitoringProfile_EndtoEndMonitoring.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="480" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKndX9IV1rI/AAAAAAAAGiA/va702lh8n4s/s640/MonitoringProfile_EndtoEndMonitoring.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKndYH-o5PI/AAAAAAAAGiE/fsCjAeldCS0/s1600/MonitoringProfile_TroubleShooting.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="480" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKndYH-o5PI/AAAAAAAAGiE/fsCjAeldCS0/s640/MonitoringProfile_TroubleShooting.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;And you can see that in my web.config that is local to my service that I have no tracking profile:&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKnSRV9gu1I/AAAAAAAAGgg/FgGp-2aX4rM/s1600/currentWebConfig.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="300" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKnSRV9gu1I/AAAAAAAAGgg/FgGp-2aX4rM/s640/currentWebConfig.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;So I will use the&amp;nbsp;Workflow Tracking Profile Editor to point to my current workflow definition and add a tracking item.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;For the purposes of this exercise I have added an int32 variable to my xamlx file called:&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;TempTrackingExpenseId&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKnT_KoOt4I/AAAAAAAAGgs/gRxLrDDZfuo/s1600/TempTrackingExpenseId.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="265" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKnT_KoOt4I/AAAAAAAAGgs/gRxLrDDZfuo/s640/TempTrackingExpenseId.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I then use an Assign activity to set the variable. I suppose I could track the expenseId that hangs of my custon ExpenseResponse object. I tried that before and I could not get anything to appear in appFabric. So for now i'll just stick with a simple integer.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKnT_HaNf3I/AAAAAAAAGgw/V2iTzSFTbKk/s1600/AssignActivity.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="206" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKnT_HaNf3I/AAAAAAAAGgw/V2iTzSFTbKk/s640/AssignActivity.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I then right click in the blue spot in the&amp;nbsp;Workflow Tracking Profile Editor:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKnT_dnMXwI/AAAAAAAAGg0/WrLK9HLqveA/s1600/blueSpotInitial.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="162" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKnT_dnMXwI/AAAAAAAAGg0/WrLK9HLqveA/s640/blueSpotInitial.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;and select "track variables in this activities scope...":&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKnT_k1HgqI/AAAAAAAAGg4/uB0merAUU4c/s1600/trackVarsInThisActivity.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="144" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKnT_k1HgqI/AAAAAAAAGg4/uB0merAUU4c/s400/trackVarsInThisActivity.JPG" width="400" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;And for now ill just select every event type for my variable:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKnT_lHPQ1I/AAAAAAAAGg8/BETQBp-vvvw/s1600/PlacesItsTracked.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="97" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKnT_lHPQ1I/AAAAAAAAGg8/BETQBp-vvvw/s400/PlacesItsTracked.JPG" width="400" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I then save my new tracking profile using the&amp;nbsp;Workflow Tracking Profile Editor and insert the resulting Xml into the web.config of my xamlx service.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKnb_i_tFtI/AAAAAAAAGhs/mtPbv09EgYk/s1600/webConfigNotepad.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKnb_i_tFtI/AAAAAAAAGhs/mtPbv09EgYk/s400/webConfigNotepad.JPG" width="260" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Now that I have done this I will fire up my workflow using a windows form client as mentioned in my earlier blog:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://russellmccloy.blogspot.com/2010/10/workflow-40-sample-development.html"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;http://russellmccloy.blogspot.com/2010/10/workflow-40-sample-development.html&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;More on this later... still learning&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKnXMXwfwCI/AAAAAAAAGhE/7AqsgLrDwKM/s1600/testtrackingWinForms.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="430" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKnXMXwfwCI/AAAAAAAAGhE/7AqsgLrDwKM/s640/testtrackingWinForms.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;You can see that I have set a break point on the assign activity that sets the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;TempTrackingExpenseId &lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;variable in my ExpenseService.xamlx workflow:&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKnXMYQbgHI/AAAAAAAAGhI/8PlonDmgUvQ/s1600/AssignBreakPoint.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="167" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKnXMYQbgHI/AAAAAAAAGhI/8PlonDmgUvQ/s400/AssignBreakPoint.JPG" width="400" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;After I let the debugger run to the end I expect that I have 1 workflow active and persisted in the persistence store and therefore showing on the appFabric dashboard. &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKnZSwzMmMI/AAAAAAAAGhQ/dj0icK3D8kI/s1600/appFabricStartPage.JPG" imageanchor="1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKnZSwzMmMI/AAAAAAAAGhQ/dj0icK3D8kI/s1600/appFabricStartPage.JPG" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKnZTcbICiI/AAAAAAAAGhU/SAYA7RmWTVU/s1600/appFabricActivePersistedWFs.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="135" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKnZTcbICiI/AAAAAAAAGhU/SAYA7RmWTVU/s400/appFabricActivePersistedWFs.JPG" width="400" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;So if I click on the Active persisted WF instances I will see the workflow in question.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKnZUAVikZI/AAAAAAAAGhY/UQSg0HLd7Wg/s1600/appFabricActivePersistedWFs2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="262" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKnZUAVikZI/AAAAAAAAGhY/UQSg0HLd7Wg/s640/appFabricActivePersistedWFs2.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;If I right click and select "view tracked events" I can see all the events / activities that have occurred in my workflow already.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;If I just scroll I may be able to find the event im looking for,&amp;nbsp;and therefore the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;TempTrackingExpenseId&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;. What if, however, there are hundreds of activities in my workflow?&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I can use the query options to find the data I am looking for. So if a user calls me up and tells me that he is waiting on the approval of an expense and the Id of this expense is 116 then I can select:&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Tracked workflow variables&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Equals&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Name: 'TempTrackingExpenseId'; Value: '116'&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;as shown below:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKnZUyK7YMI/AAAAAAAAGhg/IMrclF6tP_E/s1600/QueryForValue.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="355" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKnZUyK7YMI/AAAAAAAAGhg/IMrclF6tP_E/s640/QueryForValue.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The result would be as follows:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKnZXwrKD0I/AAAAAAAAGhk/s-8tApkLRIw/s1600/ResultOfQueryForValue.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="530" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKnZXwrKD0I/AAAAAAAAGhk/s-8tApkLRIw/s640/ResultOfQueryForValue.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;As you can see, Especially compared to workflow 3.5, this is and could be very useful in keeping up with where your workflows are at.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;A great link about tracking:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd807381(VS.100).aspx"&gt;http://msdn.microsoft.com/en-us/library/dd807381(VS.100).aspx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;That's all for now.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;RuSs&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-4773068203330778474?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2010/10/workflow-tracking-profile-editor-link.html</link><author>noreply@blogger.com (russell mccloy)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKYFyP1OqNI/AAAAAAAAGfw/6SNFGbtdpHY/s72-c/WorkflowTrackingProfileEditor.JPG' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-6909428739865169451</guid><pubDate>Fri, 01 Oct 2010 15:29:00 +0000</pubDate><atom:updated>2010-10-05T20:42:28.566+11:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Workflow 4.0</category><category domain='http://www.blogger.com/atom/ns#'>AppFabric</category><category domain='http://www.blogger.com/atom/ns#'>Entity Framework 4.0</category><title>Workflow 4.0 - Hosting with AppFabric</title><description>&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Following on from my last post I will attempt to share with you, the steps I took to get my workflow hosted in AppFabric with Persistence and Monitoring enabled.(I will not talk about AppFabric's caching abilities as I know nothing about these at this point!!)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Ok so from my first post which is here:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://russellmccloy.blogspot.com/2010/10/workflow-40-sample-development.html"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;http://russellmccloy.blogspot.com/2010/10/workflow-40-sample-development.html&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I outlines how I began with workflow 4.0 and a few of the issues I had. I eventually got to a point where I developed a workflow application that, in a very simple way, allowed for the approval of an expense.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;what I will now try to talk about is getting that workflow and it's parts hosted in AppFabric.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;To start with, I created the workflow project as follows in this pic:&lt;/span&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKWuy7gkpoI/AAAAAAAAGbY/WOn9O3wIhgw/s1600/WF+project+Type.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="360" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKWuy7gkpoI/AAAAAAAAGbY/WOn9O3wIhgw/s640/WF+project+Type.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Workflow project creation&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;When you create a new WCF Workflow Service Application the settings default to using the visual Studio 2010 development server. If we want to use AppFabric we need to change the project so that it is hosted, first of all in IIS. The following picture shows this:&lt;/span&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKX9SByFMHI/AAAAAAAAGfM/YL8dUq9JIEg/s1600/VS2010_ServiceWebSettings.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="398" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKX9SByFMHI/AAAAAAAAGfM/YL8dUq9JIEg/s640/VS2010_ServiceWebSettings.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Visual Studio Project Properties&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;If you use the "Create Virtual Directory" button, then VS 2010 will, hopefully create the IIS vertual directory for you as shown here:&lt;/span&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKX9SLi7XoI/AAAAAAAAGfI/0OYgrfUi2RQ/s1600/ServiceHostedInAppFabric.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="296" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKX9SLi7XoI/AAAAAAAAGfI/0OYgrfUi2RQ/s320/ServiceHostedInAppFabric.JPG" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;IIS virtual Directory&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Right so we now have a Wcf service in IIS but it's sort of useless unless we built our own monitoring and hosting tools. Remember that AppFabric gives you loads of stuff out of the box. It also manages hosting and will re-hydrate a workflow from the persistence store when a delay timer expires.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;So now what we need to do is install AppFabric.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Once appFabric is installed you need to configure appFabric.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;To configure AppFabric click on the following link:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKYHYWQ9LOI/AAAAAAAAGgA/THpJ8l0M43c/s1600/Configuring+appFabric.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="640" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKYHYWQ9LOI/AAAAAAAAGgA/THpJ8l0M43c/s640/Configuring+appFabric.JPG" width="548" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;You will get an explanation page:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7Wvw65kI/AAAAAAAAGiU/EoPdgzWUkAY/s1600/ConfigureAppFabricExplainPage.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="476" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7Wvw65kI/AAAAAAAAGiU/EoPdgzWUkAY/s640/ConfigureAppFabricExplainPage.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;then the connection setup page for your monitoring and persistence database:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7WhPUTxI/AAAAAAAAGiY/jv30zy00JB4/s1600/ConfigureAppFabric_Connections.jpg" imageanchor="1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="480" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7WhPUTxI/AAAAAAAAGiY/jv30zy00JB4/s640/ConfigureAppFabric_Connections.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Before you point to the database you will need to run the following scripts that are @:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\SQL\en:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;SqlWorkflowInstanceStoreSchema.sql&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;and&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;SqlWorkflowInstanceStoreLogic.sql&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7d1XpxiI/AAAAAAAAGis/EToBQOpjlbM/s1600/ConfigureAppFabric_PersistenceSchema_Logic.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="408" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7d1XpxiI/AAAAAAAAGis/EToBQOpjlbM/s640/ConfigureAppFabric_PersistenceSchema_Logic.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;the setup wont work with out these. I think they setup a basic persistence store and appFabric then adds additional functionality to it. Not sure right now.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;After you run these 2 scripts successfully on the database of your choice. (You can use any SQL db with any name to store persistence and monitoring data) you can then continue with the AppFabric setup. You may get a warning about Sql agent not being detected as in a runnable state but I checked and mine was running so I think you can assume everything is still ok.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7XGSEMcI/AAAAAAAAGig/2_Cl4_wj58k/s1600/ConfigureAppFabric_Connections_sql_agent_issue.jpg" imageanchor="1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="404" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7XGSEMcI/AAAAAAAAGig/2_Cl4_wj58k/s640/ConfigureAppFabric_Connections_sql_agent_issue.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Following this you should get a success message.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7d9-3ycI/AAAAAAAAGik/qbRFe86c1bA/s1600/ConfigureAppFabric_Success.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="444" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7d9-3ycI/AAAAAAAAGik/qbRFe86c1bA/s640/ConfigureAppFabric_Success.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;And then a final restart IIS message:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7dxUzIDI/AAAAAAAAGio/ciZURwMSwBs/s1600/ConfigureAppFabric_IISReset_Finish.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="478" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7dxUzIDI/AAAAAAAAGio/ciZURwMSwBs/s640/ConfigureAppFabric_IISReset_Finish.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Note&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;: I did not select to setup the caching part of AppFabric.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;After this you need to configure the local details for your site / xamlx service hosting in IIS and AppFabric. The setup we have just done relates the overall global setting for our IIS / AppFabric server. We can get more granular at the site level:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7eA2rOOI/AAAAAAAAGiw/5c6UJYDcvfI/s1600/ConfigureAppFabric_IndividualSite_WhereToClick.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="584" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7eA2rOOI/AAAAAAAAGiw/5c6UJYDcvfI/s640/ConfigureAppFabric_IndividualSite_WhereToClick.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Setup monitoring. Accept default as specified earlier and add some trace and message logging as shown in the following pics:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7k5wvywI/AAAAAAAAGi8/GUQT_8vhtRQ/s1600/ConfigureAppFabric_IndividualSite_Monitoring.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="472" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7k5wvywI/AAAAAAAAGi8/GUQT_8vhtRQ/s640/ConfigureAppFabric_IndividualSite_Monitoring.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7kzB3JMI/AAAAAAAAGjA/Emv_NjUy3xg/s1600/ConfigureAppFabric_IndividualSite_Trace_Msg_Settings.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7kzB3JMI/AAAAAAAAGjA/Emv_NjUy3xg/s640/ConfigureAppFabric_IndividualSite_Trace_Msg_Settings.jpg" width="626" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;You may get an issue with net.pipe missing. You can add this in the sites advanced settings as shown below:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7kwij8-I/AAAAAAAAGjE/ECS0TS3aOhI/s1600/ConfigureAppFabric_IndividualSite_Net_Pipe.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="414" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7kwij8-I/AAAAAAAAGjE/ECS0TS3aOhI/s640/ConfigureAppFabric_IndividualSite_Net_Pipe.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;After this is done we can run our windows client in Visual Studio. The windows client submits expense requests to our workflow. &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Before we do this please not that I have neglected to add the c:\MailboxExpenseApproval directory on my server. &amp;nbsp; This will enable us to see the workflow experience and error and "&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;suspend&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;" its self. Using AppFabric we will be able to add the directory &amp;nbsp;to the file system and "&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;resume&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;" the workflow.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;So here is the windows client&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7lLJDNMI/AAAAAAAAGjI/49emjzPvyHM/s1600/ConfigureAppFabric_IndividualSite_WindowsSubmitExpenseForm.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7lLJDNMI/AAAAAAAAGjI/49emjzPvyHM/s1600/ConfigureAppFabric_IndividualSite_WindowsSubmitExpenseForm.jpg" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;You can see that after submission we get an error:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7lMpWpGI/AAAAAAAAGjM/0War_9AmPUs/s1600/ConfigureAppFabric_IndividualSite_Smtp_Error_Dir_IO.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="414" src="http://1.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7lMpWpGI/AAAAAAAAGjM/0War_9AmPUs/s640/ConfigureAppFabric_IndividualSite_Smtp_Error_Dir_IO.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;It looks like an Smtp error because&amp;nbsp;c:\MailboxExpenseApproval directory on the server is set as the pickupDirectory for sending mail. As it's not there, we get an error which is good for us right now.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;If we look in AppFabric we will see that the workflow is suspended:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7qHIO1xI/AAAAAAAAGjQ/8HOdOmqjsb8/s1600/ConfigureAppFabric_IndividualSite_Smtp_Error_Dir_IO_In_AppFabric.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="410" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7qHIO1xI/AAAAAAAAGjQ/8HOdOmqjsb8/s640/ConfigureAppFabric_IndividualSite_Smtp_Error_Dir_IO_In_AppFabric.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;We can then add the&amp;nbsp;c:\MailboxExpenseApproval directory and then resume the workflow using AppFabric.Nice!!&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7qUYE20I/AAAAAAAAGjU/E1v1A9tu3T0/s1600/ConfigureAppFabric_IndividualSite_Smtp_Error_Dir_IO_In_AppFabric_Resume.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="296" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7qUYE20I/AAAAAAAAGjU/E1v1A9tu3T0/s640/ConfigureAppFabric_IndividualSite_Smtp_Error_Dir_IO_In_AppFabric_Resume.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I have then build a web site that is hosted in the same IIS / appFabric as the xamlx service. The website is used to response the the Smtp emails that managers receive asking them to approve expenses. There are links in the emails to point to the approve / reject form:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7qdUkKaI/AAAAAAAAGjY/MLV-OQT0K_4/s1600/ConfigureAppFabric_IndividualSite_Web_AprovalList.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="364" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7qdUkKaI/AAAAAAAAGjY/MLV-OQT0K_4/s640/ConfigureAppFabric_IndividualSite_Web_AprovalList.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7qWRHFaI/AAAAAAAAGjc/UkP9-z8gxzE/s1600/ConfigureAppFabric_IndividualSite_Web_ApproveReject.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="454" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7qWRHFaI/AAAAAAAAGjc/UkP9-z8gxzE/s640/ConfigureAppFabric_IndividualSite_Web_ApproveReject.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Once approved the user will see this message:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7qeanh5I/AAAAAAAAGjg/vXfvdEB2xQc/s1600/ConfigureAppFabric_IndividualSite_Web_ApprovalMessage.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="350" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKn7qeanh5I/AAAAAAAAGjg/vXfvdEB2xQc/s640/ConfigureAppFabric_IndividualSite_Web_ApprovalMessage.jpg" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The persisted instsance of the workflow will then complete and be automatically removed from the persistence store. (Note: you can set some config to keep completed persisted workflow instances if you prefer).&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;That's all for now. Will add more later.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;RuSs&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-6909428739865169451?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2010/10/workflow-40-hosting-with-appfabric.html</link><author>noreply@blogger.com (russell mccloy)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKWuy7gkpoI/AAAAAAAAGbY/WOn9O3wIhgw/s72-c/WF+project+Type.JPG' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-6444454225065545471</guid><pubDate>Fri, 01 Oct 2010 09:28:00 +0000</pubDate><atom:updated>2010-10-05T20:45:39.150+11:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Workflow 4.0</category><category domain='http://www.blogger.com/atom/ns#'>AppFabric</category><category domain='http://www.blogger.com/atom/ns#'>Entity Framework 4.0</category><title>Workflow 4.0 a brief overview</title><description>&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;This is a very simple post about my recent findings on using workflow 4.0 (WF 4.0). I build a simple WF which managed expense approval.&lt;/span&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://draft.blogger.com/goog_793098390"&gt;&lt;img border="0" height="480" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKWsS7NT2EI/AAAAAAAAGa0/I-JLlDVB5HI/s640/Server+Info.JPG" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Server Specs&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Windows server 2008 R2 standard (Virtual server with 4gigs RAM)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;Components&lt;/b&gt;:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Visual Studio 2010&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;SQL 2008&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;IIS and Appfabric&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;Technologies&lt;/b&gt;:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Visual Studio 2010&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Workflow 4.0&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Entity Framework 4.0&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Linq&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;SQL 2008&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;IIS&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;AppFabric&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;SMTP&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;Initial setup steps:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Install Visual Studio 2010 Professional&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Install appFabric (More on appFabric configuration in a later post hopefully)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Setup monitoring and persistence (I used the default settings - ie. root web.config in IIS holds settings for any child sites.)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;Visual Studio 2010 Development:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I decided that I wanted to try this technology with a useful purpose in mind. It is not a full scale app. but most of the basic building blocks are there.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The app. I build is an expense approval app. using workflow 4.0 (WCF Workflow Service Application):&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKWuy7gkpoI/AAAAAAAAGbY/WOn9O3wIhgw/s1600/WF+project+Type.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="360" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKWuy7gkpoI/AAAAAAAAGbY/WOn9O3wIhgw/s640/WF+project+Type.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;This project allows you to build a workflow and expose it as a WCF service. I ended up at this decision as I started developing workflow using System.Activities.WorkflowApplication. This worked well until I tried to use a delay timer in my WF. I was persisting my workflow successfully but after the expected time period for my timer had elapsed, the workflow was still "asleep" in my persistence store.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Following this I hunted the web for a better soln. I didn't necessarily need a delay timer for anything at this stage but, because the WF was unusable with a delay timer I thought I should keep hunting for a better solution. I came across loads of posts (some wrong, some out of date - this was very frustrating).&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I decided to try and use the WorkflowServiceHost (http://msdn.microsoft.com/en-us/library/system.servicemodel.workflowservicehost.aspx) as it says on the "tin" that this will manage the re-hydration of my workflows from the persistence store.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I can't remember where I got to with the WorkflowServiceHost but in the end after I posted a question on this post:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/wfprerelease/thread/ebfa7571-9879-4b0c-93ff-0134764262f7"&gt;http://social.msdn.microsoft.com/Forums/en-US/wfprerelease/thread/ebfa7571-9879-4b0c-93ff-0134764262f7&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;and Stuart pointed me in the right direction I moved to my current, as mentioned above, setup.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;This being windows server 2008 R2 with full appFabric monitoring and persistence installed. I thought, why try and reinvent the wheel when this great infrastructure is provided more or less out of the box.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;So, back to the actual workflow development. Here is an overall picture of my workflow. It needs refactoring but i'll plonk it here for now and come back to it later. (Certain parts, like the duplication in the parallel activity need refactoring).&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKW1H7D0T1I/AAAAAAAAGb4/HvmETv2cW-o/s1600/WorkflowService.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKW1H7D0T1I/AAAAAAAAGb4/HvmETv2cW-o/s640/WorkflowService.jpg" width="360" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;Note&lt;/b&gt;: I wont be going into to much the detail with regard to my code as i'd rather explain the steps taken and a higher level.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The workflow receives an ExpenseRequest. If amount of this ExpenseRequest is under £100 the expense gets auto approved and the expense submitter is notified.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;If the expense is over £100 a notification is sent to a manager for approval. If said manager does not action this request within a period of time the workflow re-hydrates from the persistence store and reminds the manager.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I tested this re-hydration (with my WF hosted bty AppFabric but submitting an expense for over £100 and letting the expense notification reach the manager (Note: the delay activity for the reminder was set to 10 minutes at this point)).&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I then rebooted the server and waited the remainder of time that the delay timer required.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;After the timer was due to expire the workflow came alive and sent the reminder to the manager. Good times!!&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;So anyway, The workflow "code" functions correctly. Some points about it that I will point out are.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;The workflow (workflow as a Wcf service hosted in AppFabric (IIS)) is consumed by 3 clients:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;One is a console app. that I have just for some initial setup testing.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The second is a windows forms client that is used to submit the expense request.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The third is a web app. that is used to approve or reject the expense.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;Note&lt;/b&gt;: the manager links to the web app. from a link in the Smtp email that the workflow sends out.&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKW1xCkVuhI/AAAAAAAAGcA/wNjrGzsqIig/s1600/SolnFiles.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="370" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKW1xCkVuhI/AAAAAAAAGcA/wNjrGzsqIig/s640/SolnFiles.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;If you right click on the workflow ExpenseService.xalmx file and select "view in browser" you can see the Wcf definition and Wsdl for your workflow. This is good to know as we now know we can definitely host our workflow in IIS / AppFabric. More good times!!&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKW6CEmkXDI/AAAAAAAAGcI/B-QG2PlW7pE/s1600/ViewServiceInBrowser.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="232" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKW6CEmkXDI/AAAAAAAAGcI/B-QG2PlW7pE/s640/ViewServiceInBrowser.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;In my clients I added a service reference to my Workflow .xamlx service. Here are the steps to to this:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;Note:&amp;nbsp;&lt;/b&gt;that I selected to "generate asynchronous operations" as I dont want my client apps. to hang around waiting for a "long running process" to complete when all I really care about is whether my ExpenseRequest was sent correctly.&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKW7GwV8r3I/AAAAAAAAGcQ/r4B-b4lraN0/s1600/configureServiceMenu.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="194" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKW7GwV8r3I/AAAAAAAAGcQ/r4B-b4lraN0/s640/configureServiceMenu.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKW7NcFKfpI/AAAAAAAAGcY/dnNXUvqt9a4/s1600/configureServiceAsync.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="584" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKW7NcFKfpI/AAAAAAAAGcY/dnNXUvqt9a4/s640/configureServiceAsync.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Once I have my xamlx service referenced in my client apps. I need to write some code to instantiate it. first of all I need these lines:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;private static ExpenseServiceClient client = new ExpenseServiceClient();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;request.Expense = new Expense();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;request.Expense.Amount =200;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;request.Expense.Title = "";&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;client.BeginSubmitExpense(request, OnStartCompleted, null);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;As I said, I am doing this asyc so I only care that my request was successful. Do be sure of this I subscribe to the IAsyncResult.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The code looks like this:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;SubmitExpenseResponse result = (SubmitExpenseResponse)client.EndSubmitExpense(asr);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;Within the method that waits for the IAsyncResult I have some try catches.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;catch (CommunicationException)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;catch (TimeoutException)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;catch (Exception)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I can then decided what do in my client app. when something goes wrong.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;You can probably see in my workflow that there are some custom activities like:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;AutoScreenExpense, NotifyExpenseSubmitter, RequestManagerAction, SaveExpense, UpdateExpense. These are my own activities that inplement System.Activities.CodeActivity. AutoScreenExpense is a flowchart xaml workflow that I have built that just takes are of the £100 limit decision mentioed earlier.&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKW-4ORTrsI/AAAAAAAAGcg/WWpwy96OuC0/s1600/CustomActivitiesInToolBox.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="202" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKW-4ORTrsI/AAAAAAAAGcg/WWpwy96OuC0/s640/CustomActivitiesInToolBox.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;After you build your custom activities they will appear in the toolbox.&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKW_N34y3jI/AAAAAAAAGcw/T-EHhbxToX0/s1600/AutoScreenExpense.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="344" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKW_N34y3jI/AAAAAAAAGcw/T-EHhbxToX0/s640/AutoScreenExpense.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;AutoScreenExpense&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;&lt;/span&gt;is a separate workflow that I have exposed as a custom activity inside the ExpenseService.xamlx workflow. Nice!To write a code based activity you can either implement System.Activities.CodeActivity or System.Activity.NativeActivity.As you can see I implement CodeActivity. Also note that this activity has a public InArgument which is the ExpenseRequest coming into the activity. the expenserequest is then mapped to my Entity Framework 4.0 entity and then saved and a response is sent back to the workflow.&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKXAFqcLxII/AAAAAAAAGc4/pm6Ym4BxRoE/s1600/CodeActivityCode.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="416" src="http://4.bp.blogspot.com/_M8Gn3CMAmQQ/TKXAFqcLxII/AAAAAAAAGc4/pm6Ym4BxRoE/s640/CodeActivityCode.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Another thing I nearly forgot is that the way to get data into and throught a workflow is to use arguements or variables. In this case, I think because I have used a xamlx project type, I only have access to variables as follows:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKXA7yYvnQI/AAAAAAAAGdA/_u5udkbm-1s/s1600/Variables.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="188" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKXA7yYvnQI/AAAAAAAAGdA/_u5udkbm-1s/s640/Variables.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;you can see my ExpenseRequest variable another one for response and a boolean that is used internally by my workflow. Also, I have an ExpenseIDHandle that is used for correlation so that the workflow know which instance of a workflow to work with when a caller asks it to do something.&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKXDaP8QCpI/AAAAAAAAGdQ/lf8xHHxAN54/s1600/model.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="218" src="http://3.bp.blogspot.com/_M8Gn3CMAmQQ/TKXDaP8QCpI/AAAAAAAAGdQ/lf8xHHxAN54/s640/model.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;I mentioned that I am using Entity Framework 4.0 to manage my database updates. I have a couple of tables in an SQL 2008 database. One holds the record of the expense to be approved and the other is just a lookup table:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Obviously this is not very fancy but I plan on building on it later.&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKXEYA_9kBI/AAAAAAAAGdg/l4_YDH12JNA/s1600/EntitySave.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="278" src="http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKXEYA_9kBI/AAAAAAAAGdg/l4_YDH12JNA/s640/EntitySave.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;So now I have a workflow that I can host in IIS and AppFabric. In my next post I will do this.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Over and out!!&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;RuSs&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Ps. If I have got anything wrong here please let me know&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-6444454225065545471?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2010/10/workflow-40-sample-development.html</link><author>noreply@blogger.com (russell mccloy)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_M8Gn3CMAmQQ/TKWsS7NT2EI/AAAAAAAAGa0/I-JLlDVB5HI/s72-c/Server+Info.JPG' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-3680198308301529513</guid><pubDate>Tue, 07 Apr 2009 08:47:00 +0000</pubDate><atom:updated>2010-10-20T00:23:10.844+11:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Sharepoint</category><title>Building queries for working with Folders</title><description>&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Credit to:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://sharepointmagazine.net/technical/development/writing-caml-queries-for-retrieving-list-items-from-a-sharepoint-list"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;http://sharepointmagazine.net/technical/development/writing-caml-queries-for-retrieving-list-items-from-a-sharepoint-list&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt; for this info.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;------&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;A first variant I will explain is how you can work with folders and sub folders. A folder is a special list item on a list or document library. If you execute a standard CAML query you will end up with list items from the root folder.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;If you want to query all folders and sub folders of a list or document library, you have to define extra query options. If you are working with the object model you have to set the ViewAttributes property of the SPQuery object as follows:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;qry.ViewAttributes = "Scope='Recursive'";&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;If you work with GetListItems method of the Lists.asmx SharePoint web service, you have to define an extra node with the QueryOptions element:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;XmlNode queryOptionsNode = camlDocument.CreateElement("QueryOptions");&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;queryOptionsNode.InnerXml = "&lt;/span&gt;&lt;viewattributes scope="\&amp;quot;Recursive\&amp;quot;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;";&lt;br /&gt;&lt;br /&gt;If you want to query a specific sub folder using the SPQuery object, you have to set the Folder property:&lt;br /&gt;&lt;br /&gt;qry.Folder = list.ParentWeb.GetFolder("Folders DocLib/2008");&lt;br /&gt;&lt;br /&gt;When working with the web services you have to do the following:&lt;br /&gt;&lt;br /&gt;XmlNode queryOptionsNode = camlDocument.CreateElement("QueryOptions");&lt;br /&gt;&lt;br /&gt;queryOptionsNode.InnerXml = "&lt;/span&gt;     &lt;folder&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Folders DocLib/2008&lt;/span&gt;&lt;/folder&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;";&lt;br /&gt;&lt;br /&gt;-----&lt;br /&gt;&lt;br /&gt;So my CAML looked like this:&lt;br /&gt;&amp;lt;Query&amp;gt;&lt;br /&gt;&amp;lt;Where&amp;gt;&amp;lt;Eq&amp;gt;&amp;lt;FieldRef Name='FileLeafRef'/&amp;gt;&amp;lt;Value Type='Text'&amp;gt;testdoc.docx&amp;lt;/Value&amp;gt;&amp;lt;/Eq&amp;gt;&amp;lt;/Where&amp;gt;&lt;br /&gt;&amp;lt;/Query&amp;gt;&lt;br /&gt;&amp;lt;ViewFields&amp;gt;&lt;br /&gt;&amp;lt;FieldRef Name='Title' /&amp;gt;&lt;br /&gt;&amp;lt;/ViewFields&amp;gt;&lt;br /&gt;&amp;lt;QueryOptions&amp;gt;&lt;br /&gt;&amp;lt;Folder&amp;gt;Documents/[002643][Test%20project%20for%20Adam]/[ACPC][126573][1][writeFileAndXmlTest2]&amp;lt;/Folder&amp;gt;&lt;br /&gt;&amp;lt;OptimizeFor&amp;gt;FolderUrls&amp;lt;/OptimizeFor&amp;gt;&lt;br /&gt;&amp;lt;/QueryOptions&amp;gt;&lt;br /&gt;&lt;br /&gt;RuSs&lt;/span&gt;   &lt;/viewattributes&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-3680198308301529513?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2009/04/building-queries-for-working-with.html</link><author>noreply@blogger.com (russell mccloy)</author><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-7722934230236730658</guid><pubDate>Tue, 10 Mar 2009 10:53:00 +0000</pubDate><atom:updated>2009-03-10T22:02:41.813+11:00</atom:updated><title>DLL Binding Redirect</title><description>&lt;/br&gt;&lt;br /&gt;We had an issue where an old app was breaking because it was looking for an old version of Microsoft AJAX when we had upgraded to Microsoft AJAX 3.5.&lt;br /&gt;&lt;br /&gt;To quickly get around this issue we did a binging redirect:&lt;br /&gt;&lt;span style="color:red;"&gt; &lt;br /&gt;&amp;lt;dependentAssembly&amp;gt;&lt;br /&gt; &amp;lt;assemblyIdentity name="System.Web.Extensions"  publicKeyToken="31bf3856ad364e35" /&amp;gt;&lt;br /&gt;    &amp;lt;!-- Assembly versions can be redirected in application, publisher policy, or machine configuration files. --&amp;gt;&lt;br /&gt;    &amp;lt;bindingRedirect oldVersion="1.0.61025.0" newVersion="3.5.0.0"/&amp;gt;&lt;br /&gt;    &amp;lt;publisherPolicy apply="no" /&amp;gt;&lt;br /&gt;&amp;lt;/dependentAssembly&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Pretty easy. Although we may move to the machine.config for a more global solution.&lt;br /&gt;&lt;br /&gt;RuSs&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-7722934230236730658?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2009/03/dll-binding-redirect.html</link><author>noreply@blogger.com (russell mccloy)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3805743522888899142.post-2835702801970351720</guid><pubDate>Wed, 04 Mar 2009 15:18:00 +0000</pubDate><atom:updated>2009-03-05T02:20:01.132+11:00</atom:updated><title>Detect columns and copy a row - t-sql</title><description>&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;This is a way to copy a row in a table without caring whether someone has added new columns.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;USE [TRAM]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;/****** Object:  StoredProcedure [dbo].[COPY_Subleases_2]    Script Date: 03/04/2009 15:16:34 ******/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;SET ANSI_NULLS ON&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;SET QUOTED_IDENTIFIER ON&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;ALTER PROCEDURE [dbo].[COPY_Subleases_2]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;@iSourceTable VARCHAR (150), &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;@lPrintIt INT, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;@CurrentAssetID INT, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;@NewAssetID INT, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;@CurrentsubleaseID INT OUTPUT,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;@executeIt int&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;AS&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;BEGIN &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;DECLARE @cName varchar(150)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;DECLARE @lCnt int&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;DECLARE @lColumnList varchar(MAX)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;SET NOCOUNT ON;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;-- SET @iSourceTable = 'PropertyAnnualProperty'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;-- SET @lPrintIt = 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;SET @lColumnList = ''&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;DECLARE _LIST&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;INSENSITIVE SCROLL CURSOR&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;FOR &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;SELECT column_name&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;FROM&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;information_schema.columns&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;WHERE&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;table_name = @iSourceTable AND&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;data_type &lt;&gt; 'timestamp' AND&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;column_name &lt;&gt; 'SubLeaseID' AND&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;column_name &lt;&gt; 'AssetID'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;ORDER BY&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;ordinal_position&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;OPEN _LIST    &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;IF @lPrintIt = 1 print 'Column names returned...' + convert(char(8),@@cursor_rows)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;-- Check for an error&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;IF @@CURSOR_ROWS = 0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    GOTO Done_Loop_LIST&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;END&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;-- Grab the first record&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;FETCH FIRST FROM _LIST&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;INTO @cName&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;SELECT @lCnt = 0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Loop_LIST:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    SELECT @lCnt = @lCnt + 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    SELECT @lColumnList = @lColumnList + '[' + @cName + '],'  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;FETCH NEXT FROM _LIST&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;INTO @cName&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;-- Any more ?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;IF @@FETCH_STATUS != -1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    GOTO Loop_LIST&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;END&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Done_Loop_LIST:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;DEALLOCATE _LIST&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;-- Remove the trailing ','&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;print '@lColumnList: ' + convert(varchar(MAX), @lColumnList)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;SELECT @lColumnList = substring(@lColumnList,1,datalength(@lColumnList)-1)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;IF @lPrintIt = 1 PRINT @lColumnList&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;DECLARE @stm varchar(MAX)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;SET @stm = 'INSERT INTO ' + @iSourceTable + ' (AssetId, ' + @lColumnList + ') SELECT ' + Convert(varchar(10), @NewAssetID) + ', ' + @lColumnList + ' from ' + @iSourceTable +&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;' where assetid = ' + Convert(varchar(10), @CurrentAssetID)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;PRINT @stm&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;IF(@executeIt = 1)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    EXEC(@STM)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;END&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;SELECT @CurrentsubleaseID = @@identity&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805743522888899142-2835702801970351720?l=www.russellmccloy.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.russellmccloy.com/2009/03/detect-columns-and-copy-row-t-sql.html</link><author>noreply@blogger.com (russell mccloy)</author><thr:total>0</thr:total></item></channel></rss>
