<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Mark Harris</title>
	
	<link>http://www.markharris.net.au/blog</link>
	<description>musings on Software Development</description>
	<lastBuildDate>Sat, 13 Feb 2010 04:19:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/net/FXnX" /><feedburner:info uri="net/fxnx" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><feedburner:emailServiceId>net/FXnX</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Doing .NET Days Day 2</title>
		<link>http://feedproxy.google.com/~r/net/FXnX/~3/knrRCfiaNWc/</link>
		<comments>http://www.markharris.net.au/blog/2010/02/13/doing-net-days-day-2/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 04:19:57 +0000</pubDate>
		<dc:creator>Mark Harris</dc:creator>
				<category><![CDATA[doing .NET Days]]></category>
		<category><![CDATA[entity framework]]></category>
		<category><![CDATA[NServiceBus]]></category>
		<category><![CDATA[Training]]></category>

		<guid isPermaLink="false">http://www.markharris.net.au/blog/2010/02/13/doing-net-days-day-2/</guid>
		<description><![CDATA[Doing .NET Days Day 2 has been confirmed and locked in for the 6th of March and Registrations are open. Simon has the details on the need for moving the date.&#160; A seat can be reserved by via email on the Doing .net Days page. Remember seats are fairly limited so if you wish to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.markharris.net.au/blog/wp-content/uploads/2010/02/download.png"><img style="border-right-width: 0px; margin: 0px 5px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="download" border="0" alt="download" align="left" src="http://www.markharris.net.au/blog/wp-content/uploads/2010/02/download_thumb.png" width="119" height="94" /></a><a href="http://www.markharris.net.au/blog/doing-net-days/">Doing .NET Days</a> Day 2 has been confirmed and locked in for the 6th of March and <strong>Registrations are open</strong>. Simon has the <a href="http://www.simonsegal.net/blog/2010/02/13/doing-net-days-announcement/">details on the need for moving the date</a>.&#160; A seat can be reserved by via email on the <a href="http://www.markharris.net.au/blog/doing-net-days/">Doing .net Days page</a>. Remember seats are fairly limited so if you wish to attend don’t put it off if you can help it. </p>
<p>The topics covered this time around are ‘Helping the Entity Framework play its &lt;ROLE&gt;’, looking at ways of using behavioural roles defined by interfaces in your system to be explicit and achieve high performance results, finer grained separation of concerns and greater configurability between your Domain Model and infrastructure. The second topic will be a practical look at getting started with NServiceBus, including demonstrations taking in messaging patterns such as Publish / Subscribe and full duplex.</p>
<a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F13%2Fdoing-net-days-day-2%2F&amp;linkname=Doing%20.NET%20Days%20Day%202" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F13%2Fdoing-net-days-day-2%2F&amp;linkname=Doing%20.NET%20Days%20Day%202" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F13%2Fdoing-net-days-day-2%2F&amp;linkname=Doing%20.NET%20Days%20Day%202" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F13%2Fdoing-net-days-day-2%2F&amp;linkname=Doing%20.NET%20Days%20Day%202" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F13%2Fdoing-net-days-day-2%2F&amp;linkname=Doing%20.NET%20Days%20Day%202" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F13%2Fdoing-net-days-day-2%2F&amp;linkname=Doing%20.NET%20Days%20Day%202" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F13%2Fdoing-net-days-day-2%2F&amp;linkname=Doing%20.NET%20Days%20Day%202">Share/Save</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/net/FXnX?a=knrRCfiaNWc:gueUl_JX5yY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=knrRCfiaNWc:gueUl_JX5yY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=knrRCfiaNWc:gueUl_JX5yY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=knrRCfiaNWc:gueUl_JX5yY:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=knrRCfiaNWc:gueUl_JX5yY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=knrRCfiaNWc:gueUl_JX5yY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=knrRCfiaNWc:gueUl_JX5yY:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=knrRCfiaNWc:gueUl_JX5yY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=knrRCfiaNWc:gueUl_JX5yY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=knrRCfiaNWc:gueUl_JX5yY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=knrRCfiaNWc:gueUl_JX5yY:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=knrRCfiaNWc:gueUl_JX5yY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=knrRCfiaNWc:gueUl_JX5yY:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/net/FXnX/~4/knrRCfiaNWc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.markharris.net.au/blog/2010/02/13/doing-net-days-day-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.markharris.net.au/blog/2010/02/13/doing-net-days-day-2/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=doing-net-days-day-2</feedburner:origLink></item>
		<item>
		<title>Developing a sense of Scalability</title>
		<link>http://feedproxy.google.com/~r/net/FXnX/~3/7cXyhaUa-rg/</link>
		<comments>http://www.markharris.net.au/blog/2010/02/06/developing-a-sense-of-scalability/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 15:41:04 +0000</pubDate>
		<dc:creator>Mark Harris</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[Scalability]]></category>

		<guid isPermaLink="false">http://www.markharris.net.au/blog/?p=218</guid>
		<description><![CDATA[Scott Hanselman’s recent post about exporting data from a database to a csv file where he talks about how some code could be improved. He does a very nice job of showing how and were the code could remove the smells that were present in the original design. However there are a few things that [...]]]></description>
			<content:encoded><![CDATA[<p>Scott Hanselman’s recent post about <a href="http://www.hanselman.com/blog/BackToBasicsKeepItSimpleAndDevelopYourSenseOfSmellFromLinqToCSV.aspx">exporting data from a database to a csv file</a> where he talks about how some code could be improved. He does a very nice job of showing how and were the code could remove the smells that were present in the original design. However there are a few things that I see that if changed could improve both the performance and scalability of the system.</p>
<p>While this is something that depending on the complexity and scalability needs of your site one may consider over kill, it is something that takes minimal effort in design to create a system that is innately more scalable. What happens when the data you are querying starts to push out is 5-10Mb of Data to a CSV file?</p>
<h2>Option 1</h2>
<p>So rather than generate the list of Foo into a CSV at each request why not pre generate the list at pre configured intervals depending on the volatility of the data and save the resultant CSV to a san that can be served up via IIS. In this scenario there is no need for the ASP.NET worker process to get involved and the IIS process can do what it was meant to do serve content.</p>
<p><a href="http://www.markharris.net.au/blog/wp-content/uploads/2010/02/Pregeneratedfilesystem.png"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="Pregenerated file system" border="0" alt="Pregenerated file system" src="http://www.markharris.net.au/blog/wp-content/uploads/2010/02/Pregeneratedfilesystem_thumb.png" width="484" height="225" /></a> </p>
<h3>Advantages</h3>
<ul>
<li>No need to hit the DB to get the data</li>
<li>You don&#8217;t have to involve the asp.net worker process and let IIS do what its designed to do</li>
</ul>
<h3>Disadvantages</h3>
<ul>
<li>Your data may be stale up to a preconfigured amount of time (but since its going to a report of sorts it is more than likely stale)</li>
</ul>
<h2>Option 2 </h2>
<p>So your business requirement absolutely dictates that it is required to be generated and sent as the user requests it. There is no choice, you have but to send it through the response stream. BUT there is another way. Say when this request for the data to be exported VIA an AJAX call to your server the response from the server is a URL to where the file will be output. Now the server it self can then send a message to the export to csv service and request the file be output to the san. The client can then poll the server waiting for a 200 response code, when it does get one it can then redirect the browser to the given URL.</p>
<p><a href="http://www.markharris.net.au/blog/wp-content/uploads/2010/02/pollingfilesystem.png"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="polling file system" border="0" alt="polling file system" src="http://www.markharris.net.au/blog/wp-content/uploads/2010/02/pollingfilesystem_thumb.png" width="466" height="320" /></a> </p>
<h3>Advantages</h3>
<ul>
<li>Gives you more or less up to the minute accurate data</li>
<li>Reduces the amount of work the asp.net worker process has to perform</li>
</ul>
<h3>Disadvantages</h3>
<ul>
<li>Introduces polling into the design of the client</li>
</ul>
<p>When designing systems that do not take Scalability into account from the ground up, you generally are missing something. Considering Scalability does not mean that you choose either of these two options all the time. At times it might make sense to think about using the approach suggested in Scott’s article, the key being to always <strike>think about</strike> know your data and make informed decisions.</p>
<a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F06%2Fdeveloping-a-sense-of-scalability%2F&amp;linkname=Developing%20a%20sense%20of%20Scalability" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F06%2Fdeveloping-a-sense-of-scalability%2F&amp;linkname=Developing%20a%20sense%20of%20Scalability" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F06%2Fdeveloping-a-sense-of-scalability%2F&amp;linkname=Developing%20a%20sense%20of%20Scalability" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F06%2Fdeveloping-a-sense-of-scalability%2F&amp;linkname=Developing%20a%20sense%20of%20Scalability" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F06%2Fdeveloping-a-sense-of-scalability%2F&amp;linkname=Developing%20a%20sense%20of%20Scalability" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F06%2Fdeveloping-a-sense-of-scalability%2F&amp;linkname=Developing%20a%20sense%20of%20Scalability" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F06%2Fdeveloping-a-sense-of-scalability%2F&amp;linkname=Developing%20a%20sense%20of%20Scalability">Share/Save</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/net/FXnX?a=7cXyhaUa-rg:bsybJtrsCIg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=7cXyhaUa-rg:bsybJtrsCIg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=7cXyhaUa-rg:bsybJtrsCIg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=7cXyhaUa-rg:bsybJtrsCIg:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=7cXyhaUa-rg:bsybJtrsCIg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=7cXyhaUa-rg:bsybJtrsCIg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=7cXyhaUa-rg:bsybJtrsCIg:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=7cXyhaUa-rg:bsybJtrsCIg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=7cXyhaUa-rg:bsybJtrsCIg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=7cXyhaUa-rg:bsybJtrsCIg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=7cXyhaUa-rg:bsybJtrsCIg:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=7cXyhaUa-rg:bsybJtrsCIg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=7cXyhaUa-rg:bsybJtrsCIg:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/net/FXnX/~4/7cXyhaUa-rg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.markharris.net.au/blog/2010/02/06/developing-a-sense-of-scalability/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.markharris.net.au/blog/2010/02/06/developing-a-sense-of-scalability/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=developing-a-sense-of-scalability</feedburner:origLink></item>
		<item>
		<title>Doing Advanced Distributed Systems Design – A Gift from Santa</title>
		<link>http://feedproxy.google.com/~r/net/FXnX/~3/ANPQei3oxjM/</link>
		<comments>http://www.markharris.net.au/blog/2010/02/04/doing-advanced-distributed-systems-design-a-gift-from-santa/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 13:46:27 +0000</pubDate>
		<dc:creator>Mark Harris</dc:creator>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[NServiceBus]]></category>
		<category><![CDATA[soa]]></category>
		<category><![CDATA[Training]]></category>

		<guid isPermaLink="false">http://www.markharris.net.au/blog/?p=210</guid>
		<description><![CDATA[It is the second time I have sat through&#160;Udi&#8217;s Advanced Distributed Systems Design. Unlike repeating a course at University, I was like a 6 year old waiting for Santa Claus to arrive with his presents at Christmas. Not only has the course content been refined in some sections, CQRS (In case you missed it you [...]]]></description>
			<content:encoded><![CDATA[<p>It is the second time I have sat through<a href="http://www.udidahan.com/training/">&nbsp;Udi&#8217;s Advanced Distributed Systems Design</a>. Unlike repeating a course at University, I was like a 6 year old waiting for Santa Claus to arrive with his presents at Christmas. Not only has the course content been refined in some sections, CQRS (In case you missed it you can <a href="http://www.markharris.net.au/blog/2010/01/24/video-of-command-query-responsibility-segregation-by-udi-dahan/">watch Udi&#8217;s presentation on CQRS here</a>) for instance. Udi&#8217;s delivery of the material is such that he always has you yearning for more. The first time i did this course it was as though someone had opened my minds eye. Since then I have made so many changes to my thinking and the way I approach development. </p>
<p>My reasons for attending the course again were simple
<ol>
<li>Gauge my progression</li>
<li>Hear other peoples thoughts and opinions</li>
<li>Spend more time at the feet of the master</li>
<li>And of course Learn some more</li>
</ol>
<p>The beauty of this course is that despite the complexity of the architecture and the concepts the delivery makes the comprehension a breeze.&nbsp; <a href="http://www.paulbatum.com/2010/01/advanced-distributed-systems-design.html">Paul Batum</a> and <a href="http://rhysc.blogspot.com/2010/01/udi-dahan-advanced-distributed-systems.html">Rhys Campbell</a> who attended the course have written up their impressions, as has <a href="http://www.simonsegal.net/blog/2010/02/04/adsd-nservicebus-and-nuclear-armament-the-full-story/">Simon</a> and we all agree that it is worth its weight in gold. So if you have thought about ever doing this course and can make it to one do so, but if your not able to go to one of upcoming courses I would strongly suggest <a href="http://www.udidahan.com/contact/">getting in touch with Udi</a> and working other possible solutions with him. Which is why I guess Simon is owed big thanks for setting up this opportunity. </p>
<p>As for NServiceBus and its comparisons to <a href="http://twitter.com/markmario/status/6254304647">Nuclear Armament</a>, I can only say that once you have used it, there is a realization that there is great power that can be wielded without any effort. Till you can try it for yourself see what <a href="http://twitter.com/#search?q=NServiceBus">twitter has to say about NServiceBus</a>. For me the next dose of sharing some NServiceBus love will be at <a href="http://www.markharris.net.au/blog/doing-net-days/">Day 2 of Doing .net Days on the 27th February 2010</a> if you have nothing on that Saturday why not send an <a href="mailto:simon.segal@simonsegal.net">email to register a seat</a> before they run out</p>
<a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F04%2Fdoing-advanced-distributed-systems-design-a-gift-from-santa%2F&amp;linkname=Doing%20Advanced%20Distributed%20Systems%20Design%20%26%238211%3B%20A%20Gift%20from%20Santa" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F04%2Fdoing-advanced-distributed-systems-design-a-gift-from-santa%2F&amp;linkname=Doing%20Advanced%20Distributed%20Systems%20Design%20%26%238211%3B%20A%20Gift%20from%20Santa" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F04%2Fdoing-advanced-distributed-systems-design-a-gift-from-santa%2F&amp;linkname=Doing%20Advanced%20Distributed%20Systems%20Design%20%26%238211%3B%20A%20Gift%20from%20Santa" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F04%2Fdoing-advanced-distributed-systems-design-a-gift-from-santa%2F&amp;linkname=Doing%20Advanced%20Distributed%20Systems%20Design%20%26%238211%3B%20A%20Gift%20from%20Santa" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F04%2Fdoing-advanced-distributed-systems-design-a-gift-from-santa%2F&amp;linkname=Doing%20Advanced%20Distributed%20Systems%20Design%20%26%238211%3B%20A%20Gift%20from%20Santa" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F04%2Fdoing-advanced-distributed-systems-design-a-gift-from-santa%2F&amp;linkname=Doing%20Advanced%20Distributed%20Systems%20Design%20%26%238211%3B%20A%20Gift%20from%20Santa" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F02%2F04%2Fdoing-advanced-distributed-systems-design-a-gift-from-santa%2F&amp;linkname=Doing%20Advanced%20Distributed%20Systems%20Design%20%26%238211%3B%20A%20Gift%20from%20Santa">Share/Save</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/net/FXnX?a=ANPQei3oxjM:1HV_XnNFtXA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=ANPQei3oxjM:1HV_XnNFtXA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=ANPQei3oxjM:1HV_XnNFtXA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=ANPQei3oxjM:1HV_XnNFtXA:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=ANPQei3oxjM:1HV_XnNFtXA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=ANPQei3oxjM:1HV_XnNFtXA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=ANPQei3oxjM:1HV_XnNFtXA:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=ANPQei3oxjM:1HV_XnNFtXA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=ANPQei3oxjM:1HV_XnNFtXA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=ANPQei3oxjM:1HV_XnNFtXA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=ANPQei3oxjM:1HV_XnNFtXA:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=ANPQei3oxjM:1HV_XnNFtXA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=ANPQei3oxjM:1HV_XnNFtXA:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/net/FXnX/~4/ANPQei3oxjM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.markharris.net.au/blog/2010/02/04/doing-advanced-distributed-systems-design-a-gift-from-santa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.markharris.net.au/blog/2010/02/04/doing-advanced-distributed-systems-design-a-gift-from-santa/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=doing-advanced-distributed-systems-design-a-gift-from-santa</feedburner:origLink></item>
		<item>
		<title>Who’s on First?</title>
		<link>http://feedproxy.google.com/~r/net/FXnX/~3/VBDUELnwxg8/</link>
		<comments>http://www.markharris.net.au/blog/2010/01/30/whos-on-first/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 07:26:26 +0000</pubDate>
		<dc:creator>Mark Harris</dc:creator>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.markharris.net.au/blog/2010/01/30/whos-on-first/</guid>
		<description><![CDATA[That’s the game I find myself playing with Microsoft software names these days, It’s one thing to go from Indigo and Avalon to WCF and WPF but oh those days of simplicity are a far cry from what we have today. Let’s start with Oslo, what original started as the &#34;updated messaging and workflow technologies [...]]]></description>
			<content:encoded><![CDATA[<p>That’s the game I find myself playing with Microsoft software names these days, It’s one thing to go from Indigo and Avalon to WCF and WPF but oh those days of simplicity are a far cry from what we have today. Let’s start with Oslo, what original started as the &quot;updated messaging and workflow technologies in the next version of BizTalk Server and other products&quot; aka Biztalk VNext which was on their SOA site if my memory serves me correct. But what have we today “SQL Server Modeling”. </p>
<p>That’s ok you say we are used to the <a href="http://en.wikipedia.org/wiki/Microsoft_code_names">Microsoft code name</a> to product name shenanigans. Sure but its way more than just changing names and focus or both. This quite often has me having this conversation with myself</p>
<p><strong>Me</strong>: What is Microsoft Distributed Caching product? Velocity?</p>
<p><strong>Myself</strong>: No that’s the old name now its “Windows Server AppFabric” <a href="http://www.markharris.net.au/blog/wp-content/uploads/2010/01/roses.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="roses" border="0" alt="roses" align="right" src="http://www.markharris.net.au/blog/wp-content/uploads/2010/01/roses_thumb.jpg" width="160" height="213" /></a> </p>
<p><strong>Me</strong>: Ok thanks ill download that but what does AppFabric have to do with Caching? And where is the CTP of that application server that came from the “Olso” group? Dublin. </p>
<p><strong>Myself</strong>: Oh you have that already?</p>
<p><strong>Me</strong>: No all I have is that “Windows Server AppFabric”</p>
<p><strong>Myself</strong>: Yes that’s Dublin.</p>
<p><strong>Me</strong>: But I thought that “Windows Server AppFabric” is Velocity</p>
<p><strong>Myself</strong>: Yes it is</p>
<p><strong>Me</strong>: BUT BUT BUT….</p>
<p><strong>Myself</strong>: No Buts It just is.</p>
<p>I hope that this constant cycle of <strike>change</strike> <strike>innovation</strike> <strike>duplication</strike> from Microsoft slows down to a pace that people can keep up with. Maybe even have a sniff of the roses and ensure that it is actually making a difference, and not just causing more noise from Redmond.</p>
<a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F01%2F30%2Fwhos-on-first%2F&amp;linkname=Who%26%238217%3Bs%20on%20First%3F" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F01%2F30%2Fwhos-on-first%2F&amp;linkname=Who%26%238217%3Bs%20on%20First%3F" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F01%2F30%2Fwhos-on-first%2F&amp;linkname=Who%26%238217%3Bs%20on%20First%3F" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F01%2F30%2Fwhos-on-first%2F&amp;linkname=Who%26%238217%3Bs%20on%20First%3F" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F01%2F30%2Fwhos-on-first%2F&amp;linkname=Who%26%238217%3Bs%20on%20First%3F" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F01%2F30%2Fwhos-on-first%2F&amp;linkname=Who%26%238217%3Bs%20on%20First%3F" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F01%2F30%2Fwhos-on-first%2F&amp;linkname=Who%26%238217%3Bs%20on%20First%3F">Share/Save</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/net/FXnX?a=VBDUELnwxg8:NrdbML5bcdA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=VBDUELnwxg8:NrdbML5bcdA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=VBDUELnwxg8:NrdbML5bcdA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=VBDUELnwxg8:NrdbML5bcdA:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=VBDUELnwxg8:NrdbML5bcdA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=VBDUELnwxg8:NrdbML5bcdA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=VBDUELnwxg8:NrdbML5bcdA:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=VBDUELnwxg8:NrdbML5bcdA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=VBDUELnwxg8:NrdbML5bcdA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=VBDUELnwxg8:NrdbML5bcdA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=VBDUELnwxg8:NrdbML5bcdA:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=VBDUELnwxg8:NrdbML5bcdA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=VBDUELnwxg8:NrdbML5bcdA:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/net/FXnX/~4/VBDUELnwxg8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.markharris.net.au/blog/2010/01/30/whos-on-first/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.markharris.net.au/blog/2010/01/30/whos-on-first/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=whos-on-first</feedburner:origLink></item>
		<item>
		<title>Video of Command Query Responsibility Segregation by Udi Dahan</title>
		<link>http://feedproxy.google.com/~r/net/FXnX/~3/yQfKb7tfj0g/</link>
		<comments>http://www.markharris.net.au/blog/2010/01/24/video-of-command-query-responsibility-segregation-by-udi-dahan/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 12:33:46 +0000</pubDate>
		<dc:creator>Mark Harris</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[CQRS]]></category>

		<guid isPermaLink="false">http://www.markharris.net.au/blog/2010/01/24/video-of-command-query-responsibility-segregation-by-udi-dahan/</guid>
		<description><![CDATA[Udi presented his talk on CQRS at the Victoria.Net User Group on the 19th of January in Melbourne, we recorded his presentation.&#160; Hopefully this is of some benefit despite the audio and video not being the greatest. It was a great night that opened many eyes and ears to the best. 
&#160;
 
Command Query Responsibility [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.udidahan.com/">Udi</a> presented his talk on CQRS at the <a href="http://www.victoriadotnet.com.au/vic_index.aspx">Victoria.Net User Group</a> on the 19th of January in Melbourne, we recorded his presentation.&#160; Hopefully this is of some benefit despite the audio and video not being the greatest. It was a great night that opened many eyes and ears to the best. </p>
<p align="center">&#160;</p>
<p> <object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=8944337&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=8944337&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p align="center"><a href="http://vimeo.com/8944337">Command Query Responsibility Segregation &#8211; Udi Dahan</a> from <a href="http://vimeo.com/markmario">Mark Harris</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F01%2F24%2Fvideo-of-command-query-responsibility-segregation-by-udi-dahan%2F&amp;linkname=Video%20of%20Command%20Query%20Responsibility%20Segregation%20by%20Udi%20Dahan" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F01%2F24%2Fvideo-of-command-query-responsibility-segregation-by-udi-dahan%2F&amp;linkname=Video%20of%20Command%20Query%20Responsibility%20Segregation%20by%20Udi%20Dahan" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F01%2F24%2Fvideo-of-command-query-responsibility-segregation-by-udi-dahan%2F&amp;linkname=Video%20of%20Command%20Query%20Responsibility%20Segregation%20by%20Udi%20Dahan" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F01%2F24%2Fvideo-of-command-query-responsibility-segregation-by-udi-dahan%2F&amp;linkname=Video%20of%20Command%20Query%20Responsibility%20Segregation%20by%20Udi%20Dahan" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F01%2F24%2Fvideo-of-command-query-responsibility-segregation-by-udi-dahan%2F&amp;linkname=Video%20of%20Command%20Query%20Responsibility%20Segregation%20by%20Udi%20Dahan" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F01%2F24%2Fvideo-of-command-query-responsibility-segregation-by-udi-dahan%2F&amp;linkname=Video%20of%20Command%20Query%20Responsibility%20Segregation%20by%20Udi%20Dahan" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2010%2F01%2F24%2Fvideo-of-command-query-responsibility-segregation-by-udi-dahan%2F&amp;linkname=Video%20of%20Command%20Query%20Responsibility%20Segregation%20by%20Udi%20Dahan">Share/Save</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/net/FXnX?a=yQfKb7tfj0g:2rl3wL2pnJ4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=yQfKb7tfj0g:2rl3wL2pnJ4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=yQfKb7tfj0g:2rl3wL2pnJ4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=yQfKb7tfj0g:2rl3wL2pnJ4:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=yQfKb7tfj0g:2rl3wL2pnJ4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=yQfKb7tfj0g:2rl3wL2pnJ4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=yQfKb7tfj0g:2rl3wL2pnJ4:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=yQfKb7tfj0g:2rl3wL2pnJ4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=yQfKb7tfj0g:2rl3wL2pnJ4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=yQfKb7tfj0g:2rl3wL2pnJ4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=yQfKb7tfj0g:2rl3wL2pnJ4:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=yQfKb7tfj0g:2rl3wL2pnJ4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=yQfKb7tfj0g:2rl3wL2pnJ4:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/net/FXnX/~4/yQfKb7tfj0g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.markharris.net.au/blog/2010/01/24/video-of-command-query-responsibility-segregation-by-udi-dahan/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.markharris.net.au/blog/2010/01/24/video-of-command-query-responsibility-segregation-by-udi-dahan/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=video-of-command-query-responsibility-segregation-by-udi-dahan</feedburner:origLink></item>
		<item>
		<title>Lessons Learned from building a Linq To Sql Saga Persister</title>
		<link>http://feedproxy.google.com/~r/net/FXnX/~3/q_NvfkWODpE/</link>
		<comments>http://www.markharris.net.au/blog/2009/12/09/lessons-learned-from-building-a-linq-to-sql-saga-persister/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 16:28:15 +0000</pubDate>
		<dc:creator>Mark Harris</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[NServiceBus]]></category>
		<category><![CDATA[Linq To Sql]]></category>
		<category><![CDATA[saga persister]]></category>

		<guid isPermaLink="false">http://www.markharris.net.au/blog/?p=195</guid>
		<description><![CDATA[Simon has released the first version of the Linq To Sql Saga Persister code and the EF 1 Saga Persister in the past couple of days. In fact we started working on the saga persister mid September, so what took doing something like a Saga Persister, a fairly trivial exercise almost 3 months. To be [...]]]></description>
			<content:encoded><![CDATA[<p>Simon has released the first version of the <a href="http://www.simonsegal.net/blog/2009/12/08/nservicebus-linq-to-sql-saga-persister-part-20/">Linq To Sql Saga Persister</a> code and the <a href="http://www.simonsegal.net/blog/2009/12/09/entity-framework-saga-persister-for-nservicebus/">EF 1 Saga Persister</a> in the past couple of days. In fact we started <a href="http://twitter.com/markmario/status/3992828301">working on the saga persister mid September</a>, so what took doing something like a Saga Persister, a fairly trivial exercise almost 3 months. To be fair Simon initially put some of the <a href="http://www.simonsegal.net/blog/2009/09/22/a-linq-to-sql-saga-persister-for-nservicebus/">work on the persister</a> quite quickly. However once we started to use the code in our test with the Manufacturing sample under load it would begin to creak. Seeing as that was a problem we had to switch to using the NHibernate Saga persister for our client to go into production.</p>
<p>The first thing that went through our minds was that we had written the persister wrong, however a persistent Simon continued to work through the issues. Along the way we discovered a few things.</p>
<ol>
<li>NHibernate is faster and therefore able to handle the load better.</li>
<li>Proper Saga Design is important.</li>
</ol>
<h3>NHibernate is faster</h3>
<p>Most of you already know this but the key thing here is that because its faster it fails less therefore the issues that we saw in the development of the persister was difficult to isolate.</p>
<p>In the Manufacturing Sample that comes with NServiceBus start up all the required services and when the partner is ready run it in simulate mode, it does not fail. doing the same thing when using the L2S persister had the same effect. </p>
<p>Once the number of worker threads on the Order Service Host was increased to 4 could use we started to see a whole bunch of errors. From messages not being completed to violation of primary keys and deadlocks. Using the NHibernate persister required us to increase the workers to 6 or 7 you would start to notice similar errors.This leads me to the next item.</p>
<h3>Proper Saga Design is Important</h3>
<p>If your not sure about what a Saga is please <a href="http://sourceforge.net/apps/mediawiki/nservicebus/index.php?title=Sagas">read the NServiceBus wiki</a>. When considering how you build a system&#160; though that goes into how you would like to handle long running transactions is important. Knowing how many transactions per second. What are the SLA’s? My rule of thumb the more i think about it is that a Saga message that starts the saga should be unique any subsequent messages that are part of that saga should be dealt with a more explicit message handler. So you have a CreateOrderMessage that starts a saga and subsequent messages are handled by UpdateOrderMessages for changes to the order, with CancelOrderMessages and AuthorizeOrderMessages being explicit to the saga. </p>
<p>In my opinion doing so produces both a simpler and more explicit design of your long lived transaction. This however is now going down the path of a different post one that warrants a post of it own.</p>
<p>The <a href="http://graysmatter.codivation.com/post/How-I-Am-Becoming-A-Better-Developer-Part-1-Of-Infinity.aspx">Benefits of Reading code</a> became clear the deeper we went through the NServiceBus code base, the more you understand how each piece interacts with the other to provide a great framework. Despite all the hurdles L2S provided it was worth the effort. What must be said for NServiceBus is that it is highly extensible already evidenced by its existing OOB support for 4 IOC frameworks, now 3 ORM’s and in the future with version 2.1 it will support a whole raft of Queued Transports.</p>
<a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F12%2F09%2Flessons-learned-from-building-a-linq-to-sql-saga-persister%2F&amp;linkname=Lessons%20Learned%20from%20building%20a%20Linq%20To%20Sql%20Saga%20Persister" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F12%2F09%2Flessons-learned-from-building-a-linq-to-sql-saga-persister%2F&amp;linkname=Lessons%20Learned%20from%20building%20a%20Linq%20To%20Sql%20Saga%20Persister" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F12%2F09%2Flessons-learned-from-building-a-linq-to-sql-saga-persister%2F&amp;linkname=Lessons%20Learned%20from%20building%20a%20Linq%20To%20Sql%20Saga%20Persister" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F12%2F09%2Flessons-learned-from-building-a-linq-to-sql-saga-persister%2F&amp;linkname=Lessons%20Learned%20from%20building%20a%20Linq%20To%20Sql%20Saga%20Persister" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F12%2F09%2Flessons-learned-from-building-a-linq-to-sql-saga-persister%2F&amp;linkname=Lessons%20Learned%20from%20building%20a%20Linq%20To%20Sql%20Saga%20Persister" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F12%2F09%2Flessons-learned-from-building-a-linq-to-sql-saga-persister%2F&amp;linkname=Lessons%20Learned%20from%20building%20a%20Linq%20To%20Sql%20Saga%20Persister" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F12%2F09%2Flessons-learned-from-building-a-linq-to-sql-saga-persister%2F&amp;linkname=Lessons%20Learned%20from%20building%20a%20Linq%20To%20Sql%20Saga%20Persister">Share/Save</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/net/FXnX?a=q_NvfkWODpE:xNHNXWbUJV0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=q_NvfkWODpE:xNHNXWbUJV0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=q_NvfkWODpE:xNHNXWbUJV0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=q_NvfkWODpE:xNHNXWbUJV0:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=q_NvfkWODpE:xNHNXWbUJV0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=q_NvfkWODpE:xNHNXWbUJV0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=q_NvfkWODpE:xNHNXWbUJV0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=q_NvfkWODpE:xNHNXWbUJV0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=q_NvfkWODpE:xNHNXWbUJV0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=q_NvfkWODpE:xNHNXWbUJV0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=q_NvfkWODpE:xNHNXWbUJV0:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=q_NvfkWODpE:xNHNXWbUJV0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=q_NvfkWODpE:xNHNXWbUJV0:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/net/FXnX/~4/q_NvfkWODpE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.markharris.net.au/blog/2009/12/09/lessons-learned-from-building-a-linq-to-sql-saga-persister/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.markharris.net.au/blog/2009/12/09/lessons-learned-from-building-a-linq-to-sql-saga-persister/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=lessons-learned-from-building-a-linq-to-sql-saga-persister</feedburner:origLink></item>
		<item>
		<title>Service Broker – Some thoughts post hoc</title>
		<link>http://feedproxy.google.com/~r/net/FXnX/~3/YjAWrwrlaKY/</link>
		<comments>http://www.markharris.net.au/blog/2009/12/01/service-broker-some-thoughts-post-hoc/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 15:22:24 +0000</pubDate>
		<dc:creator>Mark Harris</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[NServiceBus]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[servicebroker]]></category>

		<guid isPermaLink="false">http://www.markharris.net.au/blog/?p=181</guid>
		<description><![CDATA[ 
This post has been sitting in my drafts for a while. After my day today i felt that it was best that i put my thoughts about service broker down.    In a project that i worked on about 2 years ago Service Broker was used as part of the system to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.markharris.net.au/blog/wp-content/uploads/2009/12/servicebroker.gif"><img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="service broker" border="0" alt="sql service broker" align="left" src="http://www.markharris.net.au/blog/wp-content/uploads/2009/12/servicebroker_thumb.gif" width="178" height="167" /></a> </p>
<p>This post has been sitting in my drafts for a while. After my day today i felt that it was best that i put my thoughts about service broker down.    <br />In a project that i worked on about 2 years ago Service Broker was used as part of the system to perform data validation.&#160; If success was measured by the amount of time that a system has been in production without major issues then i can say that it was successful. </p>
<p>But if a system was to be judged by how much of a pain it is to maintain then l must say that its was not a <strike>glowing</strike> success. Below is a list of things that i found as good or bad about it. </p>
<p><strong>&#160;</strong></p>
<p><strong>Bad things</strong></p>
<ol>
<li>Limited information on the internet </li>
<li>Testing is extremely hard (compromises everywhere) </li>
<li>Troubleshooting is a pain </li>
<li>It could stop working and you may never know, (if using a fire and forget mechanism) </li>
<li>Poison messages disable queues (would have been nicer if it moved the message to a error queue) </li>
</ol>
<p><strong>Good things</strong></p>
<ol>
<li>Its Asynchronous </li>
<li>Its Asynchronous </li>
<li>Its Asynchronous </li>
</ol>
<p>Yes this list is one sided but true. The question that is important though is</p>
<p><strong>Would i use Service Broker again?</strong></p>
<p>The answer to that question is strangely YES. Only in very specific circumstances where system is ok with not having some data loss because of queue being disabled</p>
<p><strong>What would I use instead?</strong></p>
<p><strong><a href="http://www.nservicebus.com/" rel="tag">NServiceBus</a> </strong>of course. It provides an answer to all the negatives of service broker and is still asynchronous. </p>
<a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F12%2F01%2Fservice-broker-some-thoughts-post-hoc%2F&amp;linkname=Service%20Broker%20%26%238211%3B%20Some%20thoughts%20post%20hoc" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F12%2F01%2Fservice-broker-some-thoughts-post-hoc%2F&amp;linkname=Service%20Broker%20%26%238211%3B%20Some%20thoughts%20post%20hoc" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F12%2F01%2Fservice-broker-some-thoughts-post-hoc%2F&amp;linkname=Service%20Broker%20%26%238211%3B%20Some%20thoughts%20post%20hoc" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F12%2F01%2Fservice-broker-some-thoughts-post-hoc%2F&amp;linkname=Service%20Broker%20%26%238211%3B%20Some%20thoughts%20post%20hoc" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F12%2F01%2Fservice-broker-some-thoughts-post-hoc%2F&amp;linkname=Service%20Broker%20%26%238211%3B%20Some%20thoughts%20post%20hoc" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F12%2F01%2Fservice-broker-some-thoughts-post-hoc%2F&amp;linkname=Service%20Broker%20%26%238211%3B%20Some%20thoughts%20post%20hoc" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F12%2F01%2Fservice-broker-some-thoughts-post-hoc%2F&amp;linkname=Service%20Broker%20%26%238211%3B%20Some%20thoughts%20post%20hoc">Share/Save</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/net/FXnX?a=YjAWrwrlaKY:8x64b9hgjbw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=YjAWrwrlaKY:8x64b9hgjbw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=YjAWrwrlaKY:8x64b9hgjbw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=YjAWrwrlaKY:8x64b9hgjbw:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=YjAWrwrlaKY:8x64b9hgjbw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=YjAWrwrlaKY:8x64b9hgjbw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=YjAWrwrlaKY:8x64b9hgjbw:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=YjAWrwrlaKY:8x64b9hgjbw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=YjAWrwrlaKY:8x64b9hgjbw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=YjAWrwrlaKY:8x64b9hgjbw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=YjAWrwrlaKY:8x64b9hgjbw:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=YjAWrwrlaKY:8x64b9hgjbw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=YjAWrwrlaKY:8x64b9hgjbw:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/net/FXnX/~4/YjAWrwrlaKY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.markharris.net.au/blog/2009/12/01/service-broker-some-thoughts-post-hoc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.markharris.net.au/blog/2009/12/01/service-broker-some-thoughts-post-hoc/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=service-broker-some-thoughts-post-hoc</feedburner:origLink></item>
		<item>
		<title>Running Subversion on your Windows Home Server</title>
		<link>http://feedproxy.google.com/~r/net/FXnX/~3/zs4lLOZAui4/</link>
		<comments>http://www.markharris.net.au/blog/2009/10/22/running-subversion-on-your-windows-home-server/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 21:43:36 +0000</pubDate>
		<dc:creator>Mark Harris</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[windows home server]]></category>

		<guid isPermaLink="false">http://www.markharris.net.au/blog/?p=157</guid>
		<description><![CDATA[
&#160;
First off i know there should be no reason for me to do this as there are hosting options galore, but sometimes its just easier having the code running in your LAN, so with that in mind i remembered reading that Scott Hanselman wrote about his experience setting up VisualSvn on WHS.&#160; 
So i decided [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.markharris.net.au/blog/wp-content/uploads/2009/10/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.markharris.net.au/blog/wp-content/uploads/2009/10/image_thumb.png" width="180" height="129" /></a></p>
<p>&#160;</p>
<p>First off i know there should be no reason for me to do this as there are hosting options galore, but sometimes its just easier having the code running in your LAN, so with that in mind i remembered reading that Scott Hanselman wrote about his experience <a href="http://www.hanselman.com/blog/RunningASubversionServerOffYourWindowsHomeServer.aspx">setting up VisualSvn on WHS</a>.&#160; </p>
<p>So i decided to follow his work and rather than reinvent the wheel, however as i went through the process i found that a couple of things needed changing to make this whole processes much easier.</p>
<ol>
<li><a href="http://www.markharris.net.au/blog/wp-content/uploads/2009/10/image1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" border="0" alt="image" align="right" src="http://www.markharris.net.au/blog/wp-content/uploads/2009/10/image_thumb1.png" width="222" height="87" /></a>Setup a new share on your home server using the Windows Home Server Console. The recommended approach is to Uncheck the Enable Folder Duplication Check Box, though i have yet to experience any of the <a href="http://www.codeandcoffee.com/2008/05/windows-home-server-as-a-subversion-server/">locking issues described here</a></li>
<li>Log on to your Windows Home Server using Remote Desktop</li>
<li>Give the Network Service access to the share as well as permissions on the folder to Read/Write/Modify files as required. For a detailed walkthrough on what and how to modify the permissions are available in the <a href="http://www.visualsvn.com/support/topic/00022/">VisualSvn Knowledge base article</a> for Storing Repositories on a Network Share.
<p><strong>NOTE</strong>: it is recommended that you create a special user that has Run As Service Account as well as the permissions to the folder and not use the Network Service.</li>
<li>Go to <a href="http://www.visualsvn.com/server/">VisualSVN</a> Download and begin installation</li>
<li>When prompted by the installation for a location for the share provide it with the share location that you have just setup.</li>
<li>Set choose port 8443 for your port and complete the installation. If the installer gives you any warnings its likely that you have not given the Network Service its required permissions.</li>
<li>Setup up port forwarding on your router. and you should then be able to access the Visualsvn from your Home Server url either http://server:8443/ if your inside your network or http://my-dynamic-dns.homeserver.com:8443/</li>
</ol>
<p>The interesting thing about this is that while this is one of about 6 different ways i could count to do this installation while i found this the most straight forward for me YMMV.</p>
<a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F10%2F22%2Frunning-subversion-on-your-windows-home-server%2F&amp;linkname=Running%20Subversion%20on%20your%20Windows%20Home%20Server" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F10%2F22%2Frunning-subversion-on-your-windows-home-server%2F&amp;linkname=Running%20Subversion%20on%20your%20Windows%20Home%20Server" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F10%2F22%2Frunning-subversion-on-your-windows-home-server%2F&amp;linkname=Running%20Subversion%20on%20your%20Windows%20Home%20Server" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F10%2F22%2Frunning-subversion-on-your-windows-home-server%2F&amp;linkname=Running%20Subversion%20on%20your%20Windows%20Home%20Server" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F10%2F22%2Frunning-subversion-on-your-windows-home-server%2F&amp;linkname=Running%20Subversion%20on%20your%20Windows%20Home%20Server" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F10%2F22%2Frunning-subversion-on-your-windows-home-server%2F&amp;linkname=Running%20Subversion%20on%20your%20Windows%20Home%20Server" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F10%2F22%2Frunning-subversion-on-your-windows-home-server%2F&amp;linkname=Running%20Subversion%20on%20your%20Windows%20Home%20Server">Share/Save</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/net/FXnX?a=zs4lLOZAui4:hdTflDBwdJA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=zs4lLOZAui4:hdTflDBwdJA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=zs4lLOZAui4:hdTflDBwdJA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=zs4lLOZAui4:hdTflDBwdJA:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=zs4lLOZAui4:hdTflDBwdJA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=zs4lLOZAui4:hdTflDBwdJA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=zs4lLOZAui4:hdTflDBwdJA:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=zs4lLOZAui4:hdTflDBwdJA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=zs4lLOZAui4:hdTflDBwdJA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=zs4lLOZAui4:hdTflDBwdJA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=zs4lLOZAui4:hdTflDBwdJA:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=zs4lLOZAui4:hdTflDBwdJA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=zs4lLOZAui4:hdTflDBwdJA:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/net/FXnX/~4/zs4lLOZAui4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.markharris.net.au/blog/2009/10/22/running-subversion-on-your-windows-home-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.markharris.net.au/blog/2009/10/22/running-subversion-on-your-windows-home-server/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=running-subversion-on-your-windows-home-server</feedburner:origLink></item>
		<item>
		<title>Would you hire a half interested developer?</title>
		<link>http://feedproxy.google.com/~r/net/FXnX/~3/uDvkwfQi0UQ/</link>
		<comments>http://www.markharris.net.au/blog/2009/10/09/would-you-hire-a-half-intersted-developer/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 09:55:26 +0000</pubDate>
		<dc:creator>Mark Harris</dc:creator>
				<category><![CDATA[Career]]></category>

		<guid isPermaLink="false">http://www.markharris.net.au/blog/?p=134</guid>
		<description><![CDATA[Jeremy Miller tweeted this today which got me thinking. Jeremy&#8217;s comment was that being part of a small team mean that it mattered more. However i think that regardless of the team size or whether your a developer, a salesman, a business owner, you want an employee that will be committed to moving the business [...]]]></description>
			<content:encoded><![CDATA[<p>Jeremy Miller <a href="http://twitter.com/jeremydmiller/status/4720476971">tweeted this</a> today which got me thinking. Jeremy&#8217;s comment was that being part of a small team mean that it mattered more. However i think that regardless of the team size or whether your a developer, a salesman, a business owner, you want an employee that will be committed to moving the business forward. A half interested developer will be bad for the entire team regardless of the size. For that matter any person not moving in the same direction of that team is not worth the hire, while just like Jeremy said it might be harsh but its just my opinion.   <a rel="attachment wp-att-138" href="http://www.markharris.net.au/blog/2009/10/09/would-you-hire-a-half-intersted-developer/half-interested/"><img class="size-medium wp-image-138 alignright" title="half-interested" src="http://www.markharris.net.au/blog/wp-content/uploads/2009/10/half-interested-300x255.jpg" alt="half interested " width="300" height="255" /></a></p>
<p>Regardless of what the job is you want to find the most motivated individual. Sales people for example are motivated by great commission schemes. Interested Developers are generally motivated by good  jobs and a great environment. Finding either a good job or a motivated developer is the hard bit. Simon Segal posted a while back about <a href="http://www.simonsegal.net/blog/2008/07/20/smart-developers-are-not-semi-invested-developers/">&#8220;Semi Invested Developers&#8221;</a> and some ways to better understand the individual during the hiring process. If a developer was to have read his post in preparation for an interview and used some canned answers for those questions and managed to get hired he still shows more interest that one who has not bothered to take that step.</p>
<p>On a personal note I have reduced the number of hours I spent in front a computer since having my daughter (a time and energy vampire), however I have not lost my passion or motivation to better myself, and be a more interested developer. I find my self picking and choosing what tasks/technologies I will devote my attention to much more wisely, a skill that is very hard to acquire.</p>
<p>Just out of curiosity i created this poll to find out what people thought about hiring a half interested person /developer.</p>
<p><script src="http://twtpoll.com/js/badge.js" type="text/javascript"></script> <script src="http://twtpoll.com/badge/?twt=ipz8kv&amp;b=1" type="text/javascript"></script></p>
<a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F10%2F09%2Fwould-you-hire-a-half-intersted-developer%2F&amp;linkname=Would%20you%20hire%20a%20half%20interested%20developer%3F" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F10%2F09%2Fwould-you-hire-a-half-intersted-developer%2F&amp;linkname=Would%20you%20hire%20a%20half%20interested%20developer%3F" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F10%2F09%2Fwould-you-hire-a-half-intersted-developer%2F&amp;linkname=Would%20you%20hire%20a%20half%20interested%20developer%3F" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F10%2F09%2Fwould-you-hire-a-half-intersted-developer%2F&amp;linkname=Would%20you%20hire%20a%20half%20interested%20developer%3F" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F10%2F09%2Fwould-you-hire-a-half-intersted-developer%2F&amp;linkname=Would%20you%20hire%20a%20half%20interested%20developer%3F" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F10%2F09%2Fwould-you-hire-a-half-intersted-developer%2F&amp;linkname=Would%20you%20hire%20a%20half%20interested%20developer%3F" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F10%2F09%2Fwould-you-hire-a-half-intersted-developer%2F&amp;linkname=Would%20you%20hire%20a%20half%20interested%20developer%3F">Share/Save</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/net/FXnX?a=uDvkwfQi0UQ:xd1yNMeyAb0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=uDvkwfQi0UQ:xd1yNMeyAb0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=uDvkwfQi0UQ:xd1yNMeyAb0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=uDvkwfQi0UQ:xd1yNMeyAb0:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=uDvkwfQi0UQ:xd1yNMeyAb0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=uDvkwfQi0UQ:xd1yNMeyAb0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=uDvkwfQi0UQ:xd1yNMeyAb0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=uDvkwfQi0UQ:xd1yNMeyAb0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=uDvkwfQi0UQ:xd1yNMeyAb0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=uDvkwfQi0UQ:xd1yNMeyAb0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=uDvkwfQi0UQ:xd1yNMeyAb0:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=uDvkwfQi0UQ:xd1yNMeyAb0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=uDvkwfQi0UQ:xd1yNMeyAb0:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/net/FXnX/~4/uDvkwfQi0UQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.markharris.net.au/blog/2009/10/09/would-you-hire-a-half-intersted-developer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.markharris.net.au/blog/2009/10/09/would-you-hire-a-half-intersted-developer/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=would-you-hire-a-half-intersted-developer</feedburner:origLink></item>
		<item>
		<title>Testing Message Handlers with NServiceBus</title>
		<link>http://feedproxy.google.com/~r/net/FXnX/~3/KFaBu46ecQ0/</link>
		<comments>http://www.markharris.net.au/blog/2009/09/27/testing-message-handlers-with-nservicebus/#comments</comments>
		<pubDate>Sun, 27 Sep 2009 10:12:00 +0000</pubDate>
		<dc:creator>Mark Harris</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[NServiceBus]]></category>
		<category><![CDATA[Unit Testing]]></category>
		<category><![CDATA[Rhino Mocks]]></category>

		<guid isPermaLink="false">http://www.markharris.net.au/blog/?p=110</guid>
		<description><![CDATA[One of the great things that NServiceBus ships with is a dll called “NServiceBus.Testing” which provides us with the ability to easily test your sagas. This enables us to move forward with greater confidence in knowing that the code that we have written will function as expected when we move the code into integration testing [...]]]></description>
			<content:encoded><![CDATA[<p>One of the great things that <a href="http://www.nservicebus.com/" rel="tag">NServiceBus</a> ships with is a dll called “NServiceBus.Testing” which provides us with the ability to easily test your <a href="http://www.udidahan.com/2009/04/20/saga-persistence-and-event-driven-architectures/" target="_blank">sagas</a>. This enables us to move forward with greater confidence in knowing that the code that we have written will function as expected when we move the code into integration testing and then production.&#160; Most of what i talk about here is in direct reference the <a href="http://www.udidahan.com/2009/02/07/nservicebus-19/" target="_blank">1.9 release of NServiceBus</a>. If you have not seen how Saga’s are unit tested in NServiceBus have a read of <a href="http://tech.groups.yahoo.com/group/nservicebus/message/208" target="_blank">Udi’s post on the forum</a>. This post however is about how to test a Plain old Message Handler.</p>
<p>Let us being with looking at a sample handler.</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; height: 234px; max-height: 250px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> FileProcessMessageHandler:IMessageHandler&lt;ProcessFileMessage&gt;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span> {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span>     <span style="color: #0000ff">public</span> IBus Bus { get; set; }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span>     <span style="color: #0000ff">public</span> IFileProcessor FileProcessor {get;set;}</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span>     <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Handle(ProcessFileMessage message)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span>         <span style="color: #0000ff">if</span> (FileProcessor.Run(message.FileIdentfier,message.FileSystemLocation))</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span>         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9">   9:</span>             var msg = Bus.CreateInstance&lt;FileProcessedMessage&gt;(m =&gt; {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10">  10:</span>                                  m.FileIdentifier = message.FileIdentfier; });</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11">  11:</span>             Bus.Publish(msg);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum12">  12:</span>         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum13">  13:</span>         <span style="color: #0000ff">else</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum14">  14:</span>         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum15">  15:</span>             Bus.Publish&lt;UnknownFileTypeMessage&gt;(m =&gt; { </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum16">  16:</span>                                 m.FileIdentifer = message.FileIdentfier; });</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum17">  17:</span>         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum18">  18:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum19">  19:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p>This code in and of itself is highly testable. We have two interfaces that are injected into the class, excellent candidates for a mock. However when i first started down this path my first inclination was to use a manual mock, before moving on to trying to use Moq, however after spending time the fluent saga testing API in NServiceBus I realized that it was what was needed in this situation a MockBus.</p>
<p>MockBus is essentially the same as what is in the NServiceBus.Testing library. However because that version is geared towards testing sagas, it required changing the way the Saga class was created, and to allow for creating a version that would work with message handler. The new structure looks like the class diagram below.</p>
<p>&#160;</p>
<p><a href="http://www.markharris.net.au/blog/wp-content/uploads/2009/09/NServiceBusTestingClassDiagram.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="NServiceBus Testing Class Diagram" border="0" alt="NServiceBus Testing Class Diagram" src="http://www.markharris.net.au/blog/wp-content/uploads/2009/09/NServiceBusTestingClassDiagram_thumb.png" width="463" height="398" /></a></p>
<p>&#160;</p>
<p>What Changed</p>
<ol>
<li>The Saga class has become the MockBus class and no longer has the static method called Test() which created the Saga instance.</li>
<li>The MockBusForSaga has the method CreateInstance&lt;T&gt; which replaces the Test() method in the old Saga class.</li>
<li>Introduced a MockBusForMessageHandler which has a CreateInstance&lt;T,TK&gt;() method that creates the message handler.</li>
</ol>
<p>Having this structure now enables us to write our tests for our message handlers very simply in a fashion that does not require to understand Rhino Mocks, though having a understanding of the errors you get from the mock bus is important as all the messages that are bubbled out are Rhino Mock Messages.</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> [Test]</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> when_file_processor_succeds_message_handler_will_publish_a_file_processed_message()</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span> {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span>     FileProcessMessageHandler msgHandler;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span>     var mock_bus = MockBusForMessageHandler.CreateInstance</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span>                             &lt;FileProcessMessageHandler,ProcessFileMessage&gt;(<span style="color: #0000ff">out</span> msgHandler);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span>     var fileID = Guid.NewGuid();</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span>     msgHandler.FileProcessor = SetupAndReturnFileProcessor(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9">   9:</span>     mock_bus.ExpectPublish&lt;FileProcessedMessage&gt;(d =&gt; d.FileIdentifier == fileID)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10">  10:</span>         .When(() =&gt; msgHandler.Handle(CreateProcessFileRequest(fileID)));</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11">  11:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p>&#160;</p>
<p>Lets have a look&#160; when make a call to CreateInstance&lt;FileProcessMessageHandler,ProcessFileMessage&gt;(out msgHandler)</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> MockBusForMessageHandler CreateInstance&lt;T, TK&gt;(<span style="color: #0000ff">out</span> T handler)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span> <span style="color: #0000ff">where</span> TK : IMessage</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span> <span style="color: #0000ff">where</span> T : IMessageHandler&lt;TK&gt;, <span style="color: #0000ff">new</span>()</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span> {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span>     handler = (T) Activator.CreateInstance(<span style="color: #0000ff">typeof</span> (T));</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span>     var mocks = <span style="color: #0000ff">new</span> MockRepository();</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span>     var bus = mocks.DynamicMock&lt;IBus&gt;();</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span>     <span style="color: #0000ff">try</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9">   9:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10">  10:</span>         <span style="color: #0000ff">typeof</span> (T).GetProperty(“Bus”, BindingFlags.Instance | BindingFlags.Public)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11">  11:</span>             .SetValue(handler, bus, <span style="color: #0000ff">null</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum12">  12:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum13">  13:</span>     <span style="color: #0000ff">catch</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum14">  14:</span>     {<span style="color: #008000">/**swallow if they dont have a Bus defined in the class**/</span>}</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum15">  15:</span>     List&lt;Type&gt; typesToMap;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum16">  16:</span>     MessageMapper mapper = GetMapperAndInitialize(<span style="color: #0000ff">out</span> typesToMap);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum17">  17:</span>     <span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> MockBusForMessageHandler(mocks, bus, mapper, typesToMap);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum18">  18:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p>The beauty in this code is all hidden away in the MockBus (aka NServiceBus.Testing.Saga) thank you <a href="http://www.udidahan.com">Udi</a> for this,</p>
<p>The bus is instantiated when the object is created however no expectations are recorded until the When() method is called in the test just before the delegate is run. Once the delegate is run you will get the callbacks to the ExpectPublish where you can assert that not only did you get the correct type of message but the contents as well.</p>
<p>The code for this is available on the <a href="http://www.markharris.net.au/blog/downloads/" rel="tag" target="_blank">downloads page</a> or go to it <a href="http://www.markharris.net.au/blog/downloads/?did=1" target="_blank">NServiceBus.Extensions.Testing download here</a></p>
<a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F09%2F27%2Ftesting-message-handlers-with-nservicebus%2F&amp;linkname=Testing%20Message%20Handlers%20with%20NServiceBus" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F09%2F27%2Ftesting-message-handlers-with-nservicebus%2F&amp;linkname=Testing%20Message%20Handlers%20with%20NServiceBus" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F09%2F27%2Ftesting-message-handlers-with-nservicebus%2F&amp;linkname=Testing%20Message%20Handlers%20with%20NServiceBus" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F09%2F27%2Ftesting-message-handlers-with-nservicebus%2F&amp;linkname=Testing%20Message%20Handlers%20with%20NServiceBus" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F09%2F27%2Ftesting-message-handlers-with-nservicebus%2F&amp;linkname=Testing%20Message%20Handlers%20with%20NServiceBus" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F09%2F27%2Ftesting-message-handlers-with-nservicebus%2F&amp;linkname=Testing%20Message%20Handlers%20with%20NServiceBus" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.markharris.net.au/blog/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.markharris.net.au%2Fblog%2F2009%2F09%2F27%2Ftesting-message-handlers-with-nservicebus%2F&amp;linkname=Testing%20Message%20Handlers%20with%20NServiceBus">Share/Save</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/net/FXnX?a=KFaBu46ecQ0:c3NcapTNqCw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=KFaBu46ecQ0:c3NcapTNqCw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=KFaBu46ecQ0:c3NcapTNqCw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=KFaBu46ecQ0:c3NcapTNqCw:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=KFaBu46ecQ0:c3NcapTNqCw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=KFaBu46ecQ0:c3NcapTNqCw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=KFaBu46ecQ0:c3NcapTNqCw:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=KFaBu46ecQ0:c3NcapTNqCw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=KFaBu46ecQ0:c3NcapTNqCw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=KFaBu46ecQ0:c3NcapTNqCw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=KFaBu46ecQ0:c3NcapTNqCw:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/net/FXnX?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/net/FXnX?a=KFaBu46ecQ0:c3NcapTNqCw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/net/FXnX?i=KFaBu46ecQ0:c3NcapTNqCw:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/net/FXnX/~4/KFaBu46ecQ0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.markharris.net.au/blog/2009/09/27/testing-message-handlers-with-nservicebus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.markharris.net.au/blog/2009/09/27/testing-message-handlers-with-nservicebus/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=testing-message-handlers-with-nservicebus</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 0.775 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-03-13 21:50:56 -->
