<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>gridGISTICS Blog</title>
    <description>extreme performance, extreme simplicity </description>
    <link>http://blog.gridgistics.net/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.Net Syndication Generator 1.0.0.0 (http://dotnetblogengine.net/)</generator>
    <language>en-GB</language>
    <blogChannel:blogRoll>http://blog.gridgistics.net/opml.axd</blogChannel:blogRoll>
    <dc:creator>gridgistics</dc:creator>
    <dc:title>gridGISTICS Blog</dc:title>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/grid-computing" type="application/rss+xml" /><item>
      <title>Four IIS7 Modules you should be &amp;quot;Aware&amp;quot; of</title>
      <description>&lt;p&gt;IIS7 introduces a great number of features which are greatly appreciated.&amp;#160; (Yes I know Apache already had them - but I'm not going there).&amp;#160; My favorite thing about IIS7 is the module based architecture.&amp;#160; Its extensibility is allowing the IIS team and the community to drum up some really cool modules.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;AwareReverseProxyModule&lt;/h2&gt;  &lt;p&gt; This has enabled gridGISTICS to develop a &amp;quot;Reverse proxy&amp;quot; module which takes the incoming IIS request and hands it off DIRECTLY to an Aware service.&amp;#160; Better yet - it intelligently find the appropriate service with all the load balancing and ninjaness you'd expect from Aware.&amp;#160; You can even choose what services to expose to the web directly from the Aware Enterprise Manager.&amp;#160; How could this get even better?&amp;#160; You already have it if you are using the latest version of Aware - you just need to install the module.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;URL Rewrite Module&lt;/h2&gt;  &lt;p&gt;Almost Mod Rewrite (mod_rewrite) for IIS.&amp;#160; Enables flexibility of URLs and beats the snot out of the HTTP redirection module that ships with IIS7.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://learn.iis.net/page.aspx/460/using-url-rewrite-module/" target="_blank"&gt;linky linky&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;Application Request Routing Module&lt;/h2&gt;  &lt;p&gt;(I totally stole this paragraph from the link below)&lt;/p&gt;  &lt;p&gt;Microsoft Application Request Routing for IIS7 is a proxy based routing module that forwards HTTP requests to content servers based on HTTP headers and server variables, and load balance algorithms.&amp;#160; Application Request Routing can be used to:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Increase application availability and scalability. &lt;/li&gt;    &lt;li&gt;Better utilize content server resources. &lt;/li&gt;    &lt;li&gt;Facilitate application deployment including pilot management and A/B testing. &lt;/li&gt;    &lt;li&gt;Lower management costs and create opportunities for shared hosters.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://learn.iis.net/page.aspx/489/using-the-application-request-routing-module/" target="_blank"&gt;linky linky&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;PowerShell Provider&lt;/p&gt;  &lt;p&gt;I'd like to pretend that I am all savvy with PowerShell - but I just haven't personally tapped its power yet.&amp;#160; However - my team members that are ninjas with it - tell me its the only way to go.&amp;#160; The IIS team thinks so too and here is their module for managing IIS via powershell.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://learn.iis.net/page.aspx/447/managing-iis-with-the-iis-70-powershell-provider/" target="_blank"&gt;linky linky&lt;/a&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:848f8519-24fe-41a6-9b1f-bb7692dc4d7f" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/iis7" rel="tag"&gt;iis7&lt;/a&gt;,&lt;a href="http://technorati.com/tags/modules" rel="tag"&gt;modules&lt;/a&gt;,&lt;a href="http://technorati.com/tags/gridgistics" rel="tag"&gt;gridgistics&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://feeds.feedburner.com/~r/grid-computing/~3/366149694/post.aspx</link>
      <author>Ryan Turner</author>
      <comments>http://blog.gridgistics.net/post/2008/08/Four-IIS7-Modules-you-should-be-quot3bAwarequot3b-of.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.gridgistics.net/post.aspx?id=85d38dbc-393f-4a03-9ec5-a2758bb40a14</guid>
      <pubDate>Thu, 14 Aug 2008 12:32:22 -0400</pubDate>
      <category>gridGISTICS</category>
      <dc:publisher>Ryan Turner</dc:publisher>
      <pingback:server>http://blog.gridgistics.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.gridgistics.net/post.aspx?id=85d38dbc-393f-4a03-9ec5-a2758bb40a14</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.gridgistics.net/trackback.axd?id=85d38dbc-393f-4a03-9ec5-a2758bb40a14</trackback:ping>
      <wfw:comment>http://blog.gridgistics.net/post/2008/08/Four-IIS7-Modules-you-should-be-quot3bAwarequot3b-of.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.gridgistics.net/syndication.axd?post=85d38dbc-393f-4a03-9ec5-a2758bb40a14</wfw:commentRss>
    <feedburner:origLink>http://blog.gridgistics.net/post.aspx?id=85d38dbc-393f-4a03-9ec5-a2758bb40a14</feedburner:origLink></item>
    <item>
      <title>LINQPad - Go Get It!</title>
      <description>&lt;p&gt;Really wanted to shed some light on a tool we recently discovered.&amp;#160; Its free, its well written and so far I have yet to break it.&amp;#160; ( a skill I normally possess)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.linqpad.net/" target="_blank"&gt;LINQPad&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Here is why you should stop reading this and download it already. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Its Free&lt;/li&gt;    &lt;li&gt;Query DB's using LINQ without SQL Management Studio on the box.&lt;/li&gt;    &lt;li&gt;Doesn't require Visual Studio&lt;/li&gt;    &lt;li&gt;2 MB Executable (no install required) &lt;/li&gt;    &lt;li&gt;Can be used as a C#/VB.NET scratch pad.&lt;/li&gt;    &lt;li&gt;Can be used as a mean calculator.&lt;/li&gt;    &lt;li&gt;Quick test harness for a C#/VB snippets&lt;/li&gt;    &lt;li&gt;It contains tons of free examples and even demo data to hone your LINQ skilz&lt;/li&gt;    &lt;li&gt;O and yeah its Free&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Found it really useful to do ad-hoc queries on Aware audits.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.gridgistics.net/image.axd?picture=WindowsLiveWriter/LINQPadGoGetIt_13C8A/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="284" alt="image" src="http://blog.gridgistics.net/image.axd?picture=WindowsLiveWriter/LINQPadGoGetIt_13C8A/image_thumb.png" width="429" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;   &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:7b96359a-49a3-4f84-9952-54b535fde7a5" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/tool" rel="tag"&gt;tool&lt;/a&gt;,&lt;a href="http://technorati.com/tags/linq" rel="tag"&gt;linq&lt;/a&gt;,&lt;a href="http://technorati.com/tags/linqpad" rel="tag"&gt;linqpad&lt;/a&gt;&lt;/div&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Kudos to Robert who told me about this thing ;)&lt;/p&gt;</description>
      <link>http://feeds.feedburner.com/~r/grid-computing/~3/310947319/post.aspx</link>
      <author>Ryan Turner</author>
      <comments>http://blog.gridgistics.net/post/2008/06/LINQPad---Go-Get-It!.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.gridgistics.net/post.aspx?id=f8be253f-f484-4d41-b253-37c501038023</guid>
      <pubDate>Fri, 13 Jun 2008 01:44:23 -0400</pubDate>
      <category>gridGISTICS</category>
      <dc:publisher>Ryan Turner</dc:publisher>
      <pingback:server>http://blog.gridgistics.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.gridgistics.net/post.aspx?id=f8be253f-f484-4d41-b253-37c501038023</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.gridgistics.net/trackback.axd?id=f8be253f-f484-4d41-b253-37c501038023</trackback:ping>
      <wfw:comment>http://blog.gridgistics.net/post/2008/06/LINQPad---Go-Get-It!.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.gridgistics.net/syndication.axd?post=f8be253f-f484-4d41-b253-37c501038023</wfw:commentRss>
    <feedburner:origLink>http://blog.gridgistics.net/post.aspx?id=f8be253f-f484-4d41-b253-37c501038023</feedburner:origLink></item>
    <item>
      <title>Microsoft Web Deployment Tool - Beta 1 Go Live</title>
      <description>&lt;p&gt;&lt;a href="http://blogs.iis.net/msdeploy/archive/2008/05/13/web-deployment-tool-beta-1-go-live-just-released.aspx" target="_blank"&gt;Web Deployment Tool&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It slices, it dices, it synchs and snapshots - the IIS team has released a tool which eases the pain of site migration.&lt;/p&gt;  &lt;h3&gt;Benefits:&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Simplify web farm deployments &lt;/li&gt;    &lt;li&gt;Migrate sites or entire servers &lt;/li&gt;    &lt;li&gt;Snapshot sites or entire servers for backups or versioning &lt;/li&gt;    &lt;li&gt;Determine the differences between two sites or servers &lt;/li&gt;    &lt;li&gt;Determine what components your site depends on&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Features:&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Synchronization of IIS 6.0/IIS 7.0:      &lt;br /&gt;&lt;/strong&gt;The sync operation provides administrators with a way to quickly synchronize a site or server and deploy changes to existing sites and servers. A synchronization allows you to synchronize one source with one destination. For example, you can synchronize two directory paths or two web servers. The sync can be performed with local or remote objects. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Snapshot of IIS 6.0/IIS 7.0:&lt;/strong&gt;    &lt;br /&gt;The snapshot, or archive, functionality allows administrators or developers to quickly take an archive of their web site or server for rollback, restore or backup purposes. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Migration from IIS 6.0:      &lt;br /&gt;&lt;/strong&gt;The migrate operation provides administrators with a way to migrate sites or entire servers from IIS 6.0 to IIS 7.0, including their settings and content. A migration is essentially a way of synchronizing, filtered by migration rules. For example, when migrating from IIS 6.0 to IIS 7.0, MS Deploy will check the value of some properties and see if it is the IIS 6.0 default. If it is the default, such as the log files directory, it will instead use the value set on the IIS 7.0 server. This enables a server admin to maintain new settings on IIS 7.0 while moving sites or applications from IIS 6.0. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Analysis of IIS 6.0 Installed Features:      &lt;br /&gt;&lt;/strong&gt;The analyze operation allows administrators to check what components are installed on the source server. In this way, they can determine if features are present that they will need in IIS 7.0 or that require more advanced setup than simply copying files. For example, ASP.NET requires more than a file copy and will need to be installed on the destination server. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Troubleshooting and Validation Features:      &lt;br /&gt;&lt;/strong&gt;For validating an operation, the -whatif flag allows administrators to see what actions would happen when they perform an operation. This is especially useful for performing sync or migration, when they want to validate what changes will be made before performing them. For troubleshooting, the -verboseLevel flag allows administrators to get rich detail about what operations are being performed, and upon failure, the ability to diagnose the problem. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NEW FEATURES in this version!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;PowerShell Support:     &lt;br /&gt;&lt;/strong&gt;PowerShell cmdlets are included, allowing you to use the Microsoft Web Deployment Tool conveniently with PowerShell. For more information about how the PowerShell cmdlets work, see the Help file as well as the Microsoft Web Deployment Tool walkthroughs.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Enhanced Dependency Checking:     &lt;br /&gt;&lt;/strong&gt;The dependencies that are checked for a web site or server can now be viewed on IIS 7.0 as well as IIS 6.0. They can be turned off on a granular level, such as disabling the drive space dependency check while still running the other dependency checks, or disabling the check for a single ISAPI script map. Additionally, when you view dependencies, you will be able to see the &amp;#8220;trigger&amp;#8221; for the dependency (what location(s) in configuration caused the Microsoft Web Deployment Tool to say that the module/component is a potential dependency).&lt;/p&gt;</description>
      <link>http://feeds.feedburner.com/~r/grid-computing/~3/308948817/post.aspx</link>
      <author>Ryan Turner</author>
      <comments>http://blog.gridgistics.net/post/2008/06/Microsoft-Web-Deployment-Tool---Beta-1-Go-Live.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.gridgistics.net/post.aspx?id=067d9640-9b71-470e-a7ee-d75e0f4791e2</guid>
      <pubDate>Tue, 10 Jun 2008 10:50:08 -0400</pubDate>
      <category>gridGISTICS</category>
      <dc:publisher>Ryan Turner</dc:publisher>
      <pingback:server>http://blog.gridgistics.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.gridgistics.net/post.aspx?id=067d9640-9b71-470e-a7ee-d75e0f4791e2</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.gridgistics.net/trackback.axd?id=067d9640-9b71-470e-a7ee-d75e0f4791e2</trackback:ping>
      <wfw:comment>http://blog.gridgistics.net/post/2008/06/Microsoft-Web-Deployment-Tool---Beta-1-Go-Live.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.gridgistics.net/syndication.axd?post=067d9640-9b71-470e-a7ee-d75e0f4791e2</wfw:commentRss>
    <feedburner:origLink>http://blog.gridgistics.net/post.aspx?id=067d9640-9b71-470e-a7ee-d75e0f4791e2</feedburner:origLink></item>
    <item>
      <title>Aware Server VS.NET Productivity Chart</title>
      <description>&lt;p class="MsoSubtitle"&gt;
I recently did a quite lengthy post on 67% increase in productivity.&amp;nbsp; 
&lt;/p&gt;
&lt;p class="MsoSubtitle"&gt;
&lt;a href="http://blog.gridgistics.net/post/2008/05/Aware-Server-6725-More-Productive-than-VSNET.aspx" title="http://blog.gridgistics.net/post/2008/05/Aware-Server-6725-More-Productive-than-VSNET.aspx"&gt;http://blog.gridgistics.net/post/2008/05/Aware-Server-6725-More-Productive-than-VSNET.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p class="MsoSubtitle"&gt;
I just wanted to post a quick summary based on that post.
&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="0" class="MsoTableLightGridAccent1" style="border-collapse: collapse; border: medium none"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td width="211" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: #4f81bd 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #4f81bd 1pt solid; width: 2.2in; padding-top: 0in; border-bottom: #4f81bd 2.25pt solid"&gt;&lt;strong&gt;&lt;span&gt;Aware Server &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span&gt;
			&lt;p&gt;
			&amp;nbsp;
			&lt;/p&gt;
			&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
			&lt;td width="234" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: #4f81bd 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 175.5pt; padding-top: 0in; border-bottom: #4f81bd 2.25pt solid"&gt;&lt;strong&gt;&lt;span&gt;VS.NET 2008 &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span&gt;
			&lt;p&gt;
			&amp;nbsp;
			&lt;/p&gt;
			&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
			&lt;td width="289" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: #4f81bd 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 216.9pt; padding-top: 0in; border-bottom: #4f81bd 2.25pt solid"&gt;&lt;strong&gt;&lt;span&gt;Result &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span&gt;
			&lt;p&gt;
			&amp;nbsp;
			&lt;/p&gt;
			&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td width="211" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: #4f81bd 1pt solid; width: 2.2in; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			Built in F5 debugging of services and workflows.
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="234" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: medium none; width: 175.5pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			Create your service, then configure your environment, and then create and code your testharness.
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="289" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: medium none; width: 216.9pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; text-indent: -0.25in; line-height: normal" class="MsoListParagraphCxSpFirst"&gt;
			&lt;span style="font-family: symbol"&gt;&lt;span&gt;&amp;middot;&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Aware Server 54% faster to develop WCF services.
			&lt;/p&gt;
			&lt;p style="margin-bottom: 0pt; text-indent: -0.25in; line-height: normal" class="MsoListParagraphCxSpMiddle"&gt;
			&lt;span style="font-family: symbol"&gt;&lt;span&gt;&amp;middot;&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Aware Server &amp;ndash; now prior WCF knowledge required.
			&lt;/p&gt;
			&lt;p style="margin-bottom: 0pt; text-indent: -0.25in; line-height: normal" class="MsoListParagraphCxSpLast"&gt;
			&lt;span style="font-family: symbol"&gt;&lt;span&gt;&amp;middot;&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Aware Server treats workflow development (WF) the same as service (WCF) development.
			&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td width="211" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: #4f81bd 1pt solid; width: 2.2in; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			One click deployment &amp;ndash; Any environment.
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="234" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 175.5pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			Deploy to your machine running IIS.
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="289" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 216.9pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; text-indent: -0.25in; line-height: normal" class="MsoListParagraphCxSpFirst"&gt;
			&lt;span style="font-family: symbol"&gt;&lt;span&gt;&amp;middot;&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Aware Server is &amp;ldquo;One Click&amp;rdquo; deployment of services.
			&lt;/p&gt;
			&lt;p style="margin-bottom: 0pt; text-indent: -0.25in; line-height: normal" class="MsoListParagraphCxSpLast"&gt;
			&lt;span style="font-family: symbol"&gt;&lt;span&gt;&amp;middot;&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Aware Server allows you to quickly test your services locally, and then deploy them to be shared with all developers.
			&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td width="211" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: #4f81bd 1pt solid; width: 2.2in; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			Versioning services and running them side by side.
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="234" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: medium none; width: 175.5pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			No built in versioning capabilities
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="289" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: medium none; width: 216.9pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; text-indent: -0.25in; line-height: normal" class="MsoListParagraph"&gt;
			&lt;span style="font-family: symbol"&gt;&lt;span&gt;&amp;middot;&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Aware Server will let you easily version and run those versions.
			&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td width="211" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: #4f81bd 1pt solid; width: 2.2in; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			Provisioned endpoints.
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="234" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 175.5pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			Developer must create the endpoints.
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="289" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 216.9pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; text-indent: -0.25in; line-height: normal" class="MsoListParagraph"&gt;
			&lt;span style="font-family: symbol"&gt;&lt;span&gt;&amp;middot;&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Aware abstracts protocol from the developer and puts it into the hands of operations.
			&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td width="211" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: #4f81bd 1pt solid; width: 2.2in; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			Automatic service call load balancing
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="234" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: medium none; width: 175.5pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			You need to setup and configure your own load balancing solution.
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="289" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: medium none; width: 216.9pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; text-indent: -0.25in; line-height: normal" class="MsoListParagraph"&gt;
			&lt;span style="font-family: symbol"&gt;&lt;span&gt;&amp;middot;&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Aware automatically scales your services by load balancing your service calls across all machines running your services.
			&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td width="211" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: #4f81bd 1pt solid; width: 2.2in; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			Provisioning Conditions.
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="234" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 175.5pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			You need to setup your service on every machine you want it to run on.
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="289" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 216.9pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; text-indent: -0.25in; line-height: normal" class="MsoListParagraph"&gt;
			&lt;span style="font-family: symbol"&gt;&lt;span&gt;&amp;middot;&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Setting up Aware Services to run on one server, or 1,000 servers.&lt;span&gt;&amp;nbsp; &lt;/span&gt;One policy will take care of all deployment and configuration for ALL of your servers.
			&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td width="211" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: #4f81bd 1pt solid; width: 2.2in; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			Re-deployment will automatically run your new code.
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="234" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: medium none; width: 175.5pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			Re-deployment is only local on your own machine.
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="289" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: medium none; width: 216.9pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; text-indent: -0.25in; line-height: normal" class="MsoListParagraph"&gt;
			&lt;span style="font-family: symbol"&gt;&lt;span&gt;&amp;middot;&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;If an Aware Server policy is setup to run your service on 5 machines, when you redeploy that service Aware Server will automatically re-deploy the new code to all 5 machines.
			&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td width="211" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: #4f81bd 1pt solid; width: 2.2in; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			Provisioning time schedules.
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="234" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 175.5pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			You would have to code/manage a schedule yourself.
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="289" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 216.9pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; text-indent: -0.25in; line-height: normal" class="MsoListParagraph"&gt;
			&lt;span style="font-family: symbol"&gt;&lt;span&gt;&amp;middot;&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Aware Server automatically will run services when you want them to run, where you want them to run.
			&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td width="211" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: #4f81bd 1pt solid; width: 2.2in; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			Zero configuration.
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="234" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: medium none; width: 175.5pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			You need to know the URL of the machine of the services you wish to call
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="289" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: medium none; width: 216.9pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; text-indent: -0.25in; line-height: normal" class="MsoListParagraph"&gt;
			&lt;span style="font-family: symbol"&gt;&lt;span&gt;&amp;middot;&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Aware Server was designed from the ground up with Services Virtualization in mind to eliminate service location configuration.
			&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td width="211" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: #4f81bd 1pt solid; width: 2.2in; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			IIS is not required, Although you can use IIS as well.
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="234" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 175.5pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; line-height: normal" class="MsoNormal"&gt;
			IIS is required to host your services.
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width="289" valign="top" style="border-right: #4f81bd 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 216.9pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid"&gt;
			&lt;p style="margin-bottom: 0pt; text-indent: -0.25in; line-height: normal" class="MsoListParagraph"&gt;
			&lt;span style="font-family: symbol"&gt;&lt;span&gt;&amp;middot;&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Aware Server offers you the flexibility of using whatever you hosting model you want.
			&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b2c6540e-4c88-44f8-a274-2c65b6414463" class="wlWriterSmartContent" style="display: inline; margin: 0px; padding: 0px"&gt;
Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/Aware%20Server"&gt;Aware Server&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/gridGISTICS"&gt;gridGISTICS&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/VS.NET%20Productivity"&gt;VS.NET Productivity&lt;/a&gt;
&lt;/div&gt;
</description>
      <link>http://feeds.feedburner.com/~r/grid-computing/~3/290283220/post.aspx</link>
      <author>Darrell Legault</author>
      <comments>http://blog.gridgistics.net/post/2008/05/Aware-Server-VSNET-Productivity-Chart.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.gridgistics.net/post.aspx?id=96e6aa2c-e776-4d5a-9633-bdac6af6e970</guid>
      <pubDate>Wed, 14 May 2008 12:45:00 -0400</pubDate>
      <category>Aware Server</category>
      <category>code reduction</category>
      <category>gridGISTICS</category>
      <dc:publisher>Darrell Legault</dc:publisher>
      <pingback:server>http://blog.gridgistics.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.gridgistics.net/post.aspx?id=96e6aa2c-e776-4d5a-9633-bdac6af6e970</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.gridgistics.net/trackback.axd?id=96e6aa2c-e776-4d5a-9633-bdac6af6e970</trackback:ping>
      <wfw:comment>http://blog.gridgistics.net/post/2008/05/Aware-Server-VSNET-Productivity-Chart.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.gridgistics.net/syndication.axd?post=96e6aa2c-e776-4d5a-9633-bdac6af6e970</wfw:commentRss>
    <feedburner:origLink>http://blog.gridgistics.net/post.aspx?id=96e6aa2c-e776-4d5a-9633-bdac6af6e970</feedburner:origLink></item>
    <item>
      <title>Aware Server ASP.NET Deployment - 5 Reasons Why You Need It.</title>
      <description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;ASP.NET is the most widely used application development environment within VS.NET.&amp;#160; As such, people waste much time designing and building ways to help them deploy their applications to their web farms (from staging, to QA, to production).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;One of Aware Server's powerful features is the ability to package and deploy and configure ASP.NET applications across many machines and may environments.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Details on how can be found here &lt;a title="Aware Server ASP.Net Web Deployment" href="http://blog.gridgistics.net/post/2008/05/Aware-Server-ASPNet-Web-Deployment.aspx"&gt;Aware Server ASP.Net Web Deployment&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The following are 5 simple reasons why Aware Server ASP.Net Deployment is 100 times easier and better than any other web deployment tool.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Command line vs UI point and click&lt;/strong&gt;       &lt;ol&gt;       &lt;li&gt;Aware Server:&amp;#160; Intuitive GUI allows for point, click, run your web. &lt;/li&gt;        &lt;li&gt;MS Deploy: learning curve of what commands to do what, then write your script. &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Setup of tools (remote service)&lt;/strong&gt;       &lt;ol&gt;       &lt;li&gt;Aware Server: No tools, just publish, then deploy your ASP.NET application all of the machines at once. &lt;/li&gt;        &lt;li&gt;MS Deploy:&amp;#160; msi installation, remote service setup, scripting etc... &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Versioning&lt;/strong&gt;       &lt;ol&gt;       &lt;li&gt;Aware Server:&amp;#160; Publish another version to your environment, then deploy it.&amp;#160; Want to rollback? Just use the Aware wizard and republish your previous version. &lt;/li&gt;        &lt;li&gt;MS Deploy: Another script, with hard coded configuration of source/remote machines.&amp;#160; And hope that the old code was saved somewhere safe. &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Environments&lt;/strong&gt;       &lt;ol&gt;       &lt;li&gt;Aware Server: Just deploy your manifest to the environment, then publish.&amp;#160; Then just as you would do with services or business processes, use the Aware Promotion wizard to promote your ASP.NET application to another environment. &lt;/li&gt;        &lt;li&gt;MS Deploy:&amp;#160; determine what machines are apart of an environment, write a script that will use those machines, as the environment changes, re-write your script. &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Multi Machine Publishing &lt;/strong&gt;      &lt;ol&gt;       &lt;li&gt;Aware Server:&amp;#160; Just select the IIS machines you want to target and publish, no coding or scripting. &lt;/li&gt;        &lt;li&gt;MS Deploy:&amp;#160; You need to know each machine and then develop script to deploy to those machines. &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;   &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:561e80ee-07cd-4e92-93a9-7258fbff241f" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Aware%20Server" rel="tag"&gt;Aware Server&lt;/a&gt;,&lt;a href="http://technorati.com/tags/gridGISTICS" rel="tag"&gt;gridGISTICS&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ASP.NET%20Deployment" rel="tag"&gt;ASP.NET Deployment&lt;/a&gt;,&lt;a href="http://technorati.com/tags/VS.NET%20productivity" rel="tag"&gt;VS.NET productivity&lt;/a&gt;&lt;/div&gt; &lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:B3E14793-948F-49af-A347-D19C374A7C4F:de7c9dfc-383c-41e3-afaa-11ba448404ce" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt; &lt;script type="text/javascript"&gt;&lt;!--
digg_title = 'Aware Server ASP.NET Deployment - 5 Reasons Why You Need It';
digg_bodytext = '5 simple reasons why Aware Server ASP.Net Deployment is 100 times easier and better than any other web deployment tool.';
digg_topic = 'software';
//--&gt;&lt;/script&gt; &lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt; &lt;/div&gt;</description>
      <link>http://feeds.feedburner.com/~r/grid-computing/~3/290275643/post.aspx</link>
      <author>darrell legault</author>
      <comments>http://blog.gridgistics.net/post/2008/05/Aware-Server-ASPNET-Deployment---5-Reasons-Why-You-Need-It.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.gridgistics.net/post.aspx?id=5f5818f2-04dc-4f9a-a78e-f21a92e720e9</guid>
      <pubDate>Wed, 14 May 2008 12:25:00 -0400</pubDate>
      <dc:publisher>darrell legault</dc:publisher>
      <pingback:server>http://blog.gridgistics.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.gridgistics.net/post.aspx?id=5f5818f2-04dc-4f9a-a78e-f21a92e720e9</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.gridgistics.net/trackback.axd?id=5f5818f2-04dc-4f9a-a78e-f21a92e720e9</trackback:ping>
      <wfw:comment>http://blog.gridgistics.net/post/2008/05/Aware-Server-ASPNET-Deployment---5-Reasons-Why-You-Need-It.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.gridgistics.net/syndication.axd?post=5f5818f2-04dc-4f9a-a78e-f21a92e720e9</wfw:commentRss>
    <feedburner:origLink>http://blog.gridgistics.net/post.aspx?id=5f5818f2-04dc-4f9a-a78e-f21a92e720e9</feedburner:origLink></item>
    <item>
      <title>Service Extensions</title>
      <description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Service extensions inside &lt;strong&gt;Aware Server v3 &lt;/strong&gt;can be used to build services that can have external algorithms or code attached to them by application administrators in a Lego type fashion.&amp;#160; The blog refers to the &lt;strong&gt;Extensions&lt;/strong&gt; sample that ships with the Aware SDK.&lt;/p&gt;  &lt;p&gt;Imagine the following service contract:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;[&lt;strong&gt;ServiceContract&lt;/strong&gt;(Namespace = &lt;span class="str"&gt;&amp;quot;urn:mynamespace&amp;quot;&lt;/span&gt;, Name = &lt;span class="str"&gt;&amp;quot;InsuranceClaimsService&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IInsuranceClaimsService&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    [&lt;strong&gt;OperationContract&lt;/strong&gt;]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    Double ComputeTotalClaim(String claimNumber, String state, Double carValue);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;} &lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Now lets define a service extension point for our service.&amp;#160; Imagine we want to be able to plug different tax calculators into different instances of our service without having to recompile or touch our insurance claims service implementation.&amp;#160; So lets define a TaxCalculator extension that our insurance engine will use to compute the tax associated to a car.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="rem"&gt;/// This interface will be our extension point for allowing others to provide&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="rem"&gt;/// TaxCalculatorExtension implementations&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;[&lt;strong&gt;DataContract&lt;/strong&gt;]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;[&lt;strong&gt;Serializable&lt;/strong&gt;]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; TaxCalculatorExtension : ServiceExtension&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;manifestReference&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;sealed&lt;/span&gt; Boolean CanBeAssociatedTo(ManifestReference manifestReference)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;span class="rem"&gt;// We can open the .aware file as xml in the ExtenableServices project to get the guid for that&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        &lt;span class="rem"&gt;// service.  &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="rem"&gt;// We only want to be associated to that type of service.  This limits what the management console&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        &lt;span class="rem"&gt;// shows to the user for associating extensions to your service.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; manifestReference.Id == &lt;span class="kwrd"&gt;new&lt;/span&gt; Guid(&lt;span class="str"&gt;&amp;quot;c7ff37eb-d286-475f-ad78-097e963a5d68&amp;quot;&lt;/span&gt;) &amp;amp;&amp;amp; manifestReference.Version == &lt;span class="str"&gt;&amp;quot;1.0.0.0&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;    } &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;state&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;carValue&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; Double ComputeTax(String state, Double carValue)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; 0.0;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;    } &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;sealed&lt;/span&gt; Boolean AllowMultiple&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;        get&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;            &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;            &lt;span class="rem"&gt;// We only want one of these at most attached to our service&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;            &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;} &lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;CanBeAssociatedTo &lt;/strong&gt;routine allows you to ensure that derived versions of this extension type are only applied to your service (guid and version make up a unique manifest inside &lt;strong&gt;Aware&lt;/strong&gt;).&amp;#160; The Aware Enterprise Manager will use this routine to limit the extensions that can be applied to a service.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;AllowMultiple&lt;/strong&gt; allows you state that multiple of this extension type may be applied or just one.&amp;#160; In our sample we want at most one tax calculator extension attached to our service.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;ComputeTax&lt;/strong&gt; routine and any other &lt;strong&gt;virtual&lt;/strong&gt; routines in this class define our extension points for tax calculators. 

  &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;For good measure let's provide a default implementation of our tax extension.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; DefaultTaxCalulator : &lt;strong&gt;TaxCalculatorExtension&lt;/strong&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;state&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;carValue&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; Double ComputeTax(String state, Double carValue)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; carValue * .07;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;} &lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;
  &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;In our host file for our service we can override the &lt;strong&gt;AddHostExtensions&lt;/strong&gt; event and attach our default extension if one has not been added to us already.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;sender&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;e&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; InsuranceClaimsServiceHost_AddHostExtensions(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, HostExtensionsEventArgs e)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="rem"&gt;// Check for an extension added from the outside otherwise add our default one&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (e.Extensions.Find&amp;lt;TaxCalculatorExtension&amp;gt;() == &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        e.Extensions.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; DefaultTaxCalulator()); &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="rem"&gt;// Extensions are accessible in any operation using OperationContext.Current.Host.Extensions.Find&amp;lt;TaxCalculatorExtension&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;} &lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Now take a look at the implementation of our &lt;strong&gt;IInsuranceClaimsService&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;Double IInsuranceClaimsService.ComputeTotalClaim(String claimNumber, String state, Double carValue)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="rem"&gt;// We know at least our DefaultTaxCalculator will be here&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    TaxCalculatorExtension taxCalculator = OperationContext.Current.Host.Extensions.Find&amp;lt;TaxCalculatorExtension&amp;gt;(); &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    &lt;span class="rem"&gt;// Use the tax calculator to finish the computation.  this could be our default one or &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    &lt;span class="rem"&gt;// one provided from the outside&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; taxCalculator.ComputeTax(state, carValue) + 15000;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;} &lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Notice how use the Extensions.Find method which is native to WCF on the current &lt;strong&gt;OperationContext&lt;/strong&gt;.&amp;#160; We grab our extension and call its compute tax routine.&amp;#160; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Now lets implement an extension on the outside.&amp;#160; To do this we create a new Service Extension project (project template that ships with Aware). &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;After adding a reference to our shared library (contains both the service contracts and service extension definitions) we implement a greedy tax calculator which returns 50% tax every time. &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;[DataContract]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;[Serializable]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;sealed&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; GreedyTaxCalculator : &lt;strong&gt;TaxCalculatorExtension&lt;/strong&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;    &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; GreedyTaxCalculator()&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    } &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ToString()&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; Description;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;    } &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;state&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;carValue&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; Double ComputeTax(String state, Double carValue)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;strong&gt;carValue * .5&lt;/strong&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;    } &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;    [Browsable(&lt;span class="kwrd"&gt;false&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; String Category&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;        get&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Insurance Tax Calculators&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;    } &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;    [Browsable(&lt;span class="kwrd"&gt;false&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; String Name&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;        get&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Greedy Tax Calculator&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;    } &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt;    [Browsable(&lt;span class="kwrd"&gt;false&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; String Description&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  65:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  66:  &lt;/span&gt;        get&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  67:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  68:  &lt;/span&gt;            &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  69:  &lt;/span&gt;            &lt;span class="rem"&gt;// This will show in the notes column in the management console&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  70:  &lt;/span&gt;            &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  71:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Takes the car value and return 50% tax&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  72:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  73:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  74:  &lt;/span&gt;} &lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The overridden properties above are only used by the tools to provide verbose descriptions for this extension.&amp;#160; After this we are done and ready to test.&amp;#160; Publish both your service and your service extensions projects into Aware.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.gridgistics.net/image.axd?picture=WindowsLiveWriter/ServiceExtensions_A70E/image_18.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="106" alt="image" src="http://blog.gridgistics.net/image.axd?picture=WindowsLiveWriter/ServiceExtensions_A70E/image_thumb_8.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;As shown above they are both deployed into Aware.&amp;#160; Next we need to provision 2 instances of our Insurance Claims Service.&amp;#160; One that uses the default tax calculator and one that uses the greedy one.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;To do this go into the Aware Enterprise Manager and go to the &lt;strong&gt;Service Provisioning Policies&lt;/strong&gt; tab.&amp;#160; Click the 'Create New' button to create a new provisioning policy.&amp;#160; Enter 'Insurance Claims' for the name of the policy and switch to the &lt;strong&gt;Included Service Manifests&lt;/strong&gt; tab.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.gridgistics.net/image.axd?picture=WindowsLiveWriter/ServiceExtensions_A70E/image_10.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="368" alt="image" src="http://blog.gridgistics.net/image.axd?picture=WindowsLiveWriter/ServiceExtensions_A70E/image_thumb_4.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Add our service by clicking the 'Add Service Manifest' button and enter an additional attribute in the Additional Attributes section with a key of &lt;strong&gt;Tax&lt;/strong&gt; and a value of &lt;strong&gt;Default.&amp;#160; &lt;/strong&gt;Then add our same service again.&amp;#160; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.gridgistics.net/image.axd?picture=WindowsLiveWriter/ServiceExtensions_A70E/image_12.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="369" alt="image" src="http://blog.gridgistics.net/image.axd?picture=WindowsLiveWriter/ServiceExtensions_A70E/image_thumb_5.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;For the second instance of our service add an additional attribute with a key of &lt;strong&gt;Tax&lt;/strong&gt; and a value of &lt;strong&gt;Greedy&lt;/strong&gt;.&amp;#160; Before clicking save switch to the &lt;strong&gt;Extensions&lt;/strong&gt; tab in the lower section of the screen.&amp;#160; Click the &lt;strong&gt;Add Extension &lt;/strong&gt;and select the Greedy Tax Calculator from the popup and click Apply.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.gridgistics.net/image.axd?picture=WindowsLiveWriter/ServiceExtensions_A70E/image_8.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="368" alt="image" src="http://blog.gridgistics.net/image.axd?picture=WindowsLiveWriter/ServiceExtensions_A70E/image_thumb_3.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Save &lt;/strong&gt;and switch to the Service tab in the Enterprise Manager to see that we have 2 instances of our insurance service running and that each have an attribute attached to them with a key of &lt;strong&gt;Tax&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.gridgistics.net/image.axd?picture=WindowsLiveWriter/ServiceExtensions_A70E/image_14.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="387" alt="image" src="http://blog.gridgistics.net/image.axd?picture=WindowsLiveWriter/ServiceExtensions_A70E/image_thumb_6.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;We can then use this attribute to route requests to different instances of our service.&amp;#160; The client code is listed below.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;                &lt;strong&gt;ServiceAttributes&lt;/strong&gt; attributes = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;strong&gt;ServiceAttributes&lt;/strong&gt;();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;                attributes[&lt;span class="str"&gt;&amp;quot;Tax&amp;quot;&lt;/span&gt;] = &lt;span class="str"&gt;&amp;quot;Default&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;                &lt;span class="kwrd"&gt;using&lt;/span&gt; (InsuranceClaimsServiceClient client = &lt;span class="kwrd"&gt;new&lt;/span&gt; InsuranceClaimsServiceClient(attributes))&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;                    Double result = client.ComputeTotalClaim(&lt;span class="str"&gt;&amp;quot;122344x&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;GA&amp;quot;&lt;/span&gt;, 5600);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                    Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Claim result = {0}&amp;quot;&lt;/span&gt;, result);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;                &lt;strong&gt;ServiceAttributes&lt;/strong&gt; attributes2 = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;strong&gt;ServiceAttributes&lt;/strong&gt;();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;                attributes2[&lt;span class="str"&gt;&amp;quot;Tax&amp;quot;&lt;/span&gt;] = &lt;span class="str"&gt;&amp;quot;Greedy&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                &lt;span class="kwrd"&gt;using&lt;/span&gt; (InsuranceClaimsServiceClient client = &lt;span class="kwrd"&gt;new&lt;/span&gt; InsuranceClaimsServiceClient(attributes2))&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                    Double result = client.ComputeTotalClaim(&lt;span class="str"&gt;&amp;quot;122344x&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;GA&amp;quot;&lt;/span&gt;, 5600);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                    Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Claim result = {0}&amp;quot;&lt;/span&gt;, result);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Above we call the insurance service twice.&amp;#160; The first call is directed to the default tax calculator instance and the second is directed to the greedy instance.&amp;#160; If you recall from our implementations above we add 15000 to whatever tax is computed.&amp;#160; So for the first one our default tax will be 15000 + .07 * 5600 = 15392 and for the greedy one it will be 15000 + .5 * 5600 = 17800.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.gridgistics.net/image.axd?picture=WindowsLiveWriter/ServiceExtensions_A70E/image_16.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="264" alt="image" src="http://blog.gridgistics.net/image.axd?picture=WindowsLiveWriter/ServiceExtensions_A70E/image_thumb_7.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;This really shows off how we can use the same binary bits (deployed service manifest) and change the behavior of the service through configuration and extensions.&amp;#160; Tax algorithms can now be implemented independent of the insurance claims service and can be assembled at provisioning time depending on customer need, etc.&lt;/p&gt;</description>
      <link>http://feeds.feedburner.com/~r/grid-computing/~3/290180952/post.aspx</link>
      <author>Dan Haligas</author>
      <comments>http://blog.gridgistics.net/post/2008/05/Service-Extensions.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.gridgistics.net/post.aspx?id=63cc316b-c5cd-4b28-b162-00b95c26207e</guid>
      <pubDate>Wed, 14 May 2008 09:45:34 -0400</pubDate>
      <dc:publisher>Dan Haligas</dc:publisher>
      <pingback:server>http://blog.gridgistics.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.gridgistics.net/post.aspx?id=63cc316b-c5cd-4b28-b162-00b95c26207e</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.gridgistics.net/trackback.axd?id=63cc316b-c5cd-4b28-b162-00b95c26207e</trackback:ping>
      <wfw:comment>http://blog.gridgistics.net/post/2008/05/Service-Extensions.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.gridgistics.net/syndication.axd?post=63cc316b-c5cd-4b28-b162-00b95c26207e</wfw:commentRss>
    <feedburner:origLink>http://blog.gridgistics.net/post.aspx?id=63cc316b-c5cd-4b28-b162-00b95c26207e</feedburner:origLink></item>
    <item>
      <title>External Windows Workflow Correlated Communication Part 2</title>
      <description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I am finally getting around to completing this two part series on what we have done for you as far as workflow communication goes inside Aware Server v3.0.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;If you remember from &lt;a href="http://blog.gridgistics.net/post/2007/11/External-Windows-Workflow-Correlated-Communication.aspx"&gt;Part 1&lt;/a&gt; I simply demonstrated what it takes using plain vanilla Windows Workflow to have a workflow instance wait on an correlated event.&amp;#160; To fire an event back into the right workflow instance you need the instance id to load it and fire the event.&amp;#160; This poses a problem when an event may not come in for quite some time.&amp;#160; Where do you store the instance id?&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;You can either store the instance id in one of your own application tables and look it up every time before firing events or you can use are somewhat simplified approach with Aware Server.&amp;#160; I say simplified because we took it as far as we could.&amp;#160; In our SDK there is an order processing sample so I will refer to that for the rest of this blog entry.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;So what have we done for you to make this easier?&amp;#160; For starters we provide our own implementation of the &lt;strong&gt;WorkflowSubscriptionService&lt;/strong&gt; that ships with WF.&amp;#160; The WF runtime detects if an instance of this service is added to the runtime and calls you to tell you about every Activity in an instance that requires correlation.&amp;#160; This allows us to store this information in SQL Server so we can handle the lookups for you at a later time.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Next we assume that anything you are correlating on must be unique.&amp;#160; For example if your system generates an OrderId and you tell the WF runtime that this is the attribute you want to correlate on using&amp;#160; [&lt;b&gt;CorrelationParameter&lt;/b&gt;(&amp;quot;OrderId&amp;quot;)] attribute then we take a hash of your order id and store it for later lookups.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;So again lets assume we have the following workflow service interface.&amp;#160; Except now notice we have added some new attributes.&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre&gt;&amp;#160;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="rem"&gt;/// The [ExposedAutoCorrelationEvent] tells the client generation engine to&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="rem"&gt;/// expose these events so the client can call the directly&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="rem"&gt;/// This service must be exposed to the Aware correlation engine via the&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="rem"&gt;/// [ExposedWorkflowService(typeof(IOrderWorkflowService), &amp;quot;OrderEngine&amp;quot;)] attribute located&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="rem"&gt;/// in the OrderProcessingProcess.cs file attached to the OrderProcessingProcess.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    [ExternalDataExchange]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    [CorrelationParameter(&lt;span class="str"&gt;&amp;quot;OrderId&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IOrderWorkflowService&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        [CorrelationAlias(&lt;span class="str"&gt;&amp;quot;OrderId&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;e.OrderId&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        [&lt;strong&gt;ExposedAutoCorrelationEvent&lt;/strong&gt;]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;&lt;strong&gt;OrderWorkflowServiceEventArgs&lt;/strong&gt;&amp;gt; OrderCanceled;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;        [CorrelationAlias(&lt;span class="str"&gt;&amp;quot;OrderId&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;e.OrderId&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;        [&lt;strong&gt;ExposedAutoCorrelationEvent&lt;/strong&gt;]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;        &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;&lt;strong&gt;OrderWorkflowServiceEventArgs&lt;/strong&gt;&amp;gt; OrderShipped;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;        [CorrelationAlias(&lt;span class="str"&gt;&amp;quot;OrderId&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;e.OrderId&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;        [&lt;strong&gt;ExposedAutoCorrelationEvent&lt;/strong&gt;]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;        &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;&lt;strong&gt;OrderWorkflowServiceEventArgs&lt;/strong&gt;&amp;gt; OrderProcessed;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;        &lt;span class="rem"&gt;/// This event will be fired from the Host.cs file in the ProcessStarted event.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;        &lt;span class="rem"&gt;/// This is necessary to initialize the Correlation engine for a particular workflow instance&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;        &lt;span class="rem"&gt;/// inside WF.  Note this event is not exposed to the outside world as it will only be invoked&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;        &lt;span class="rem"&gt;/// internally.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;        [CorrelationAlias(&lt;span class="str"&gt;&amp;quot;OrderId&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;e.OrderId&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;        [CorrelationInitializer]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;        [&lt;strong&gt;ExposedAutoCorrelationEvent&lt;/strong&gt;(ExposedExternally=&lt;span class="kwrd"&gt;false&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;        &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;&lt;strong&gt;OrderWorkflowServiceEventArgs&lt;/strong&gt;&amp;gt; OrderCreated;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
	width: 550px;
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
	width: 550px;
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Every event you want us to automatically expose to the outside world for you needs to be marked with the [&lt;strong&gt;ExposedAutoCorrelationEvent&lt;/strong&gt;] attribute.&amp;#160; The OrderCreated event (an internal event used to initialize the correlation) is marked as ExposedExternally=false.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Next we need to update our ExternalDataEventArgs class and add 2 attributes in the constructor.&amp;#160; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    [Serializable]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; OrderWorkflowServiceEventArgs : ExternalDataEventArgs&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; Guid orderId;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; Guid OrderId&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; orderId; }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;            set { orderId = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        &lt;span class="rem"&gt;/// The [AutoCorrelationInstanceId] tells the client generation engine which constructor parameter&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="rem"&gt;/// should be mapped to the instance id to get workflow instance.  &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        &lt;span class="rem"&gt;/// The [AutoCorrelationParameter] tells the correlation engine which [CorrelationParameter] attribute to map&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;        &lt;span class="rem"&gt;/// to on the IOrderWorkflowService.  You can have multiple correlation values.  The combination of them must be unique.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;instanceId&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;orderId&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; OrderWorkflowServiceEventArgs([&lt;strong&gt;AutoCorrelationInstanceId&lt;/strong&gt;] Guid instanceId, [&lt;strong&gt;AutoCorrelationParameter&lt;/strong&gt;(&lt;span class="str"&gt;&amp;quot;OrderId&amp;quot;&lt;/span&gt;)] Guid orderId)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;            : &lt;span class="kwrd"&gt;base&lt;/span&gt; (instanceId)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.orderId = orderId;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
	width: 550px;
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Notice the [&lt;strong&gt;AutoCorrelationInstanceId&lt;/strong&gt;] attribute.&amp;#160; This is used to tell the Aware runtime which parameter is the unique WF instance id Guid.&amp;#160; The other attribute [&lt;strong&gt;AutoCorrelationParameter&lt;/strong&gt;(&lt;span class="str"&gt;&amp;quot;OrderId&amp;quot;&lt;/span&gt;)] must be applied to each [&lt;b&gt;CorrelationParameter&lt;/b&gt;(&amp;quot;XXX&amp;quot;)] you applied to your IOrderWorkflowService above.&amp;#160; In this case we only have one correlation parameter so [&lt;strong&gt;AutoCorrelationParameter&lt;/strong&gt;(&lt;span class="str"&gt;&amp;quot;OrderId&amp;quot;&lt;/span&gt;)] is applied to the &amp;quot;orderId&amp;quot; parameter in the constructor.&amp;#160; Again nothing new yet.&amp;#160; Our engine will use all these attributes to automatically generate a typed proxy&amp;#160; for any clients (ASP.NET, Winforms, etc.) that want to trigger events externally.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Lastly we need to implement our IOrderWorkflowService interface.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="rem"&gt;/// You must derive from CorrelationWorkflowService&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; OrderWorkflowService : &lt;strong&gt;CorrelationWorkflowService&lt;/strong&gt;&amp;lt;IOrderWorkflowService&amp;gt;, IOrderWorkflowService&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="rem"&gt;// All these events will be automatically wired up by Aware and fired when called.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="preproc"&gt;#region&lt;/span&gt; IOrderWorkflowService Members&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;&lt;strong&gt;OrderWorkflowServiceEventArgs&lt;/strong&gt;&amp;gt; OrderCanceled;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;&lt;strong&gt;OrderWorkflowServiceEventArgs&lt;/strong&gt;&amp;gt; OrderShipped;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;&lt;strong&gt;OrderWorkflowServiceEventArgs&lt;/strong&gt;&amp;gt; OrderProcessed;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;&lt;strong&gt;OrderWorkflowServiceEventArgs&lt;/strong&gt;&amp;gt; OrderCreated;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
	width: 550px;
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Notice we don't need to actually implement the events.&amp;#160; By deriving from our &lt;strong&gt;CorrelationWorkflowService &lt;/strong&gt;we will automatically implement those for you.&amp;#160; When you build you will get CS0067 warnings, but your can wrap those with a #pragma to remove those.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;In your Host.cs file of your Aware Business Process project make sure you add your OrderWorkflowService to the runtime.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;sender&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;e&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;void&lt;/span&gt; Host_InitializeWorkflowRuntime(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, InitializeWorkflowRuntimeEventArgs e)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            &lt;span class="rem"&gt;// It is important that you add your services to the ExternalDataExchangeService and not the &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            &lt;span class="rem"&gt;// runtime directly.  The ExternalDataExchangeService handles interception of your events&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            &lt;span class="rem"&gt;// your service and ensures they get scheduled properly inside the WorkflowRuntime&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            ExternalDataExchangeService dataExchangeService = e.WorkflowRuntime.GetService&amp;lt;ExternalDataExchangeService&amp;gt;();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            dataExchangeService.AddService(&lt;span class="kwrd"&gt;new&lt;/span&gt; OrderWorkflowService());&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;sender&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;e&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        &lt;span class="kwrd"&gt;void&lt;/span&gt; Host_ProcessStarted(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, ProcessEventArgs e)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;            &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            &lt;span class="rem"&gt;// Grab the OrderDetails provided to the process&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;            &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;            OrderDetails orderDetails = e.BusinessProcessContext.BusinessProcessRequest.Parameters[&lt;span class="str"&gt;&amp;quot;OrderDetails&amp;quot;&lt;/span&gt;] &lt;span class="kwrd"&gt;as&lt;/span&gt; OrderDetails;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;            &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;            &lt;span class="rem"&gt;// This must be fired to initialize the correlation.  WF requires either a method &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;            &lt;span class="rem"&gt;// or and event on the [ExternalDataExchange] based service to initialize the correlation via the [CorrelationInitialization] attribute&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;            &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;            OrderWorkflowService orderService = GetWorkflowService&amp;lt;OrderWorkflowService&amp;gt;();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;            orderService.FireEvent(&lt;span class="str"&gt;&amp;quot;OrderCreated&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; OrderWorkflowServiceEventArgs(e.BusinessProcessContext.BusinessProcessId, orderDetails.OrderId));&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
	width: 550px;
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
	width: 550px;
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Next go to your workflow and view code.&amp;#160; At the top of your class add the following attribute.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;    [&lt;strong&gt;ExposedWorkflowService&lt;/strong&gt;(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(IOrderWorkflowService), &lt;span class="str"&gt;&amp;quot;OrderEngine&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    [BusinessProcessScheduledInitializer(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(ScheduledInitializer))]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    [BusinessProcessHost(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Host))]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;sealed&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; OrderProcessingProcess : StateMachineWorkflowActivity&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; OrderDetails orderDetails;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
	width: 550px;
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The [&lt;strong&gt;ExposedWorkflowService&lt;/strong&gt;(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(IOrderWorkflowService), &lt;span class="str"&gt;&amp;quot;OrderEngine&amp;quot;&lt;/span&gt;)] attribute tells our proxy engine to generate a typed class for you that exposes all the [&lt;strong&gt;ExposedAutoCorrelationEvent&lt;/strong&gt;] on the IOrderWorkflowService externally and call it &amp;quot;OrderEngine&amp;quot;.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;If you add an Aware Reference from your client. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.gridgistics.net/image.axd?picture=WindowsLiveWriter/ExternalWindowsWorkflowCorrelatedCommuni_B084/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="140" alt="image" src="http://blog.gridgistics.net/image.axd?picture=WindowsLiveWriter/ExternalWindowsWorkflowCorrelatedCommuni_B084/image_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.gridgistics.net/image.axd?picture=WindowsLiveWriter/ExternalWindowsWorkflowCorrelatedCommuni_B084/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="226" alt="image" src="http://blog.gridgistics.net/image.axd?picture=WindowsLiveWriter/ExternalWindowsWorkflowCorrelatedCommuni_B084/image_thumb_1.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;You will end up with a generated client that looks like the following.&amp;#160; The guts of each fired routine is omitted for brevity. Notice the name of the typed class &amp;quot;OrderEngine&amp;quot; and the static routines on the OrderProcessingProcessClient.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; OrderEngine : Gridgistics.Aware.BusinessProcesses.Clients.GeneratedBusinessProcessExposedServiceClient&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; OrderEngine(Gridgistics.Aware.Workflow.CorrelationValues correlationValues, Gridgistics.Aware.Workflow.CorrelationHostReference correlationHostReference) : &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                &lt;span class="kwrd"&gt;base&lt;/span&gt;(correlationValues, correlationHostReference)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; FireOrderCanceled()&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        ...&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; FireOrderShipped()&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        ...&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; FireOrderProcessed()&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        ...&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
	width: 550px;
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;And&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; OrderProcessingProcessClient : Gridgistics.Aware.BusinessProcesses.Clients.GeneratedBusinessProcessClientBase&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; OrderEngine GetOrderEngine(System.Guid orderId)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; OrderProcessingProcessClient.GetOrderEngine(orderId, &lt;span class="kwrd"&gt;new&lt;/span&gt; Gridgistics.Aware.Services.ServiceAttributes());&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; OrderEngine GetOrderEngine(System.Guid orderId, Gridgistics.Aware.Services.ServiceAttributes searchAttributes)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        ...&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
	width: 550px;
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;To use this generated client you will use the following code.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;using&lt;/span&gt; (OrderEngine orderEngine = OrderProcessingProcessClient.GetOrderEngine(detail.OrderId))&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;                    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;                        orderEngine.FireOrderProcessed();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;                    }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
	width: 550px;
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;No matter what server your WF instance is running on and no matter which version it is the events will be routed back to the right instance using the right assembly versions, etc. by simply providing us with your correlated value (order id in this case).&amp;#160; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;So as you can see we have done our best to take some of the sting out of using correlated workflow services inside WF and easily exposing these events externally to any .NET client.&lt;/p&gt;</description>
      <link>http://feeds.feedburner.com/~r/grid-computing/~3/289589457/post.aspx</link>
      <author>Dan Haligas</author>
      <comments>http://blog.gridgistics.net/post/2008/05/External-Windows-Workflow-Correlated-Communication-Part-2.aspx#comment<