<?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:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Development Diaries</title><link>http://blog.the-dargans.co.uk/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/DevelopmentDiaries" /><description>My blog on .net 2/.net 3 asp.net sql and all sorts of other goodies!</description><language>en</language><managingEditor>noreply@blogger.com (Ross Dargan)</managingEditor><lastBuildDate>Fri, 12 Feb 2010 16:57:25 PST</lastBuildDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">114</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">25</openSearch:itemsPerPage><feedburner:info uri="developmentdiaries" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-nc-sa/2.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><feedburner:emailServiceId>DevelopmentDiaries</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FDevelopmentDiaries" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FDevelopmentDiaries" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FDevelopmentDiaries" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/DevelopmentDiaries" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FDevelopmentDiaries" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FDevelopmentDiaries" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FDevelopmentDiaries" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:browserFriendly>Be sure to check in at the site (http://blog.the-dargans.co.uk) and leave a comment!</feedburner:browserFriendly><item><title>Multiple monitors &amp; windows 7</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/ELpCvqRST0g/multiple-monitors-windows-7.html</link><category>Tips</category><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Tue, 13 Oct 2009 08:56:00 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-7558551622658950158</guid><description>Windows 7 has a great new feature called "aero snap"  that lets you drag a window to the left or right of the screen and have it resize to that position (see here for a video of this &lt;a href="http://lifehacker.com/5077728/snap-any-window-to-half-the-screen-size-in-windows-7"&gt;http://lifehacker.com/5077728/snap-any-window-to-half-the-screen-size-in-windows-7&lt;/a&gt;). &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is great feature except if you have multiple monitors. Areo Snap won't snap correctly to the part of the screen that goes across your monitors.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can work round this by holding down the windows key and pressing the arrow key for the direction you would like to snap in (e.g. if your window is on monitor 1 then press the start key and right and will will snap to the right part of monitor 1)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Perfect! &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;P.S. Also don't forget you can press the start key up to maximize, down to minimize and you can use the number keys to select items from the start bar to maximize them (or bring them to the foreground)&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-7558551622658950158?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Z_6Ib9pzVif3bQ_BOpmDLg4VvCQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z_6Ib9pzVif3bQ_BOpmDLg4VvCQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Z_6Ib9pzVif3bQ_BOpmDLg4VvCQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z_6Ib9pzVif3bQ_BOpmDLg4VvCQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=ELpCvqRST0g:nDnLQdp1exk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=ELpCvqRST0g:nDnLQdp1exk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=ELpCvqRST0g:nDnLQdp1exk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=ELpCvqRST0g:nDnLQdp1exk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=ELpCvqRST0g:nDnLQdp1exk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/ELpCvqRST0g" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-13T16:56:00.781+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2009/10/multiple-monitors-windows-7.html</feedburner:origLink></item><item><title>jQuery and asp.net</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/7w-O444aenE/jquery-and-aspnet.html</link><category>Javascript</category><category>jQuery</category><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Thu, 01 Oct 2009 07:53:16 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-8351272774109222744</guid><description>&lt;p class="MsoNormal"&gt;There are many ways to get asp.net control values from javascript. Here are a couple of ways with pro’s/cons&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Normal Javascript:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;document.getElementById(&lt;span style="color:maroon"&gt;'ctl00_ContentPlaceHolder1_TextBox1'&lt;/span&gt;).value&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;This is massivly hard coded and bad. If you change the content place holder, or refactor this into a user control this will no longer work. But this is quick.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;document.getElementById(&lt;span style="color:maroon"&gt;'&lt;%=TextBox1.ClientID %&gt;'&lt;/span&gt;).value&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;This is less hard coded which is good, but the code can be a bit tricky to read.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;With jQuery:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;$(&lt;span style="color:maroon"&gt;'#ctl00_ContentPlaceHolder1_TextBox1'&lt;/span&gt;)[0].value&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Again, just as bad as the first normal Javascript example&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;$(&lt;span style="color:maroon"&gt;'#&lt;%=TextBox1.ClientID %&gt;'&lt;/span&gt;)[0].value&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;This is ok compared to the javascript version&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;$(&lt;span style="color:maroon"&gt;'input[id$=TextBox1]'&lt;/span&gt;)[0].value&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;This is probably my favorite method. This tells jquery to search for an input where the id ends with TextBox1 – be careful you have no other TextBox1 ids on the page!&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Note the array indexer. This is because jquery returns an array of all the items it finds. This means if you have a grid with 12 rows you can access all of the textbox1’s using &lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;$(&lt;span style="color:maroon"&gt;'input[id$=TextBox1]'&lt;/span&gt;)[0].value -&gt; $(&lt;span style="color:maroon"&gt;'input[id$=TextBox1]'&lt;/span&gt;)[12].value&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Now you are probably asking why would you just use the first javascript example. This is reasonable for a text box but say you are using a drop down list – which looks better:&lt;/p&gt;  &lt;p class="MsoNormal" style="text-autospace:none"&gt;&lt;span style="font-size:10.0pt; font-family:&amp;quot;Courier New&amp;quot;"&gt;    &lt;span style="color:blue"&gt;var&lt;/span&gt; CustomerInputbox = document.getElementById(&lt;span style="color:maroon"&gt;'&lt;%=ddlCustomer.ClientID %&gt;'&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;    &lt;span style="color:blue"&gt;var&lt;/span&gt; CustomerID = CustomerInputbox.options[CustomerInputbox.selectedIndex].value;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;or&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;    &lt;span style="color:blue"&gt;var&lt;/span&gt; CustomerID = $(&lt;span style="color:maroon"&gt;'select[id$=ddlCustomer] option:selected'&lt;/span&gt;)[0].value&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;That is all.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Ross&lt;/p&gt;  &lt;p class="MsoNormal"&gt;P.S. Learn to love jQuery, resistance is futile.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-8351272774109222744?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VcA8lgTBk3-iXHWy0Skt-_BzU3g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VcA8lgTBk3-iXHWy0Skt-_BzU3g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VcA8lgTBk3-iXHWy0Skt-_BzU3g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VcA8lgTBk3-iXHWy0Skt-_BzU3g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=7w-O444aenE:C5KylRWykFo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=7w-O444aenE:C5KylRWykFo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=7w-O444aenE:C5KylRWykFo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=7w-O444aenE:C5KylRWykFo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=7w-O444aenE:C5KylRWykFo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/7w-O444aenE" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-01T15:53:16.727+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2009/10/jquery-and-aspnet.html</feedburner:origLink></item><item><title>What don't you know?</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/kD7Bb4PRE7U/what-dont-you-know.html</link><category>Waterstons</category><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Wed, 20 May 2009 01:32:18 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-8194456639227923376</guid><description>As part of the review process at Waterstons we have to set objectives to try and achieve throughout the coming year. I want to orientate mine around stuff I didn't know but wanted to know - here is my list:-&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;Large scale architecture &amp;amp; design: &lt;/b&gt;Probably some kind of training course&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;Cloud Computing&lt;/b&gt;: Microsoft have a beta product called Asure which could offer us the ability to produce some very innovative and scalable solutions.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;Microsoft enterprise library application blocks&lt;/b&gt;: these include code to make the following easier (and best practice): Caching, Cryptography, data access, logging and security. &lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;Code generation:&lt;/b&gt; Learn more about the code generation techniques we are using&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;Sql&lt;/b&gt;: My sql skills are purely self taught and there are loads of advanced techniques I just don’t know (not really sure how I would self learn this, I do know I have very little knowledge in SSIS).&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;Visual Studio 2010 &amp;amp; .net 4.0:&lt;/b&gt; This will be with us soon and I couldn’t really tell you what we will be getting (the beta is out now) &lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;ADO.Net data services&lt;/b&gt;: a colleague sent an email around about these – I think they could be quite a different way for us to consume sql information.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;BI tools&lt;/b&gt;: I know the theory behind BI but not the tools &lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;Test Driven Development&lt;/b&gt;: The tools could be useful, but I’m really not sold on this&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;ASP.Net Routing&lt;/b&gt;: This technology allows us to create .net web sites which are search engine optimised (SEO) &lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;ASP.NET MVC&lt;/b&gt;: This is a different way of developing web applications that is gaining a lot of momentum – could easily become industry standard and Microsoft are putting a lot of money and resources into it.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;ASP.Net data driven websites&lt;/b&gt;: Creates the scaffolding for data driven sites – should do things like code generation but this is from Microsoft&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;FX Cop/StyleCop:&lt;/b&gt; These tools perform analysis on source code to identify potential coding issues&lt;/p&gt;&lt;p class="MsoNormal"&gt;It's really interesting to write a list like this - it defiantly helps organise your (lack of!) free time a bit better - what would be on your list?&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-8194456639227923376?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Z7iX4mnAISLLtp1dnWg0eKRFNhY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z7iX4mnAISLLtp1dnWg0eKRFNhY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Z7iX4mnAISLLtp1dnWg0eKRFNhY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z7iX4mnAISLLtp1dnWg0eKRFNhY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=kD7Bb4PRE7U:oozksZUmqcw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=kD7Bb4PRE7U:oozksZUmqcw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=kD7Bb4PRE7U:oozksZUmqcw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=kD7Bb4PRE7U:oozksZUmqcw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=kD7Bb4PRE7U:oozksZUmqcw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/kD7Bb4PRE7U" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-20T09:32:18.419+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2009/05/what-dont-you-know.html</feedburner:origLink></item><item><title>Securing Anonymous web services with Certificates</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/PG1_sQa6fgU/securing-anonymous-web-services-with.html</link><category>BizTalk</category><category>Security</category><category>IIS</category><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Thu, 26 Mar 2009 10:57:46 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-4971608883203865280</guid><description>&lt;p&gt;We are currently working with a client who requires two BizTalk web services to talk to each other, however because they are in different locations there is no common account we can use to secure the communication. Below shows an example of the setup:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;BizTalk Server 1:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_XNLFf_IbM28/Scu_sEVkMfI/AAAAAAAAAbc/L_FJ91_t9HY/s1600-h/image%5B3%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="280" alt="image" src="http://lh6.ggpht.com/_XNLFf_IbM28/Scu_siH0TnI/AAAAAAAAAbg/7zrQEsB7eU4/image_thumb%5B1%5D.png?imgmax=800" width="424" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;This orchestration has an input port (which accepts an xml file) – this message is then passed to a request reply port (which will call a webservice hosted on BizTalk server 2). The response is then passed to the output port (which is saved to an xml file).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;BizTalk server 2:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_XNLFf_IbM28/Scu_s-OM_EI/AAAAAAAAAbk/rUA1DXnNpO4/s1600-h/image%5B8%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="288" alt="image" src="http://lh3.ggpht.com/_XNLFf_IbM28/Scu_tRjycLI/AAAAAAAAAbo/E70U1J207ao/image_thumb%5B4%5D.png?imgmax=800" width="434" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;This orchestration is a simple webservice which accepts a message, does something with the contents and returns the new message.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;This posting assume you have two orchestrations already talking to each other using wcf without any authentication&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Ok that’s the scenario defined – lets get onto the more interesting part! &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Configuring BizTalk server 1 (The WCF consumer):&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Since we are going to be securing the webservice with certificates lets start by generating the client certificate. Run the following code on the server which will be connecting to the webservice (BizTalk server 1 in my case) in a command prompt:&lt;/p&gt; &lt;div class="csharpcode-wrapper"&gt;   &lt;pre class="csharpcode"&gt;makecert -r -pe -n &lt;span class="str"&gt;&amp;quot;CN=ClientCertName&amp;quot;&lt;/span&gt; -b 01/01/2005 -e 01/01/2100 -sky exchange -ss my&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;To view the certificate type mmc into command prompt, then go to file add/remove snap in, and select Certificates. You should be given an option to select select who you will be managing the certificates for – select “My user account”&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_XNLFf_IbM28/Scu_uKBu7pI/AAAAAAAAAbs/VNmCp21CKEU/s1600-h/image%5B12%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="261" alt="image" src="http://lh3.ggpht.com/_XNLFf_IbM28/Scu_upCxOoI/AAAAAAAAAbw/BxOKZUZ0ius/image_thumb%5B6%5D.png?imgmax=800" width="431" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Now if you look in the Personal folder you should see your certificate. We will need to install this same certificate in a few other places so right click on it and select export. Ensure you include the private key (you actually don't need the private key on the BizTalk server hosting the webservice, but for this demo I have included it).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Now we need to install this certificate in two different locations. On BizTalk server 1 we need to install it under the user account running the host instance. To do this open up a command prompt and type: &lt;/p&gt;&lt;div class="csharpcode-wrapper"&gt;&lt;pre class="csharpcode"&gt;runas /user:DOMAINNAME\USERNAME mmc&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;then type the password for the user. In the management console again select the certificate add in. You can then import the certificate by right clicking on personal and selecting import.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Now we can configure this server to use the certificate you have added. Go into the send port you have generated and ensure you used the type wcf-wshttp – then click configure. For the address modify the url to use Https, then go to the security tab. Here you want to change the security mode to Transport with transport client type: certificate. Then in the client certificate panel click browse. Here you should be able to select the certificate you have just generated.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;That’s the first server configured.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Configuring Server 2 (The WCF Provider):&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;On the second server go to the receive location and select your WCF port. Click configure and go to Security. Set the security mode to Transport, and the client credential type to Certificate.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_XNLFf_IbM28/Scu_vJzRkpI/AAAAAAAAAb0/0s0Kpz6qBNw/s1600-h/image%5B17%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="415" alt="image" src="http://lh5.ggpht.com/_XNLFf_IbM28/Scu_v-V2k8I/AAAAAAAAAb4/B4tE6FxqgxU/image_thumb%5B9%5D.png?imgmax=800" width="310" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Now we need to configure IIS to host the ssl web service. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Firstly we will need to get another certificate to allow ssl to occur – so right click on the web site and go to properties, then Directory Security and click server certificate. Click the “Create a new certificate” and next followed by “Prepare the request now, but send it later” (You may be able to click send the request immediately to an online certification authority depending on your setup) Fill in all the details ensuring the field named “Common Name” is the dns name used to connect to this machine from Server 1. This will generate a text file which you can then give to a certificate authority to get a valid ssl certificate (this will have to be a certificate authority trusted by Server one – so possible a public authority like VeriSign).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Once you have your certificate you should be able to add it by re-running the above wizard.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Now what we need to do is install the client certificate generated on server 1 – ensure this is installed into the Local Computer certificate store so IIS can access it. Remember for security this certificate should not really include the private key.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;After you have added your certificate click the edit button shown below &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_XNLFf_IbM28/Scu_wNfr80I/AAAAAAAAAb8/zPqCFanEQL8/s1600-h/image%5B21%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="179" alt="image" src="http://lh6.ggpht.com/_XNLFf_IbM28/Scu_wgcE1aI/AAAAAAAAAcA/kjX52uTSse0/image_thumb%5B11%5D.png?imgmax=800" width="413" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Then select the following “Require Secure Channel”, “Require Client Certificates” and “Enable Certificate Trust List”, then click New...&lt;/p&gt;&lt;br /&gt;&lt;p&gt;This Wizard will allow you to specify the client certificates which can be used to access the webservice. Click Add from store then select the client certificate installed above. Click next, give it a friendly name, next and Finish. Then select the certificate list:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_XNLFf_IbM28/Scu_xSc7ymI/AAAAAAAAAcE/60wJ_xefR2g/s1600-h/image%5B26%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="399" alt="image" src="http://lh6.ggpht.com/_XNLFf_IbM28/Scu_xg4E1yI/AAAAAAAAAcI/167bmILNrh8/image_thumb%5B14%5D.png?imgmax=800" width="422" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;You will probably have to restart IIS now before this works correctly (and I had to restart IIS every time I changed the certificate trust list).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;And thats it! Transport security with client certificates DONE.&lt;/p&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;p&gt;Here are some error messages you might get and how to fix them:&lt;/p&gt;&lt;div class="csharpcode-wrapper"&gt;&lt;br /&gt;  &lt;pre class="csharpcode"&gt;The adapter failed to transmit message going to send port &lt;span class="str"&gt;&amp;quot;SendPort1&amp;quot;&lt;/span&gt; with URL &lt;span class="str"&gt;&amp;quot;https://ServerName/TestWebserviceCommunication/TestWebserviceCommunication_ProcessMessage_SendAndRecieve.svc&amp;quot;&lt;/span&gt;. It will be retransmitted after the retry interval specified &lt;span class="kwrd"&gt;for&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt; Send Port. Details:&lt;span class="str"&gt;&amp;quot;System.InvalidOperationException: Cannot find the X.509 certificate using the following search criteria: StoreName 'My', StoreLocation 'CurrentUser', FindType 'FindByThumbprint', FindValue '23D68B9999C21FC93702D259736DD0CC1C752B61'.&lt;br /&gt;   at System.ServiceModel.Security.SecurityUtils.GetCertificateFromStoreCore(StoreName storeName, StoreLocation storeLocation, X509FindType findType, Object findValue, EndpointAddress target, Boolean throwIfMultipleOrNoMatch)&lt;br /&gt;   at System.ServiceModel.Security.SecurityUtils.GetCertificateFromStore(StoreName storeName, StoreLocation storeLocation, X509FindType findType, Object findValue, EndpointAddress target)&lt;br /&gt;   at System.ServiceModel.Security.X509CertificateInitiatorClientCredential.SetCertificate(StoreLocation storeLocation, StoreName storeName, X509FindType findType, Object findValue)&lt;br /&gt;   at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.ApplyClientCertificate(ClientCredentials clientCredentials)&lt;br /&gt;   at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.CreateChannelFactory[TChannel](IBaseMessage bizTalkMessage)&lt;br /&gt;   at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.InitializeValues(IBaseMessage message)&lt;br /&gt;   at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2..ctor(IBaseMessage message, WcfTransmitter`2 transmitter)&lt;br /&gt;   at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfTransmitter`2.GetClientFromCache(String spid, IBaseMessage message)&lt;br /&gt;   at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfAsyncBatch`2.BatchWorker(List`1 messages)&amp;quot;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;For more information, see Help and Support Center at &lt;a href="http://go.microsoft.com/fwlink/events.asp."&gt;http:&lt;span class="rem"&gt;//go.microsoft.com/fwlink/events.asp.&lt;/span&gt;&lt;br /&gt;&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;This error is because your client certificate is stored in your cert store, but not the cert store used by the biztalk host instance. Look at the step above showing how to run mmc as another user to fix this problem.&lt;/p&gt;&lt;div class="csharpcode-wrapper"&gt;&lt;br /&gt;  &lt;pre class="csharpcode"&gt;The adapter failed to transmit message going to send port &lt;span class="str"&gt;&amp;quot;SendPort1&amp;quot;&lt;/span&gt; with URL &lt;span class="str"&gt;&amp;quot;https://ServerName/TestWebserviceCommunication/TestWebserviceCommunication_ProcessMessage_SendAndRecieve.svc&amp;quot;&lt;/span&gt;. It will be retransmitted after the retry interval specified &lt;span class="kwrd"&gt;for&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt; Send Port. Details:&lt;span class="str"&gt;&amp;quot;System.ServiceModel.Security.MessageSecurityException: The HTTP request was forbidden with client authentication scheme 'Anonymous'. ---&amp;gt; System.Net.WebException: The remote server returned an error: (403) Forbidden.&lt;br /&gt;   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)&lt;br /&gt;   at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)&lt;br /&gt;   --- End of inner exception stack trace ---&lt;br /&gt;&lt;br /&gt;Server stack trace: &lt;br /&gt;   at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)&lt;br /&gt;   at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult result)&lt;br /&gt;   at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)&lt;br /&gt;   at System.ServiceModel.Channels.ServiceChannel.EndRequest(IAsyncResult result)&lt;br /&gt;&lt;br /&gt;Exception rethrown at [0]: &lt;br /&gt;   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)&lt;br /&gt;   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&amp;amp; msgData, Int32 type)&lt;br /&gt;   at System.ServiceModel.Channels.IRequestChannel.EndRequest(IAsyncResult result)&lt;br /&gt;   at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.RequestCallback(IAsyncResult result)&amp;quot;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;For more information, see Help and Support Center at &lt;a href="http://go.microsoft.com/fwlink/events.asp."&gt;http:&lt;span class="rem"&gt;//go.microsoft.com/fwlink/events.asp.&lt;/span&gt;&lt;br /&gt;&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;This error is because the service you have used was not trusted on the Server 2, ensure you have the correct client certificate selected in IIS.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-4971608883203865280?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1mtpkQGqvblVGIU9Tq1mY80PdYI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1mtpkQGqvblVGIU9Tq1mY80PdYI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1mtpkQGqvblVGIU9Tq1mY80PdYI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1mtpkQGqvblVGIU9Tq1mY80PdYI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=PG1_sQa6fgU:l9xgR5b-zP4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=PG1_sQa6fgU:l9xgR5b-zP4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=PG1_sQa6fgU:l9xgR5b-zP4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=PG1_sQa6fgU:l9xgR5b-zP4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=PG1_sQa6fgU:l9xgR5b-zP4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/PG1_sQa6fgU" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-26T17:57:46.090Z</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2009/03/securing-anonymous-web-services-with.html</feedburner:origLink></item><item><title>Shrink a transaction log without doing a backup</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/rVKX0Errf7o/shrink-transaction-log-without-doing.html</link><category>Sql</category><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Sun, 15 Mar 2009 15:30:23 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-2679037729418936180</guid><description>&lt;p&gt;If you use Microsoft SQL 2005 (or 2000, and probably 2008) then Sometimes you just have to shrink the transaction log in a hurry especially if you get this error:-&lt;/p&gt; &lt;pre&gt;The transaction log for database 'DB NAME' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;I can never remember the command to truncate the log before you can use the inbuilt tools to shrink it.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In case you have the same problem here is the command:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;BACKUP LOG &lt;strong&gt;[DBNAME] &lt;/strong&gt;WITH Truncate_only&lt;/p&gt;&lt;br /&gt;&lt;p&gt;you should then be able to shrink the log without issue&lt;/p&gt;&lt;br /&gt;&lt;p&gt;P.S. There are reasons why you wouldn't want to do this (mainly around data recovery) so only do this on a test/dev environment.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Thanks&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Ross&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-2679037729418936180?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/F9YCSFVMSPU_XD0Hj6b3TytqZbs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F9YCSFVMSPU_XD0Hj6b3TytqZbs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/F9YCSFVMSPU_XD0Hj6b3TytqZbs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F9YCSFVMSPU_XD0Hj6b3TytqZbs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=rVKX0Errf7o:5VqRL-vssh8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=rVKX0Errf7o:5VqRL-vssh8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=rVKX0Errf7o:5VqRL-vssh8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=rVKX0Errf7o:5VqRL-vssh8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=rVKX0Errf7o:5VqRL-vssh8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/rVKX0Errf7o" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-15T22:30:23.286Z</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2009/03/shrink-transaction-log-without-doing.html</feedburner:origLink></item><item><title>Useful Tools</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/XZPkDFZJedM/useful-tools.html</link><category>Tips</category><category>Mesh</category><category>Voip</category><category>Google</category><category>Microsoft</category><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Fri, 07 Nov 2008 13:20:49 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-4387697781592911256</guid><description>&lt;p&gt;Here are my five most useful tools&lt;/p&gt;  &lt;h1&gt;&lt;/h1&gt; &lt;a href="https://www.mesh.com/Welcome/Default.aspx" target="_blank"&gt;Live Mesh&lt;/a&gt;  &lt;p&gt;A great tool that you probably all know about. Lets you keep files and folders sync'd across platforms (PC, Mac and smartphone at the moment). What I love most about mesh is the direction its heading, the sync bit is pretty cool (but &lt;a href="https://www.foldershare.com/" target="_blank"&gt;foldershare&lt;/a&gt; was sorta doing that anyway) as &lt;a href="http://blogs.technet.com/james/archive/2008/11/05/the-types-of-devices-in-live-mesh.aspx" target="_blank"&gt;James&lt;/a&gt; blog shows there will be four types of 'things' which can interact with the mesh.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Creators &lt;/strong&gt;- These are things like digital cameras (even standard digital cameras using eye-fi could use this! how cool).&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Consumers &lt;/strong&gt;- devices like mp3 players and digital picture frames&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Rich end points&lt;/strong&gt; - Pcs and Macs are the main things here, but may also include printers as shown below - this I REALLY like!&lt;a href="http://lh5.ggpht.com/_XNLFf_IbM28/SRSxJx3x1zI/AAAAAAAAAXk/A2pkQXyJM4Q/s1600-h/Devices_34E10B8F%5B2%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="156" alt="Devices_34E10B8F" src="http://lh4.ggpht.com/_XNLFf_IbM28/SRSxKo1xMoI/AAAAAAAAAXo/NpXYiq9J-l8/Devices_34E10B8F_thumb.jpg?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Processors&lt;/strong&gt; - These are more applications that run on the mesh, things like backup to another cloud app.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;You can watch the recent PDC talk here: &lt;a title="http://channel9.msdn.com/pdc2008/BB35/" href="http://channel9.msdn.com/pdc2008/BB35/"&gt;http://channel9.msdn.com/pdc2008/BB35/&lt;/a&gt; on it.&lt;/p&gt;  &lt;p&gt;You can also use this to remotely control your pcs from anywhere - its great as it traverses firewalls really well, much more secure than opening your pc remote desktop port to the world!&lt;/p&gt;  &lt;p&gt;This is wild speculation but I wonder how long before microsoft's Office Live (&lt;a href="http://www.liveside.net/main/archive/2008/10/31/office-in-the-cloud.aspx"&gt;http://www.liveside.net/main/archive/2008/10/31/office-in-the-cloud.aspx&lt;/a&gt;) will be integrated into your mesh live desktop, and you could print to your home printer which is also in your mesh... very exciting Im sure you will agree!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.idrive.com/" target="_blank"&gt;IDrive&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I love this tool. It is essentially an online backup tool which just works. You get 2GB for free or 150gb for $50 (annoyingly the set up recurring billing, and they didn't email me to remind me it would be coming out - even though they swear they did!). The backup and restore speeds are pretty decent, and the &amp;quot;continues backup&amp;quot; mode is a life saver - the first time you recover a file you deleted by accident you know it was worth the &amp;#163;30 ish quid!&lt;/p&gt;  &lt;p&gt;IDrive also supports a history mode allowing you to roll back to a previously version - very handy (and this also doesnt come out of your space allowance). Im very impressed with the security, and cant recommend this tool enough!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.acronis.co.uk/homecomputing/products/trueimage/" target="_blank"&gt;Acronis True image&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This tool is similar to &lt;a href="http://shop.symantecstore.com/store/symnahho/en_US/DisplayProductDetailsPage/ThemeID.106300/productID.90124600" target="_blank"&gt;N&lt;/a&gt;&lt;a href="http://shop.symantecstore.com/store/symnahho/en_US/DisplayProductDetailsPage/ThemeID.106300/productID.90124600" target="_blank"&gt;orton ghost&lt;/a&gt; but a lot more user friendly and cheap! For those who dont know Norton Ghost this allows you to take and restore an image of your pc. If you do this once a month your machine will run very quick.&lt;/p&gt;  &lt;p&gt;This help prevent issues with activating software multiple times (starting to become more essential with the DRM included in just about everything).&lt;/p&gt;  &lt;p&gt;If you use this with Live mesh then after you restore your pc, live mesh will automatically sync your latest files to your pc from the cloud - ideal!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.google.com/reader/" target="_blank"&gt;Google Reader&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Keep yourself up to date with all your favourite web sites everywhere you go (you can read it on your mobile to!)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.mysipswitch.com/" target="_blank"&gt;My Sip Switch&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Im just starting to get into using VOIP at home, and I have loads to learn still, but My Sip Switch is proving to be a very good starting place. I aim to go into a lot more detail soon, but currently Im able to use my sip switch for the following setup:-&lt;/p&gt;  &lt;p&gt;I have two numbers from &lt;a href="http://www.sipgate.co.uk/user/index.php" target="_blank"&gt;Sipgate&lt;/a&gt;, My Sip Switch is registered with both of them. One of the numbers (my personal number) will ring the house phone automatically, the second number will only ring the house phone during allowed hours(I will use this number for companies I dont trust!). &lt;/p&gt;  &lt;p&gt;Sipgate Also provides a voicemail service, which get email to you. I am going to use the following tool to be alerted when I get an email:-&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_XNLFf_IbM28/SRSxLCXb0OI/AAAAAAAAAXs/Y_TQN1-6HtY/s1600-h/usbwebmailnotifier%5B2%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="185" alt="usbwebmailnotifier" src="http://lh4.ggpht.com/_XNLFf_IbM28/SRSxLyiAalI/AAAAAAAAAXw/QiPlFY8kwZE/usbwebmailnotifier_thumb.jpg?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;maybe a bit tacky, but its very useful to know when you have an email!&lt;/p&gt;  &lt;p&gt;My sip gate also allows you to notify of calls via Google Talk, so I can tell when the house phone has called (and who called) when Im at work!&lt;/p&gt;  &lt;p&gt;Using &lt;a href="http://www.fring.com/" target="_blank"&gt;Fring&lt;/a&gt; I can also receive and make the voip calls via my smartphone, and &lt;a href="http://www.phonerlite.de/index_en.htm" target="_blank"&gt;Phonerlite&lt;/a&gt; to get the calls via my PC. For my home Im looking at a few different possible solutions for my home phone including a &lt;a href="http://www.blueface.ie/help/specifications.aspx?section=ata&amp;amp;item=spa3102" target="_blank"&gt;SPA3102&lt;/a&gt; and a SPA1001. Both cost under &amp;#163;50.&lt;/p&gt;  &lt;p&gt;Still havent quite decided how Im going to use for outbound calls, but the great thing is about My Sip Switch is that you are not tied into a particular provider. You can pick which provider you use for which calls, whether you sent your Caller ID or not, and implement redundancy (if one provider fails to call out then you can fail over to another).&lt;/p&gt;  &lt;p&gt;Finally you dont need to worry about emergency calls anymore, Sipgate allows you to make 999 calls after you set a home location.&lt;/p&gt;  &lt;p&gt;Hope you find some of these tools useful - if you do let me know!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-4387697781592911256?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HniBP6JkZS3rY5cGyQg0fpaUSDE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HniBP6JkZS3rY5cGyQg0fpaUSDE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HniBP6JkZS3rY5cGyQg0fpaUSDE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HniBP6JkZS3rY5cGyQg0fpaUSDE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=XZPkDFZJedM:k98Fw5B9BTE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=XZPkDFZJedM:k98Fw5B9BTE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=XZPkDFZJedM:k98Fw5B9BTE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=XZPkDFZJedM:k98Fw5B9BTE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=XZPkDFZJedM:k98Fw5B9BTE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/XZPkDFZJedM" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-07T21:20:49.444Z</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/11/useful-tools.html</feedburner:origLink></item><item><title>Patterns of Enterprise Application Architecture</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/BL8Ska1vglU/patterns-of-enterprise-application_11.html</link><category>Book Review</category><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Thu, 11 Sep 2008 13:40:20 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-8489764527791958010</guid><description>&lt;p&gt;I have just started reading this book and was fascinated. What I loved most about was that I could start identifying patterns I was already using - just didn't know what they were called.&lt;/p&gt;  &lt;p&gt;The book starts of as a conversation about the different types of patterns (but always gives a page number where you can get more information) as you get towards the end of the book each pattern is discussed in much more detail (including examples in mostly Java and sometimes .net)&lt;/p&gt;  &lt;p&gt;Unfortunately Jave appears to be Martin Fowlers language of choice - the Table Data Gateway pattern has this bit of code:-&lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; LoadWhere(String whereClause){&lt;br /&gt;   String commandString=&lt;br /&gt;       String.Format("select * from {0} &lt;span class="kwrd"&gt;where&lt;/span&gt; {1}", TableName,WhereClause);&lt;br /&gt;   Holder.FillData(commandString, TableName);&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now I suspect most people reading this will spot the issue with the above instantly, but if not read up on SQL injection!!! (if you are unsure how devastating a sql injection attack can be then watch this video from TechEd - scary! &lt;a title="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=989" href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=989"&gt;http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=989&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;Perhaps I'm being picky, this is definitely only sample code - but it worries me how many people might just use this code and not notice the potential issue.&lt;/p&gt;&lt;p&gt;Anyway - the book is very good and I do recommend reading it - as Martin Fowler him self says &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;"Since patterns are common solutions to recurring problems, there's a good chance that you have already come across some of them... I'm not claiming to present anything new in this book. Indeed, I claim the opposite, this is a book of (for our industry) old ideas.... An important part of patterns is trying to build a common vocabulary, so you can say that this class is a Remote Facade and other designers will know what you mean"&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;The common vocabulary is exactly what I have found most useful about this book.&lt;/p&gt;&lt;p&gt;You can find the book on amazon here:&lt;/p&gt;&lt;p&gt;&lt;a title="http://www.amazon.co.uk/gp/product/0321150775?ie=UTF8&amp;amp;tag=develodiarie-21&amp;amp;linkCode=as2&amp;amp;camp=1634&amp;amp;creative=6738&amp;amp;creativeASIN=0321150775" href="http://tinyurl.com/3ntvlm"&gt;http://tinyurl.com/3ntvlm&lt;/a&gt; (ISBN: 0-32101274200)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-8489764527791958010?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UnSE1pLlG3yquh-yL92zhyr1oO8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UnSE1pLlG3yquh-yL92zhyr1oO8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UnSE1pLlG3yquh-yL92zhyr1oO8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UnSE1pLlG3yquh-yL92zhyr1oO8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=BL8Ska1vglU:bm5goiJOWeU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=BL8Ska1vglU:bm5goiJOWeU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=BL8Ska1vglU:bm5goiJOWeU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=BL8Ska1vglU:bm5goiJOWeU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=BL8Ska1vglU:bm5goiJOWeU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/BL8Ska1vglU" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-11T21:40:20.407+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/09/patterns-of-enterprise-application_11.html</feedburner:origLink></item><item><title>Getting ASP.NET menus to work with Chrome</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/q0qe1F4gsRM/getting-aspnet-menus-to-work-with.html</link><category>asp.net</category><category>.net 2</category><category>.net 3</category><category>C#</category><category>.net 3.5</category><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Fri, 05 Sep 2008 02:17:14 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-2250092522341394888</guid><description>&lt;p&gt;The asp.net menu does a check to see if the browser the client uses can support JavaScript or not. But the check is not a very good one!&lt;/p&gt;  &lt;p&gt;You can force the menu to work by overwrite the Page_PreInit method on the page and telling the page that the client target is a modern “uplevel” browser:-&lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Page_PreInit(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e) &lt;br /&gt;{ &lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (Page.Request.ServerVariables[&lt;span class="str"&gt;&amp;quot;http_user_agent&amp;quot;&lt;/span&gt;].ToLower().Contains(&lt;span class="str"&gt;&amp;quot;safari&amp;quot;&lt;/span&gt;)) &lt;br /&gt;    { &lt;br /&gt;        Page.ClientTarget = &lt;span class="str"&gt;&amp;quot;uplevel&amp;quot;&lt;/span&gt;; &lt;br /&gt;    }&lt;br /&gt;} &lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Please note that you have to do this in the page class file, and not in the master page class file. Obviously this means you have to do it for every page – which is not ideal.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;To get round this limitation simply make a class which inherits from System.Web.UI.Page, and change all your pages to inherit from this class instead (a find and replace is ideal here!).&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-2250092522341394888?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EQQenH9spKkDW_JBo8906XNQgKA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EQQenH9spKkDW_JBo8906XNQgKA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EQQenH9spKkDW_JBo8906XNQgKA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EQQenH9spKkDW_JBo8906XNQgKA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=q0qe1F4gsRM:phjyc42hewE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=q0qe1F4gsRM:phjyc42hewE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=q0qe1F4gsRM:phjyc42hewE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=q0qe1F4gsRM:phjyc42hewE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=q0qe1F4gsRM:phjyc42hewE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/q0qe1F4gsRM" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-05T10:17:14.452+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/09/getting-aspnet-menus-to-work-with.html</feedburner:origLink></item><item><title>RegisterDataItem can only be called during an async postback Error</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/p96WwJVlvws/registerdataitem-can-only-be-called.html</link><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Thu, 26 Jun 2008 05:26:02 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-3817987690648881546</guid><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;I received the above error whilst using a ajax popup extender. Originally the popup extender was within an update panel and worked fine, the second I removed the update panel I started to get the issue.&lt;/p&gt;  &lt;p&gt;The problem turned out to be this line:-&lt;/p&gt;  &lt;p&gt;PopupStatusImage.Cancel();&lt;/p&gt;  &lt;p&gt;which basically tells the popup extender to hide. You can only call .Cancel() or .Commit() if your popup extender is within an update panel!&lt;/p&gt;  &lt;p&gt;You can simply check the Script manager to see if its a partial post back if you need to keep the cancel in for some pages etc.&lt;/p&gt;  &lt;p&gt;Hope this helps someone.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-3817987690648881546?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/r06qqQ9HeY8j0WkGYAFq-Bt7HMs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r06qqQ9HeY8j0WkGYAFq-Bt7HMs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/r06qqQ9HeY8j0WkGYAFq-Bt7HMs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r06qqQ9HeY8j0WkGYAFq-Bt7HMs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=p96WwJVlvws:JWhQ4sd2JSY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=p96WwJVlvws:JWhQ4sd2JSY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=p96WwJVlvws:JWhQ4sd2JSY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=p96WwJVlvws:JWhQ4sd2JSY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=p96WwJVlvws:JWhQ4sd2JSY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/p96WwJVlvws" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-26T13:26:02.813+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/06/registerdataitem-can-only-be-called.html</feedburner:origLink></item><item><title>Learn a new Language</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/RKmtWzO5umQ/learn-new-language.html</link><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Thu, 19 Jun 2008 06:56:06 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-7512526510347162088</guid><description>&lt;p&gt;I started coding in Java at uni about 4 years ago and since then I have been very Microsoft centric. Recently I have been reading Chris Dalbys blog (&lt;a title="http://www.yellowpark.net/cdalby/" href="http://www.yellowpark.net/cdalby/"&gt;http://www.yellowpark.net/cdalby/&lt;/a&gt;) and bought my self a current cost meter, and am very very tempted to get a SLUG.&lt;/p&gt;  &lt;p&gt;However I dont know Linux and really cant code in anything other than C#. So should I learn another language? If so which one!&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Java: Know a bit but haven't touched in in nearly 4 years.&lt;/li&gt;    &lt;li&gt;PHP: Again learned a bit at uni but not in any depth&lt;/li&gt;    &lt;li&gt;C++: Did about 10 minutes at uni of this! maybe something to learn!&lt;/li&gt;    &lt;li&gt;Ruby: Quite liked the idea of this dynamic language but was not totally sold on it!&lt;/li&gt;    &lt;li&gt;Python: No nothing about python other than its a scripting language!&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Last year I had a very interesting conversation with Dave Verner about Ruby on Rails and he said I should aim to learn a new language every year - at the time I thought he was a bit nuts, and he probably thought I was a lost cause - but I can see sense in what he was saying now!&lt;/p&gt;  &lt;p&gt;I suspect Im going to try and learn a bit more about Linux so hopefully a language which will run happily in Java makes sense (though Im pretty sure all the above run happily under Linux).&lt;/p&gt;  &lt;p&gt;Any suggestions??&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-7512526510347162088?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/btSaIRemuOw8BwodbbDeLgF57qE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/btSaIRemuOw8BwodbbDeLgF57qE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/btSaIRemuOw8BwodbbDeLgF57qE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/btSaIRemuOw8BwodbbDeLgF57qE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=RKmtWzO5umQ:GOWJJpRoPgI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=RKmtWzO5umQ:GOWJJpRoPgI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=RKmtWzO5umQ:GOWJJpRoPgI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=RKmtWzO5umQ:GOWJJpRoPgI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=RKmtWzO5umQ:GOWJJpRoPgI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/RKmtWzO5umQ" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-19T14:56:06.121+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/06/learn-new-language.html</feedburner:origLink></item><item><title>Geek Test</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/IbIYXsLFzZ4/geek-test.html</link><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Fri, 13 Jun 2008 15:53:56 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-7406548056836157541</guid><description>&lt;p&gt;If you find this funny, you are a geek!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/ross.dargan/SFL6gD5Y8nI/AAAAAAAAARA/vR7wXaqJehg/s1600-h/n612611128_82830_1666%5B4%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="n612611128_82830_1666" src="http://lh5.ggpht.com/ross.dargan/SFL6g4F3F0I/AAAAAAAAARE/Uz0hfbAAK7E/n612611128_82830_1666_thumb%5B2%5D.jpg?imgmax=800" width="423" height="323" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-7406548056836157541?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VtA_dP_HCifzGb6oYr07jLnIhF4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VtA_dP_HCifzGb6oYr07jLnIhF4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VtA_dP_HCifzGb6oYr07jLnIhF4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VtA_dP_HCifzGb6oYr07jLnIhF4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=IbIYXsLFzZ4:L0aCB11K6WY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=IbIYXsLFzZ4:L0aCB11K6WY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=IbIYXsLFzZ4:L0aCB11K6WY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=IbIYXsLFzZ4:L0aCB11K6WY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=IbIYXsLFzZ4:L0aCB11K6WY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/IbIYXsLFzZ4" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-13T23:53:56.471+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/06/geek-test.html</feedburner:origLink></item><item><title>DDD Scotland: Session Five</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/Ao6hNMAEVLo/ddd-scotland-session-five.html</link><category>DDD Scotland</category><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Sat, 10 May 2008 09:00:44 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-4158000396600369104</guid><description>&lt;p&gt;Red, Green, Refactor!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://Blog.BenHall.me.uk" target="_blank"&gt;Ben Hall&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Test-&amp;gt;Code -&amp;gt; Refactor&lt;/p&gt;  &lt;p&gt;Need to change your mindset&lt;/p&gt;  &lt;p&gt;Because the tests have to be written we need to stop and think about what we have to implement. This encourages better design.&lt;/p&gt;  &lt;p&gt;Code is a bit less of a black box&lt;/p&gt;  &lt;p&gt;Test code 101&lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;pre class="csharpcode"&gt;[TestFixture]&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ObjectUnderTestTests&lt;br /&gt;{&lt;br /&gt;    [Test]&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; void MethodUnderTest_State_ExpectedBehaviour()&lt;br /&gt;    {&lt;br /&gt;        string &lt;span class="kwrd"&gt;result&lt;/span&gt;=&lt;span class="kwrd"&gt;Convert&lt;/span&gt;.ToString(&lt;span class="kwrd"&gt;true&lt;/span&gt;)&lt;br /&gt;        Assert.IsTrue(tesult);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Look at the frame works &lt;a href="http://www.codeplex.com/xunit" target="_blank"&gt;xUnit&lt;/a&gt; and &lt;a href="http://www.mbunit.com/" target="_blank"&gt;MbUnit&lt;/a&gt; both contain more assertions and more attributes.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;The TDD Mindset&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Huge shift in development approach&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;ALWAYS write a test before writing code &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;always run your test &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;Fix failing tests as soon as possible &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;What do we test?&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Everything! In isolation &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;Express how we want to interact with the code &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;small, isolated section of functionality &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;Single test should not be testing too much &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;What not to do!&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Showed a demo from Scott Gutheries blog showing a page load doing everything. Not possible to test.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Showed how &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET" target="_blank"&gt;cruise control&lt;/a&gt; can be used to automatically run all tests&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You need to have a controller set on top of the repository.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Testing in Isolation: Test Doubles&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;More flexibility for testing the application.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Dummy Objects, Stubs, Mocks, Fakes.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;A Stub acts as a stand in&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Mocks are powerful normally development using a framework.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Normal: Business Logic --&amp;gt; Data Layer&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Test Dobule: Business Logic -&amp;gt; IData&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;IData -&amp;gt; DataLayer&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;IData -&amp;gt; Double (Pretends to be the data layer)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Sample:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;We now want to send an email after successfully insertion.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;We have an interface which implements SendInsertNotification&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The controller then takes a interface in the constructor - the test service then is used.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You can get a hold of a realistic stub email service which will open port 25 etc.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Would we be creating a stub for the database? Recommended not to. But we do still want to be testing in isolation. So in the Business Layer we use the mocked data layer, and in the data layer we use the real implementation.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;These could fail for other reasons, like network going down etc.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;When testing the database you can use a tear down method which can clean the database and reseed all ids.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You can also create [Setup] code which will initiate everything&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Code Coverage&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;NCover will use the profiler API to monitor what lines of code are being called an those which aren't. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Resouces&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;TDD By Exampl - Kent Beck&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://www.codebetter.com"&gt;www.codebetter.com&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;webblogs.asp.net/rosherove&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;RhinoMocks&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;TestDrivent.Net&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://www.NUnit.com"&gt;www.NUnit.com&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-4158000396600369104?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AJIuTblTAYotKk7cIXaWFgXKDA4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AJIuTblTAYotKk7cIXaWFgXKDA4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AJIuTblTAYotKk7cIXaWFgXKDA4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AJIuTblTAYotKk7cIXaWFgXKDA4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=Ao6hNMAEVLo:Razgyi7jLJY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=Ao6hNMAEVLo:Razgyi7jLJY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=Ao6hNMAEVLo:Razgyi7jLJY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=Ao6hNMAEVLo:Razgyi7jLJY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=Ao6hNMAEVLo:Razgyi7jLJY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/Ao6hNMAEVLo" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-10T17:00:44.747+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/05/ddd-scotland-session-five.html</feedburner:origLink></item><item><title>DDD Scotland: Fourth Session</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/npqw3j6vpE8/ddd-scotland-fourth-session.html</link><category>Sql 2008</category><category>DDD Scotland</category><category>Sql</category><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Sat, 10 May 2008 07:40:20 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-8283518832791569691</guid><description>&lt;p&gt;Making the leap into advanced SQL&lt;/p&gt;  &lt;p&gt;&lt;a href="http://sqlblogcasts.com/blogs/tonyrogerson/default.aspx" target="_blank"&gt;Tony Rogerson&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Sub Queries&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Sub queries (in the select statement) execute once per each row&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Derived tables&lt;/strong&gt;&lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; *&lt;br /&gt;&lt;span class="kwrd"&gt;from&lt;/span&gt; (&lt;br /&gt;    &lt;span class="kwrd"&gt;select&lt;/span&gt; type, name &lt;br /&gt;    &lt;span class="kwrd"&gt;from&lt;/span&gt; sys.objects &lt;br /&gt;    &lt;span class="kwrd"&gt;where&lt;/span&gt; type=&lt;span class="str"&gt;'U'&lt;/span&gt;&lt;br /&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; Syst ( type, name)&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This can be used to overcome issues with unions etc.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Nested Functions in sql 2000 causes the function to be called twice. &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;Logically derived tables are a virtual table. &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;There are no statistics held on them. &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;Its self contained. &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Common Table Expressions&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Can be used for recursion&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode-wrapper"&gt;&lt;br /&gt;  &lt;pre class="csharpcode"&gt;;&lt;span class="kwrd"&gt;with&lt;/span&gt; cteName (name, type, rowpos)&lt;br /&gt;&lt;span class="kwrd"&gt;as&lt;/span&gt; (&lt;br /&gt;     &lt;span class="kwrd"&gt;select&lt;/span&gt; name,type, rowpos = RowNumber() &lt;span class="kwrd"&gt;over&lt;/span&gt; (partition &lt;span class="kwrd"&gt;by&lt;/span&gt; type &lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; name)&lt;br /&gt;     &lt;span class="kwrd"&gt;from&lt;/span&gt; sys.objects&lt;br /&gt;)&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Unlike derived tables this does let you self join e.g.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode-wrapper"&gt;&lt;br /&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;declare&lt;/span&gt; @HowMany &lt;span class="kwrd"&gt;int&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;set&lt;/span&gt; @HowMay = 10&lt;br /&gt;&lt;span class="kwrd"&gt;with&lt;/span&gt; loopIT(i, descr)&lt;br /&gt;&lt;span class="kwrd"&gt;AS&lt;/span&gt; (&lt;br /&gt;    &lt;span class="kwrd"&gt;select&lt;/span&gt; i=1, descr=&lt;span class="kwrd"&gt;CAST&lt;/span&gt;(&lt;span class="str"&gt;'Anchor'&lt;/span&gt; &lt;span class="kwrd"&gt;as&lt;/span&gt; &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(100))&lt;br /&gt;    &lt;span class="kwrd"&gt;union&lt;/span&gt; &lt;span class="kwrd"&gt;all&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;select&lt;/span&gt; i=i+1, descr = &lt;span class="kwrd"&gt;CAST&lt;/span&gt;(&lt;span class="str"&gt;'recuresed'&lt;/span&gt; &lt;span class="kwrd"&gt;as&lt;/span&gt; &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(100))&lt;br /&gt;    &lt;span class="kwrd"&gt;from&lt;/span&gt; LOOPIT&lt;br /&gt;    &lt;span class="kwrd"&gt;Where&lt;/span&gt; i&amp;lt;@howmany&lt;br /&gt;    )&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; i, descr&lt;br /&gt;&lt;span class="kwrd"&gt;from&lt;/span&gt; LoopID&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Like derived table there are no stats, and they are expanded - but they do allow self join unlike derived tables. By default you can only recurse 100 times - you can extend this with MAXRECURSION.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;strong&gt;Temporary tables/Table Variables&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;#Tables hold stats - you can tell it to refresh them and then the plan is more accurate.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Table Variables are only meant for &amp;lt; 1000 rows - so you get no stats but you do get the option to recompile - option (recompile). However it is not very accurate&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The Sql plan uses the order of the column to compute selects not the most optimal index as it would use on a #table.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Table variable is not in memory, even local variables are stored on disk.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Hash tables do cause a compile lock so this causes an overhead, where as table variables dont - so they are better!&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Cumulative Totals&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You can use sub queries for this&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode-wrapper"&gt;&lt;br /&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; *,&lt;br /&gt;tytd = (&lt;span class="kwrd"&gt;select&lt;/span&gt; &lt;span class="kwrd"&gt;sum&lt;/span&gt;(accounts) &lt;span class="kwrd"&gt;where&lt;/span&gt; xxx),&lt;br /&gt;mytd = (&lt;span class="kwrd"&gt;select&lt;/span&gt; &lt;span class="kwrd"&gt;sum&lt;/span&gt;(accounts) &lt;span class="kwrd"&gt;where&lt;/span&gt; xxx)&lt;br /&gt;&lt;span class="kwrd"&gt;from&lt;/span&gt; accounts a&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The one pass approach uses the case expression&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode-wrapper"&gt;&lt;br /&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; *,&lt;br /&gt;tytp = &lt;span class="kwrd"&gt;sum&lt;/span&gt;(&lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="kwrd"&gt;when&lt;/span&gt; xxx &lt;span class="kwrd"&gt;then&lt;/span&gt; amount &lt;span class="kwrd"&gt;else&lt;/span&gt; 0),&lt;br /&gt;mytp = &lt;span class="kwrd"&gt;sum&lt;/span&gt;(&lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="kwrd"&gt;when&lt;/span&gt; xxx &lt;span class="kwrd"&gt;then&lt;/span&gt; amount &lt;span class="kwrd"&gt;else&lt;/span&gt; 0)&lt;br /&gt;&lt;span class="kwrd"&gt;from&lt;/span&gt; accounts a&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You can use pivots tables also, and CTE tables&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;u&gt;Performance&lt;/u&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You shouldn't use Duration - it is has a high duration but a low number of reads that means there is a problem somewhere. Reads, CPU are the two columns you should read. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Sub query = 6.5k reads &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;1 pass = 417 reads &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;union all = 1200 reads &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;and the pivot 1201 reads &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Running Totals&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;CTE can do it by adding a row number, then self join look for the previous row and sum as you go along. However the query gets copied into each query + it doesnt filter rows correctly so this costs a lot in reads&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Better approach is to copy it into a temporary table, index it then make your CTE read from the temporary table. goes from 20k reads to 7k.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-8283518832791569691?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5P9gHJhIFZuzG_UTeu4n6v3B9pM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5P9gHJhIFZuzG_UTeu4n6v3B9pM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5P9gHJhIFZuzG_UTeu4n6v3B9pM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5P9gHJhIFZuzG_UTeu4n6v3B9pM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=npqw3j6vpE8:-EhgdBkMaZ0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=npqw3j6vpE8:-EhgdBkMaZ0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=npqw3j6vpE8:-EhgdBkMaZ0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=npqw3j6vpE8:-EhgdBkMaZ0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=npqw3j6vpE8:-EhgdBkMaZ0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/npqw3j6vpE8" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-10T15:40:20.541+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/05/ddd-scotland-fourth-session.html</feedburner:origLink></item><item><title>DDD Scotland: Third Session</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/Bnl5XojheGM/ddd-scotland-third-session.html</link><category>SSIS</category><category>Sql 2008</category><category>DDD Scotland</category><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Sat, 10 May 2008 05:05:25 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-8340068632014186413</guid><description>&lt;p&gt;Integration Service in Sql 2008&lt;/p&gt;  &lt;p&gt;Allan Mitchell &lt;a href="http://www.SQLDTS.com\"&gt;www.SQLDTS.com\&lt;/a&gt; &lt;a href="http://www.SQLIS.com"&gt;www.SQLIS.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Behind the scenes: Threading&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Multicast Transform generates n copies of the input. This is the same in 2008 but all output are on the same execution Path instead of the same thread.&lt;/p&gt;  &lt;p&gt;A raw file means that IIS doesn't have to translate information - this means that its ideal for staging data.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;To work around issues with SSIS 2005 you use the union all component. This works because the union all works asynchronously. This causes another execution tree (Another thread). This is not needed in 2008.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Pipeline Limiter&lt;/p&gt;  &lt;p&gt;This doesnt sound good because we are moving data! Limiter exists in 2005 so its not going to be slower in 2008 - just you didnt know about it. In 2008 they tell you about it so you now get performance counters.&lt;/p&gt;  &lt;p&gt;Why would I want to restrict the pipeline?&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Date = buffer = memory. &lt;/li&gt;    &lt;li&gt;Memory is reused when the buffer terminates&lt;/li&gt;    &lt;li&gt;push back from a component = no reuse of memory = run out of memory!&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Dont use select * because it will need to allocate memory in the buffer for something we wont use.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;To capture these event in the Feb CTP you need to check the log messages for an attribute starting with &amp;quot;The Component%&amp;quot; Expect this to change tho&lt;/p&gt;  &lt;p&gt;You can now use C# in the script component to write/manipulate data.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Lookup Component&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Caching Options&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Full: Before its used everything gets cached - Slow startup&lt;/li&gt;    &lt;li&gt;Partial: Lookup component will try for a match in the cache first, then check the file.&lt;/li&gt;    &lt;li&gt;None - The last query is cached but that it. Try to order your data. This is useful for volatile data.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Full cache is fasted but might take longest to cache, and a large amount of memory.&lt;/p&gt;  &lt;p&gt;In 2005 these cannot be passed around - so if you want to loop through a directory then it will be cached for every file! This is also not transferable.&lt;/p&gt;  &lt;p&gt;In 2008 there is now something called a Cache Transform. This can be used as a destination.&lt;/p&gt;  &lt;p&gt;You can cache to:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A file - Its a Raw File&lt;/li&gt;    &lt;li&gt;In Memory&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This allows the reference to be passed around.&lt;/p&gt;  &lt;p&gt;Because you can doesnt mean you should - by default the 2005 way is used.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Row Redirection&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;If a lookup component gets no match then by default it fails. You have to configure a redirect down the error output to ignore it if this should not be an error.&lt;/p&gt;  &lt;p&gt;Now in 2008 we have a no match output option.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Points to note:&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Lookup transform is case sensitive when done in cache. Obviously this is not the case in SQL&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Data Profiling Task&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Profiles data in your database (can do quick setup or verbose). only SQl2000 or above can be profiled.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Side Note: If you are going to Sql server then use the OLE Connection manager or the sql connection manager&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;This is fantastic for seeing how rubbish the data is.&lt;/p&gt;  &lt;p&gt;Useful for identifying distribution of values.&lt;/p&gt;  &lt;p&gt;Microsoft have provided a date profile viewer to read the xml produced by the above component. Which is really powerful - you can drill into it quite easily.&lt;/p&gt;  &lt;p&gt;This is useful for checking data sent from a provider.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Change Data Capture (CDC)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Billed as an ETL function.&lt;/p&gt;  &lt;p&gt;Gives increased efficiency - incremental extractions.&lt;/p&gt;  &lt;p&gt;You can identify changed rows and columns.&lt;/p&gt;  &lt;p&gt;Essentially transaction replication. It uses the log reader.&lt;/p&gt;  &lt;p&gt;A lot of people uses triggers - this doesnt!&lt;/p&gt;  &lt;p&gt;Use a sp called sp_cdc_enable_table with parameters to define the table you want to do the change data capture on.&lt;/p&gt;  &lt;p&gt;Supports net changes/all changes so you can decide how you need your data (and potentially save space)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-8340068632014186413?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/eHjBE_pTQZheZZsJ0gFe7LA86rA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eHjBE_pTQZheZZsJ0gFe7LA86rA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/eHjBE_pTQZheZZsJ0gFe7LA86rA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eHjBE_pTQZheZZsJ0gFe7LA86rA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=Bnl5XojheGM:rgggi4UWB-w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=Bnl5XojheGM:rgggi4UWB-w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=Bnl5XojheGM:rgggi4UWB-w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=Bnl5XojheGM:rgggi4UWB-w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=Bnl5XojheGM:rgggi4UWB-w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/Bnl5XojheGM" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-10T13:05:25.833+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/05/ddd-scotland-third-session.html</feedburner:origLink></item><item><title>DDD Scotland: Second Session</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/l6KIuvRXlKk/ddd-scotland-second-session.html</link><category>DDD Scotland</category><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Sat, 10 May 2008 03:46:04 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-6904476750792468198</guid><description>&lt;p&gt;[Apologies because my laptop blue screened and windows live writer doesn't do auto recovery:( I REALLY need a new laptop now! - everything up to abusing threads is from memory]&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a title="How to Write Crap Code in C#" href="http://www.benlamb.com/downloads/talks/CrapCode.pdf"&gt;How to Write Crap Code in C#&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ben Lamb &lt;a href="http://www.benlamb.com"&gt;www.benlamb.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Started the demo by showing an application which analyses all off Shakespeare's books to count every word and figure out how often the words are used. Initially he runs it and it takes 2 minutes 1 second which he then explains has a sleep.timer in there set to 2 minutes&lt;/p&gt;  &lt;p&gt;Initial program: 1 second&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Abusing Exceptions&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Initially he checked a dictionary to see if a word existed before updating it. This was then changed to just try and update the dictionary, and if it doest exist handle the exception to add it in.&lt;/p&gt;  &lt;p&gt;When he ran this he showed us the CPU maxing out, and performance monitor looking at the number of errors thrown a second (175000 was how many)&lt;/p&gt;  &lt;p&gt;Exception flowing: 41 seconds&lt;/p&gt;  &lt;p&gt;Ben 1 - Redmond 0&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Abusing Threads&lt;/strong&gt;    &lt;br /&gt;You can get a thread by:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Using async callbacks&lt;/li&gt;    &lt;li&gt;Threadpool&lt;/li&gt;    &lt;li&gt;manually using Thread() &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;to really screw up a program you have to use Lock() &lt;/p&gt;  &lt;p&gt;modify the program so we have one thread for each text file, and then we lock on the dictionary. &lt;/p&gt;  &lt;p&gt;Multi Threaded analysers 1 second&lt;/p&gt;  &lt;p&gt;Ben 1- Redmond 1&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Misuse of the heap (Fun with Strings)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Value objects get stored on the stack (ints etc), reference objects get stored on the head.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Avoid Boxing/UnBoxing&lt;/li&gt;    &lt;li&gt;Use Generic classes&lt;/li&gt;    &lt;li&gt;Cache Locality&lt;/li&gt;    &lt;li&gt;Prefer code that works to fast code.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Garbage collection is designed to clean up code - it can use reference counters. This causes the counter to be locked which can cause performance problems. .net uses mark and sweep which walks through an object tree and looks and everything and object it comes across is marked because its being used. Anything not marked gets removed. Then it sweeps everything to group together memory (defraging basically).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Every time an object goes through a process like this its generation gets marked as either generation 0/1/2 - the ones which are old (gen 2) they get put to the bottom so the garbage collection doesn't worry about it too much. Pinned objects are objects which cant be moved because its unmanaged code - this confuses things a bit.&lt;/p&gt;  &lt;p&gt;Garbage collection is not deterministic - but don't bother calling it yourself you just make things worse. Plus things like the virus checker could cause more issues.&lt;/p&gt;  &lt;p&gt;Showed a normalise line which basically loops through an array of chars to check it is a letter or a space. String builder is then used to append the values together. He changes this to a string which concats itself with the char.&lt;/p&gt;  &lt;p&gt;Ben explains that he uses system.diagnostics.stopwatch to show performance details.&lt;/p&gt;  &lt;p&gt;Consider putting timer metrics into apps so you can track down issues.&lt;/p&gt;  &lt;p&gt;There are some counters showing garbage collection information. % of time in GC is really what you are after. any more in 10% then you have issues.&lt;/p&gt;  &lt;p&gt;String concatenation takes: 1 minute 24 seconds.&lt;/p&gt;  &lt;p&gt;Ben 2 - Redmond 1.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-6904476750792468198?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Rn8L2gQXPjAuMWh2Q5Ztf9kQCuA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Rn8L2gQXPjAuMWh2Q5Ztf9kQCuA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Rn8L2gQXPjAuMWh2Q5Ztf9kQCuA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Rn8L2gQXPjAuMWh2Q5Ztf9kQCuA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=l6KIuvRXlKk:-x1b0h5FDwE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=l6KIuvRXlKk:-x1b0h5FDwE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=l6KIuvRXlKk:-x1b0h5FDwE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=l6KIuvRXlKk:-x1b0h5FDwE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=l6KIuvRXlKk:-x1b0h5FDwE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/l6KIuvRXlKk" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-10T11:46:04.866+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/05/ddd-scotland-second-session.html</feedburner:origLink></item><item><title>DDD Scotland: First Session</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/1uO46RhxHzs/ddd-scotland-first-session.html</link><category>DDD Scotland</category><category>WCF</category><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Sat, 10 May 2008 05:32:29 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-1436130248424436118</guid><description>&lt;p&gt;Web Services: We dont need no stinking web server&lt;/p&gt;  &lt;p&gt;Barry Dorrans &lt;a title="http://idunno.org/" href="http://idunno.org/"&gt;http://idunno.org/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Agenda&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;What is WCF &lt;/li&gt;    &lt;li&gt;WCF Vs Remoting &lt;/li&gt;    &lt;li&gt;SOA, Services, Interfaces &lt;/li&gt;    &lt;li&gt;Proving it &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Remoting is going, WCF is an open standard (WS*) so much better, Also transport neutral so we can quickly switch from HTTP to TCP/MSMQ etc.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeproject.com/script/Membership/Profiles.aspx?mid=24570" target="_blank"&gt;Roman Kiss&lt;/a&gt; has a &lt;a href="http://www.codeproject.com/KB/WCF/NullTransportForWCF.aspx" target="_blank"&gt;null transport&lt;/a&gt; module which allows you to just communicate in memory&lt;/p&gt;  &lt;p&gt;WCF Vs Remoting&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;WCF requires less permissions, runs in medium trust (mostly). &lt;/li&gt;    &lt;li&gt;Easier versioning with WCF. &lt;/li&gt;    &lt;li&gt;Two way communications (callback contracts) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;SOA approach. Write the contracts first.&lt;/p&gt;  &lt;p&gt;ABCs of WCF: Address (where to talk), Binding (how to talk), Contract (what we are talking about)&lt;/p&gt;  &lt;p&gt;A server endpoint is constructed of Address binding Channel&lt;/p&gt;  &lt;p&gt;A service can have multiple bindings - defines the shape of the service and the security.&lt;/p&gt;  &lt;p&gt;A contract is defined for the service, data and message - can also create one for errors etc.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;MEP: Message Exchange Protocol&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Request - Reply &lt;/li&gt;    &lt;li&gt;One Way &lt;/li&gt;    &lt;li&gt;Duplex &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Service Contracts are decorated with the attribute [Service Contract] and the methods with [Operation Contract]&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Data contracts are decorated with [DataContract] and properties/functions with [MemberContract] - this gives us control of the message body or header - but ordering allows us to create optional components or to order them.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Step by Step instructions will be published&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Create a WCF service library&lt;/p&gt;  &lt;p&gt;Visual studio 2008 includes a test client for the library project. This even lets you inspect your request/response header.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/ross.dargan/SCVwN2M_YII/AAAAAAAAAQI/pPS5aoKS7FM/1280360982_195dc4bcfb5.jpg?imgmax=800"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="340" alt="1280360982_195dc4bcfb" src="http://lh6.ggpht.com/ross.dargan/SCVwOWM_YJI/AAAAAAAAAQQ/BvIFqsp_9rg/1280360982_195dc4bcfb_thumb3.jpg?imgmax=800" width="410" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Shows a simple?! wcf configuration file. Right clicking on it bring up the WCF configuration editor. This allows you to really easily change settings like the bindings.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/ross.dargan/SCVwO2M_YKI/AAAAAAAAAQY/jis_HODVGus/image_7676362bbca14c398e781ffe7f17eb%5B1%5D.png?imgmax=800"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="306" alt="image_7676362b-bca1-4c39-8e78-1ffe7f17eb40" src="http://lh4.ggpht.com/ross.dargan/SCVwP2M_YLI/AAAAAAAAAQg/pDJuuVGUwdY/image_7676362bbca14c398e781ffe7f17eb%5B2%5D.png?imgmax=800" width="412" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;WCF doesn't require a webserver to host HTTP web services&lt;/p&gt;  &lt;p&gt;With windows 2008 it gets better. In XP/Vista we have to write a host if we dont use IIS with WAS we can host a service under any protocol underneath IIS.&lt;/p&gt;  &lt;p&gt;Running through a demo called Rumour. Talks about using a constant file to define the namespace.&lt;/p&gt;  &lt;p&gt;Name spaces should include a date to support versioning to prevent breaking changes&lt;/p&gt;  &lt;p&gt;showed how you can set isrequired=false but did this on an int&lt;strong&gt;&lt;em&gt;... not sure how WCF can handle a value non nullable type not being passed in?: &lt;/em&gt;Barry said that this would result in the int being set to a 0.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Barry recommends using Visual Studio 2008 because 2005 doesn't have a test harness.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What have we learned&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We need data contracts for versioning. WCF will not send items down unless members are marked as a data contract. Barry claimed that even if you mark data as serializable it wont send it down the link&lt;strong&gt;... &lt;em&gt;Im not sure this is correct as im sure I have done this... so I will chase it up&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;[LIVE DEMO]&lt;/p&gt;  &lt;p&gt;Showed the MEX endpoint exposing meta data information.&lt;/p&gt;  &lt;p&gt;To stop the service you must do:-&lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; StopService()&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt;(myServiceHost.Stae == CommuncationState.Faulted)&lt;br /&gt;&lt;br /&gt;MyserviceHost.Abort();&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (myServiceHost.State!= CommincationState.Closed)&lt;br /&gt;&lt;br /&gt;MyServiceHost.Close();&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The reason we need this is because you cant use the using statement. Disposing of the WCF service calls close but if it is in a faulted state then it will throw an exception.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Do try and host WCF in IIS.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Replacing ASMX - double decorate contracts what the action &amp;amp; message names, rename the service and only use basic http binding.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Demonstrated creating a service host by passing in the base address&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;AddressAccessDeniedException - the process does not have rights to the name space, so that needs to be registered... however you can just run as admin.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This command allows you to register the address:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode-wrapper"&gt;&lt;br /&gt;  &lt;pre class="csharpcode"&gt;netsh http add urlacl url=http:\\+:8080\RumourService user=builtin\users&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This should be done at install time.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Getting service host information:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode-wrapper"&gt;&lt;br /&gt;  &lt;pre class="csharpcode"&gt;endpoint.Address&lt;br /&gt;&lt;br /&gt;endpoint.Binding.name&lt;br /&gt;&lt;br /&gt;endpoint.Contract.name&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Add service reference and discover is clever enough to check local projects (if they have an app.config file). Does this require the mex data?&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The app.config then needed to be renamed to stop an error from happening&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;[My battery ran out even after a full charge - need a new one! so had to resort to manual blogging (pen&amp;amp;paper) - apologies if if this not as accurate]&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Error Handling&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Need to turn on error propagation on in the web.config. This then send the error message through but still sends it as a fault exception. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You can declare a data context which is decorated with the fault contract which allows the correct error to be send to the client and handled.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This then marshals everything into a soap fault&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Barry then did a very quick run through of duplex working.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-1436130248424436118?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/axp2_LdZTkBcxR2vTJbtNwvb380/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/axp2_LdZTkBcxR2vTJbtNwvb380/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/axp2_LdZTkBcxR2vTJbtNwvb380/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/axp2_LdZTkBcxR2vTJbtNwvb380/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=1uO46RhxHzs:FqivnFgWmUY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=1uO46RhxHzs:FqivnFgWmUY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=1uO46RhxHzs:FqivnFgWmUY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=1uO46RhxHzs:FqivnFgWmUY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=1uO46RhxHzs:FqivnFgWmUY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/1uO46RhxHzs" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-10T13:32:29.674+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/05/ddd-scotland-first-session.html</feedburner:origLink></item><item><title>NO SPECTATORS, ONLY PARTICIPANTS</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/_43Ekq_XhQ4/no-spectators-only-participants.html</link><category>BarCampNorthEast</category><category>Code Works</category><category>DDD Scotland</category><category>Thinking Digital</category><category>Conference</category><category>BarCamp</category><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Thu, 01 May 2008 03:24:11 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-7526217718273610745</guid><description>&lt;p&gt;There are loads of great conferences going on in may&lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="400" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="150"&gt;&lt;img src="http://developerdayscotland.com/images/badges/GetReady1-small.png" /&gt;&lt;br /&gt;Where: Glasgow&lt;br /&gt;How Much: Free!&lt;/td&gt;&lt;td valign="top" width="246"&gt;First up on Saturday the 10th of May is &lt;a href="http://developerdayscotland.com/" target="_blank"&gt;DDD Scotland&lt;/a&gt; (mentioned &lt;a href="http://blog.the-dargans.co.uk/2008/03/ddd-scotland-registration-open.html" target="_blank"&gt;here&lt;/a&gt;). This is a free community event with some great tracks and speakers including &lt;a href="http://idunno.org/default.aspx"&gt;Barry Dorrans&lt;/a&gt; (covering WCF - cant wait), &lt;a href="http://blog.colinmackay.net/"&gt;Colin Angus Mackay&lt;/a&gt; and whilst I havent heard of &lt;a href="http://www.garyshort.org/"&gt;Gary Short&lt;/a&gt; before he perhaps has the best Bio I have ever read (Gary Short was employed as a canoeist, but was presumed dead after disappearing under mysterious circumstances, only to reappear 5 years later. Gary had used this time to secretly re-train as a software Jedi and now plies his trade throughout the known galaxies, where he sells his skills to the highest bidder. Outside of his dog, his laptop is his best friend; inside of his dog, it's too dark to use it.)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="150"&gt;&lt;img src="http://www.thinkingdigital.co.uk/z_siteimages/img_146_1200942891_-1_-1_0_scaled.jpg" /&gt;&lt;br /&gt;Where: Newcastle&lt;br /&gt;How Much: £599 + VAT&lt;/td&gt;&lt;td valign="top" width="246"&gt;Next up is Thinking Digital run by CodeWorks on the 21st to the 23rd... not so much development  - although &lt;a title="Steve Clayton" href="http://blogs.msdn.com/stevecla01"&gt;Steve Clayton&lt;/a&gt; will be there talking about Microsoft new Mesh technology - even though he didn't give me an &lt;a href="http://blogs.msdn.com/stevecla01/archive/2008/04/23/live-mesh-i-have-3-invites.aspx" target="_blank"&gt;invite&lt;/a&gt;!&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="150"&gt; &lt;a href="http://lh3.ggpht.com/ross.dargan/SBjh3HIi4aI/AAAAAAAAAP4/rjD72rgJrdw/s1600-h/barcamp5.png"&gt;&lt;br /&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="122" alt="barcamp" src="http://lh6.ggpht.com/ross.dargan/SBjh33Ii4bI/AAAAAAAAAQA/pvm3-PiRmWo/barcamp_thumb3.png?imgmax=800" width="137" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Where: Newcastle&lt;br /&gt;How Much: Free*&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;*=May cost a demo/presentation &lt;/td&gt;&lt;td valign="top" width="246"&gt;And finally &lt;a href="http://www.barcamp.org/BarCampNorthEast" target="_blank"&gt;Bar Camp: North East&lt;/a&gt; straight after thinking digital on the  24th and 25th.&lt;br /&gt;&lt;p&gt;The Rules of &lt;strike&gt;Fight Club&lt;/strike&gt; Bar Camp are pretty simple, you have to take part... and that worries me a bit! At work we hold regular knowledge sharing seminars and its a great way to pass on new skills and anyone who knows me will tell you how much I love going on about some new technology - but running a demo/session outside of work is a different kettle of fish!&lt;/p&gt;&lt;p&gt;So I don't really have any idea what will be covered here, but Im really looking forward to meeting other developers from the North East!&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Looks like I am going to have a busy May!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-7526217718273610745?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HrMPQusvoezV3U7DRndBoE3kRCo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HrMPQusvoezV3U7DRndBoE3kRCo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HrMPQusvoezV3U7DRndBoE3kRCo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HrMPQusvoezV3U7DRndBoE3kRCo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=_43Ekq_XhQ4:mn-P1onSozs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=_43Ekq_XhQ4:mn-P1onSozs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=_43Ekq_XhQ4:mn-P1onSozs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=_43Ekq_XhQ4:mn-P1onSozs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=_43Ekq_XhQ4:mn-P1onSozs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/_43Ekq_XhQ4" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-01T11:24:11.667+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/04/no-spectators-only-participants.html</feedburner:origLink></item><item><title>DDD Scotland - registration open</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/oZFaeDAwxVY/ddd-scotland-registration-open.html</link><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Mon, 17 Mar 2008 04:32:59 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-8191920083549879847</guid><description>&lt;p&gt;&lt;a href="http://lh6.google.com/ross.dargan/R95W5ZYy6oI/AAAAAAAAAPo/j0IWxpAp3UM/GetReady1-large%5B13%5D?imgmax=800"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="GetReady1-large" src="http://lh3.google.com/ross.dargan/R95W6pYy6pI/AAAAAAAAAPw/cYDX4mqSdZ8/GetReady1-large_thumb%5B7%5D?imgmax=800" width="184" align="right" border="0" /&gt;&lt;/a&gt; This looks like its going to be a very good community event with some really interesting tracks. You can see the agenda &lt;a href="http://developerdayscotland.com/main/Agenda/tabid/68/Default.aspx"&gt;here&lt;/a&gt; and sign up &lt;a href="http://developerdayscotland.com/main/DelegateRegistration/tabid/69/Default.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Really looking forward to this, just wish there where more events like this in the North East!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-8191920083549879847?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_S2JU83GJrDnLIpiR_elMZqY5-s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_S2JU83GJrDnLIpiR_elMZqY5-s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_S2JU83GJrDnLIpiR_elMZqY5-s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_S2JU83GJrDnLIpiR_elMZqY5-s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=oZFaeDAwxVY:ODsmOTndFQw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=oZFaeDAwxVY:ODsmOTndFQw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=oZFaeDAwxVY:ODsmOTndFQw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=oZFaeDAwxVY:ODsmOTndFQw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=oZFaeDAwxVY:ODsmOTndFQw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/oZFaeDAwxVY" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-03-17T11:32:59.149Z</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/03/ddd-scotland-registration-open.html</feedburner:origLink></item><item><title>Idea for some software</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/RBppqWE1IUQ/idea-for-some-software.html</link><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Sat, 15 Mar 2008 03:59:10 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-38986998324318508</guid><description>&lt;p&gt;I have just seen Will Shipley's latest Blog posting (&lt;a title="http://wilshipley.com/blog/2008/02/ted2008-part-1-gossip.html" href="http://wilshipley.com/blog/2008/02/ted2008-part-1-gossip.html"&gt;http://wilshipley.com/blog/2008/02/ted2008-part-1-gossip.html&lt;/a&gt;) and he says he has had his mac book stolen but he knows his MAC code, so he wants people to look out for it.&lt;/p&gt;  &lt;p&gt;Well this got me thinking - what if everyone subscribes their laptop mac code to a website, and if it goes missing they flag it as stolen. Then working with people who provide WIFI services we have a little app which basically checks the list. If a stolen mac address is spotted then the police could be notified. &lt;/p&gt;  &lt;p&gt;Just a thought - but I think this could be a really useful tool against laptop theft!&lt;/p&gt;  &lt;p&gt;Ross&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-38986998324318508?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/K4d4wBAdsqIWx9xdZhvS5X5ABqk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K4d4wBAdsqIWx9xdZhvS5X5ABqk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/K4d4wBAdsqIWx9xdZhvS5X5ABqk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K4d4wBAdsqIWx9xdZhvS5X5ABqk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=RBppqWE1IUQ:E1InHtIM-p4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=RBppqWE1IUQ:E1InHtIM-p4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=RBppqWE1IUQ:E1InHtIM-p4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=RBppqWE1IUQ:E1InHtIM-p4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=RBppqWE1IUQ:E1InHtIM-p4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/RBppqWE1IUQ" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-03-15T10:59:10.223Z</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/03/idea-for-some-software.html</feedburner:origLink></item><item><title>Internet Explorer 8 Beta 1</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/89Bu7vk-mSs/internet-explorer-8-beta-1.html</link><category>Bug</category><category>Microsoft</category><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Thu, 06 Mar 2008 08:26:03 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-6001791599656902573</guid><description>&lt;p&gt;&lt;a href="http://lh5.google.com/ross.dargan/R9AO7uTmRaI/AAAAAAAAAPY/B0CEWKSIrGQ/image%5B7%5D?imgmax=800"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="image" align="right" src="http://lh4.google.com/ross.dargan/R9AO8eTmRbI/AAAAAAAAAPg/dRPm94H6tLM/image_thumb%5B3%5D?imgmax=800" width="244" height="69" /&gt;&lt;/a&gt;As announced at the Mix Keynote speech IE 8 beta 1 is now available &lt;a title="Download the developer beta" href="http://www.microsoft.com/windows/products/winfamily/ie/ie8/readiness/Install.htm" target="_blank"&gt;here&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Everything looks pretty good but I couldn't get the web slices to work with Facebook - it just kept asking me to login.&lt;/p&gt;  &lt;p&gt;Also spotted an issue with the asp.net menu control. It throws the following JavaScript exception &amp;quot;htmlfile: Not implemented&amp;quot; when trying to expand a menu item. The bit of code failing is trying to call &amp;quot;item.cells[0]&amp;quot; on a table row (TR). Suppose it is just a beta tho!&lt;/p&gt;  &lt;p&gt;[Update]&lt;/p&gt;  &lt;p&gt;There actually appears to be quite a few JavaScript issues with this version... defiantly not stable for sites reliant on JavaScript&lt;/p&gt;  &lt;p&gt;[/Update]&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-6001791599656902573?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5owYofNG9W8J9n1fFt1Cnjiu7_k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5owYofNG9W8J9n1fFt1Cnjiu7_k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5owYofNG9W8J9n1fFt1Cnjiu7_k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5owYofNG9W8J9n1fFt1Cnjiu7_k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=89Bu7vk-mSs:oKuz8DKxD1Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=89Bu7vk-mSs:oKuz8DKxD1Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=89Bu7vk-mSs:oKuz8DKxD1Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=89Bu7vk-mSs:oKuz8DKxD1Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=89Bu7vk-mSs:oKuz8DKxD1Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/89Bu7vk-mSs" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-03-06T16:26:03.056Z</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/03/internet-explorer-8-beta-1.html</feedburner:origLink></item><item><title>Im a Dad!</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/9Ld4HAE79h4/im-dad.html</link><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Wed, 05 Mar 2008 12:16:13 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-505274551549480807</guid><description>&lt;p&gt;Sorry for not posting for so long... but I am now a dad to Adam William Dargan! &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.google.com/ross.dargan/R87_g-TmRYI/AAAAAAAAAPI/Hq_Mc8uRttA/IMGP5777%5B3%5D?imgmax=800"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="322" alt="IMGP5777" src="http://lh4.google.com/ross.dargan/R87_i-TmRZI/AAAAAAAAAPQ/54cpr5mqiTw/IMGP5777_thumb%5B1%5D?imgmax=800" width="423" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I just had to do a quick post after watching the mix 08 keynote speech (Thanks &lt;a href="http://blogs.msdn.com/powlo/default.aspx" target="_blank"&gt;Paul&lt;/a&gt;!).&lt;/p&gt;  &lt;p&gt;Some of the highlights included &amp;quot;Deep Zoom&amp;quot; which you can use here: &lt;a title="http://memorabilia.hardrock.com/" href="http://memorabilia.hardrock.com/"&gt;http://memorabilia.hardrock.com/&lt;/a&gt; - Very impressive!&lt;/p&gt;  &lt;p&gt;The other topic mentioned was IE 8. I'm really excited about the &amp;quot;Web Slices&amp;quot; technology - I'm glad that Microsoft chose to use MicroFormat technology to implement this rather than some new dodgy tag - shouldn't be too long until someone creates a firefox plugin for this! &lt;/p&gt;  &lt;p&gt;Silverlight for Nokia is pretty cool too... but I thought there was going to be another bigger announcement since this was released yesterday!&lt;/p&gt;  &lt;p&gt;Read Duncan Rileys live blog of the event over at &lt;a href="http://www.techcrunch.com/2008/03/05/microsoft-mix-keynote-one-live-from-las-vegas/" target="_blank"&gt;TechCrunch&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Hopefully Ill get back to blogging about WCF soon as possible!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-505274551549480807?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZH5occ0trTPnrKedsdrc0vcwow4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZH5occ0trTPnrKedsdrc0vcwow4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZH5occ0trTPnrKedsdrc0vcwow4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZH5occ0trTPnrKedsdrc0vcwow4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=9Ld4HAE79h4:-nSFRNPRk5U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=9Ld4HAE79h4:-nSFRNPRk5U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=9Ld4HAE79h4:-nSFRNPRk5U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=9Ld4HAE79h4:-nSFRNPRk5U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=9Ld4HAE79h4:-nSFRNPRk5U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/9Ld4HAE79h4" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-03-05T20:16:13.017Z</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/03/im-dad.html</feedburner:origLink></item><item><title>Windows Live Writer... a follow up</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/BG8JN3bBTeI/windows-live-writer-follow-up.html</link><category>Blogger</category><category>Fun</category><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Sun, 17 Feb 2008 10:11:48 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-5116098881647269651</guid><description>&lt;p&gt;Yesterday I blogged about &lt;a title="Windows Live Writer" href="http://blog.the-dargans.co.uk/2008/02/windows-live-writer.html"&gt;Windows Live Writer&lt;/a&gt; and after posting about wcf I have to say I love it! This is a must have program for anyone using Blogger! It handles images no problem at all (which Im sure it had issues with during the beta) - also is pretty nifty with maps!&lt;/p&gt;&lt;p&gt;The only thing missing was a way to insert code easily. Well thankfully Mike Ormond has come up with a great little plugin (&lt;a title="http://blogs.msdn.com/mikeormond/archive/2008/02/15/updated-source-code-formatter-for-windows-live-writer.aspx" href="http://blogs.msdn.com/mikeormond/archive/2008/02/15/updated-source-code-formatter-for-windows-live-writer.aspx"&gt;http://blogs.msdn.com/mikeormond/archive/2008/02/15/updated-source-code-formatter-for-windows-live-writer.aspx&lt;/a&gt;) This makes it incredibly easy to add code and still works with the javescript code viewer I wrote a little while ago.&lt;/p&gt;&lt;p&gt;To add the CSS in your blog to make it work correct take a little peek here: &lt;a href="http://blog.the-dargans.co.uk/2007/01/syntax-highlighting-in-blogger.html"&gt;http://blog.the-dargans.co.uk/2007/01/syntax-highlighting-in-blogger.html&lt;/a&gt;, and if you want the javascript viewer then take a look here: &lt;a title="http://blog.the-dargans.co.uk/2007/02/javascript-code-viewer.html" href="http://blog.the-dargans.co.uk/2007/02/javascript-code-viewer.html"&gt;http://blog.the-dargans.co.uk/2007/02/javascript-code-viewer.html&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;Cheers&lt;/p&gt;&lt;p&gt;Ross&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-5116098881647269651?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ym_PCuli9oKDnMuc2UTLsDAqa4E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ym_PCuli9oKDnMuc2UTLsDAqa4E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ym_PCuli9oKDnMuc2UTLsDAqa4E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ym_PCuli9oKDnMuc2UTLsDAqa4E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=BG8JN3bBTeI:SDo_9khm5rI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=BG8JN3bBTeI:SDo_9khm5rI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=BG8JN3bBTeI:SDo_9khm5rI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=BG8JN3bBTeI:SDo_9khm5rI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=BG8JN3bBTeI:SDo_9khm5rI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/BG8JN3bBTeI" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-17T18:11:48.613Z</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/02/windows-live-writer-follow-up.html</feedburner:origLink></item><item><title>WCF: First Steps</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/6IOQ81SAzQQ/wcf-first-steps.html</link><category>WCF</category><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Sun, 17 Feb 2008 02:48:47 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-3137519051606632068</guid><description>&lt;p&gt;WCF is basically a way of allowing applications to communicate. I know that's a very broad description but that is pretty much what the technology allows - the communication method (the bits that actually go down the line) is up to you (http/tcp/Named pipes - or even custom), the message you send is up to you to - normally XML is used... but that is your call, and finally the way the "conversation" takes place is up to you, be it full duplex (like talking on a phone), half duplex (like a walkie-talkie) or One way (like sending a letter).&lt;/p&gt;&lt;h2&gt;Getting Started&lt;/h2&gt;&lt;p&gt;So lets get started with the first hello world message! &lt;/p&gt;&lt;p&gt;Firstly lets get the plumbing in place. Fire up visual studio and create a console project called client. Now if you are using vista you need to start visual studio again but this time it must run as an administrator (right click on the icon and click run as administrator) - if you are using XP then you can just run it normally. Again create a console project but this time call it server. &lt;/p&gt;&lt;p&gt;Now for both projects add a reference to System.ServiceModel (right click on references, then click add reference&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.google.com/ross.dargan/R7gDrSehzuI/AAAAAAAAANw/7Ef0DV4HPAU/addref2?imgmax=800"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="244" alt="addref" src="http://lh6.google.com/ross.dargan/R7gDsCehzvI/AAAAAAAAAN4/PFsCPT06VWk/addref_thumb?imgmax=800" width="226" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Then select System.ServiceModel and click ok:&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.google.com/ross.dargan/R7gDuCehzwI/AAAAAAAAAOA/pTWOzWqlgcM/servicemodel2?imgmax=800"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="206" alt="servicemodel" src="http://lh5.google.com/ross.dargan/R7gDuyehzxI/AAAAAAAAAOI/xZaUxAxMRwo/servicemodel_thumb?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;And now for simplicity add a "Using System.ServiceModel;" to the top of both your client app and the server app.&lt;/p&gt;&lt;p&gt;Now we are ready to start coding!&lt;/p&gt;&lt;h2&gt;&lt;/h2&gt;&lt;h2&gt;Contract&lt;/h2&gt;&lt;p&gt;As with Webservices we need to define what is actually going to be transferred. The contract should not change (but there are certain exceptions such as adding method but Ill cover that later).&lt;/p&gt;&lt;p&gt;A WCF contract is simply an interface with a few attributes added. For this simple example we are going to return a message sent to us, so the contract is going to be:-&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;[&lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;v&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;]&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;I&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;W&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;O&lt;span class="kwrd"&gt;&lt;/span&gt;b&lt;span class="kwrd"&gt;&lt;/span&gt;j&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;{&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;[&lt;span class="kwrd"&gt;&lt;/span&gt;O&lt;span class="kwrd"&gt;&lt;/span&gt;p&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;]&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;R&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;u&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;}&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;Note how we have decorated the interface with a Service Contract and the method with the Operation Contract.&lt;/p&gt;&lt;p&gt;This interface must be copied to both the client and server app (yes a bit manual for now... but we will get to WSDL soon!)&lt;/p&gt;&lt;h2&gt;The Implementation&lt;/h2&gt;&lt;p&gt;So now we have our contract we must implement it! Nothing to complicated so Ill just copy my implementation - feel free to vary it, as long as you implement this interface the sample code below will still work!&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;W&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;O&lt;span class="kwrd"&gt;&lt;/span&gt;b&lt;span class="kwrd"&gt;&lt;/span&gt;j&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;:&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;I&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;W&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;O&lt;span class="kwrd"&gt;&lt;/span&gt;b&lt;span class="kwrd"&gt;&lt;/span&gt;j&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;{&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;W&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;O&lt;span class="kwrd"&gt;&lt;/span&gt;b&lt;span class="kwrd"&gt;&lt;/span&gt;j&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;{&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;W&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;L&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="str"&gt;"Object Created"&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;}&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;R&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;u&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;{&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;W&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;L&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="str"&gt;"Message Received: "&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;+&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="str"&gt;"Return: "&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;+&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;}&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;}&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;This code is just for the server.&lt;/p&gt;&lt;h2&gt;The host (&amp;amp; the bindings)&lt;/h2&gt;&lt;p&gt;The host orchestrates the calls to everything but its the bindings that specify how data flows. The default bindings are:-&lt;/p&gt;&lt;ul&gt;&lt;li&gt;BasicHttpBinding &lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms586935.aspx"&gt;WSHttpBinding&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb550452.aspx"&gt;WS2007HttpBinding&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms586909.aspx"&gt;WSDualHttpBinding&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms586925.aspx"&gt;WSFederationHttpBinding&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb551545.aspx"&gt;WS2007FederationHttpBinding&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb551545.aspx"&gt;WS2007FederationHttpBinding&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms576406.aspx"&gt;NetNamedPipeBinding&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms576397.aspx"&gt;NetMsmqBinding&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms576415.aspx"&gt;NetPeerTcpBinding&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms600424.aspx"&gt;MsmqIntegrationBinding&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;But then you always have the option of implementing your own custom binding!&lt;/p&gt;&lt;p&gt;(If you want to know more about these bindings then take a look here &lt;a title="http://msdn2.microsoft.com/en-us/library/ms731092.aspx" href="http://msdn2.microsoft.com/en-us/library/ms731092.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms731092.aspx&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;For this sample we will start using the basic http binding as its perhaps the easiest.&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;[&lt;span class="kwrd"&gt;&lt;/span&gt;]&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;{&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;W&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;L&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="str"&gt;"Server Started"&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;v&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;=&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;v&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;W&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;O&lt;span class="kwrd"&gt;&lt;/span&gt;b&lt;span class="kwrd"&gt;&lt;/span&gt;j&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;B&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;p&lt;span class="kwrd"&gt;&lt;/span&gt;B&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;T&lt;span class="kwrd"&gt;&lt;/span&gt;T&lt;span class="kwrd"&gt;&lt;/span&gt;P&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;=&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;B&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;p&lt;span class="kwrd"&gt;&lt;/span&gt;B&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;A&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;v&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;E&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;p&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="str"&gt;"Server.IHelloWorldObject"&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;,&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;T&lt;span class="kwrd"&gt;&lt;/span&gt;T&lt;span class="kwrd"&gt;&lt;/span&gt;P&lt;span class="kwrd"&gt;&lt;/span&gt;,&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="str"&gt;"http://localhost/HelloWorld"&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;O&lt;span class="kwrd"&gt;&lt;/span&gt;p&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;W&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;L&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="str"&gt;"Server Listening..."&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;R&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;L&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;}&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;Lets walk through this a little. WCF makes a lot of use of reflection to create the object above (HellowWorldObject) so all we do is pass into the service host method the type so it can instantiate it as and when a call comes in.&lt;/p&gt;&lt;p&gt;The binding part is pretty simple - just the default implementation.&lt;/p&gt;&lt;p&gt;Then we add the binding as an endpoint to the host. The method AddServiceEndpoint accepts a string stating the contract this endpoint implements (HelloWorldObject must implement this contract to!), a referance to the binding and finally the address it will listen to - in this sample we will just listen to "http://localhost/HelloWorld"&lt;/p&gt;&lt;p&gt;Then all we do is open the connection. When you run this application you may see this error if you didnt start the server application as an administrator (under Vista):-&lt;/p&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;HTTP could not register URL &lt;a href="http://+/HelloWorld/"&gt;http://+/HelloWorld/&lt;/a&gt;. Your process does not have access rights to this namespace (see &lt;a href="http://go.microsoft.com/fwlink/?LinkId=70353"&gt;http://go.microsoft.com/fwlink/?LinkId=70353&lt;/a&gt; for details).&lt;/p&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;p&gt;Simply close the project and restart it running as an administrator.&lt;/p&gt;&lt;h2&gt;The Client&lt;/h2&gt;&lt;p&gt;The client makes use of a channel factory - and again this code is pretty straight forward:-&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;[&lt;span class="kwrd"&gt;&lt;/span&gt;]&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;{&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;B&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;p&lt;span class="kwrd"&gt;&lt;/span&gt;B&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;T&lt;span class="kwrd"&gt;&lt;/span&gt;T&lt;span class="kwrd"&gt;&lt;/span&gt;P&lt;span class="kwrd"&gt;&lt;/span&gt;B&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;=&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;B&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;p&lt;span class="kwrd"&gt;&lt;/span&gt;B&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;h&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;F&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;y&lt;span class="kwrd"&gt;&lt;/span&gt;&amp;lt;I&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;W&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;O&lt;span class="kwrd"&gt;&lt;/span&gt;b&lt;span class="kwrd"&gt;&lt;/span&gt;j&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;&amp;gt; &lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;h&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;=&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;h&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;F&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;y&amp;lt;I&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;W&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;O&lt;span class="kwrd"&gt;&lt;/span&gt;b&lt;span class="kwrd"&gt;&lt;/span&gt;j&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;t&amp;gt;(&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;T&lt;span class="kwrd"&gt;&lt;/span&gt;T&lt;span class="kwrd"&gt;&lt;/span&gt;P&lt;span class="kwrd"&gt;&lt;/span&gt;B&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;I&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;W&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;O&lt;span class="kwrd"&gt;&lt;/span&gt;b&lt;span class="kwrd"&gt;&lt;/span&gt;j&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;=&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;h&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;h&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;new&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;E&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;p&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;A&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="str"&gt;"http://localhost/HelloWorld"&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;=&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="str"&gt;"Hello World"&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;W&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;L&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="str"&gt;"Sending Message: "&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;+&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;R&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;p&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;=&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;H&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;R&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;u&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;W&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;L&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="str"&gt;"Message Received: "&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;+&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;R&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;p&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;R&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;L&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;}&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;Again we add the Basic http binding (both client and server have to "talk" the same language).&lt;/p&gt;&lt;p&gt;The channel factory is a generic object which uses the interface so it knows what the contract is. We then create an instance of the interface by calling createchannel and passing in the endpoint we are going to listen to.&lt;/p&gt;&lt;p&gt;Then all we do is call the return message method - and that's it!&lt;/p&gt;&lt;h2&gt;The Results&lt;/h2&gt;&lt;p&gt;&lt;a href="http://lh3.google.com/ross.dargan/R7gOkSehzyI/AAAAAAAAAOQ/mKq6dufMRG8/Capture%5B3%5D?imgmax=800"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="110" alt="Capture" src="http://lh6.google.com/ross.dargan/R7gOlCehzzI/AAAAAAAAAOY/TRandMZhAc8/Capture_thumb%5B1%5D?imgmax=800" width="379" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;And if we run the client again we get the following from the server:-&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.google.com/ross.dargan/R7gOlyehz0I/AAAAAAAAAOg/v013SfR9eZk/Capture2%5B3%5D?imgmax=800"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="84" alt="Capture2" src="http://lh4.google.com/ross.dargan/R7gOmiehz1I/AAAAAAAAAOo/uKw_sZLyi54/Capture2_thumb%5B1%5D?imgmax=800" width="386" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Nothing too surprising there except perhaps the fact that the object is create twice. Ill cover how to stop this and manage session in a later tutorial.&lt;/p&gt;&lt;h2&gt;The End&lt;/h2&gt;&lt;p&gt;Ok that is a very simple look at WCF. I'm hoping this will be the start of a series looking and some more complicated examples but we will see how many people are interested in this first!&lt;/p&gt;&lt;p&gt;You can grab the code form here if you want to download it &lt;a title="http://www.box.net/shared/vf0z8er4o8" href="http://www.box.net/shared/vf0z8er4o8"&gt;http://www.box.net/shared/vf0z8er4o8&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-3137519051606632068?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cRcPqwPOxNqckvp6XsRIiARUIBw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cRcPqwPOxNqckvp6XsRIiARUIBw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cRcPqwPOxNqckvp6XsRIiARUIBw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cRcPqwPOxNqckvp6XsRIiARUIBw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=6IOQ81SAzQQ:UTiz2ik1YoM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=6IOQ81SAzQQ:UTiz2ik1YoM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=6IOQ81SAzQQ:UTiz2ik1YoM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=6IOQ81SAzQQ:UTiz2ik1YoM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=6IOQ81SAzQQ:UTiz2ik1YoM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/6IOQ81SAzQQ" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-17T10:48:47.682Z</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/02/wcf-first-steps.html</feedburner:origLink></item><item><title>Windows Live Writer</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/WoAGhnH_DwA/windows-live-writer.html</link><category>Fun</category><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Sat, 16 Feb 2008 02:16:44 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-8236342308686583351</guid><description>&lt;p&gt;&lt;a href="http://lh5.google.com/ross.dargan/R7a4CSehzsI/AAAAAAAAANg/9wyI81gUGvY/Writer_OverviewBeach_Graphic%5B5%5D?imgmax=800"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="194" alt="Writer_OverviewBeach_Graphic" src="http://lh3.google.com/ross.dargan/R7a4CyehztI/AAAAAAAAANo/450ZQZQ0V0w/Writer_OverviewBeach_Graphic_thumb%5B3%5D?imgmax=800" width="244" align="right" border="0" /&gt;&lt;/a&gt; I figure that given I have just ditched Hotmail completely I should try and swap it for another Microsoft product... so here I go trying Live Writer.&lt;/p&gt;  &lt;p&gt;I have no idea if this will work but this interface is very nice (I love how it still brings through your existing tags from Blogger). Also the web preview is just fantastically clever! I am very impressed!!&lt;/p&gt;  &lt;p&gt;Feel free to try it yourself from here: &lt;a title="http://get.live.com/writer/overview" href="http://get.live.com/writer/overview"&gt;http://get.live.com/writer/overview&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And it is great to see Software+Services working together so nicely!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Ross&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-8236342308686583351?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vMdl22HQMvfMEeWUWvOlKvqAff4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vMdl22HQMvfMEeWUWvOlKvqAff4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vMdl22HQMvfMEeWUWvOlKvqAff4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vMdl22HQMvfMEeWUWvOlKvqAff4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=WoAGhnH_DwA:Ik1ti9c7Qts:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=WoAGhnH_DwA:Ik1ti9c7Qts:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=WoAGhnH_DwA:Ik1ti9c7Qts:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=WoAGhnH_DwA:Ik1ti9c7Qts:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=WoAGhnH_DwA:Ik1ti9c7Qts:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/WoAGhnH_DwA" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-16T10:16:44.976Z</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/02/windows-live-writer.html</feedburner:origLink></item><item><title>North Pack</title><link>http://feedproxy.google.com/~r/DevelopmentDiaries/~3/8kv09ZOCQHg/north-pack.html</link><category>Northpack</category><author>noreply@blogger.com (Ross Dargan)</author><pubDate>Tue, 09 Dec 2008 02:37:23 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3404451797694685821.post-3934309835415649347</guid><description>&lt;img id="BLOGGER_PHOTO_ID_5167510505805434530" style="FLOAT: right; MARGIN: 0px 0px 10px 10px;" alt="" src="http://3.bp.blogspot.com/_XNLFf_IbM28/R7avbSehzqI/AAAAAAAAANU/RB_3-kfAJ8s/s320/Capture.PNG" border="0" /&gt;&lt;div&gt;Just a quick post to say hello to the guys over at &lt;a href="http://northpack.co.uk/"&gt;http://northpack.co.uk/&lt;/a&gt; (Thanks &lt;a href="http://3dogsbark.com/"&gt;Mitch &lt;/a&gt;for the heads up!). This is a community to serve the North and whilst all the events at the minute appear to be Leeds and Manchester focused hopefully it wont take long to get something more Newcastle way.&lt;br /&gt;&lt;br /&gt;They describe themselves as:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;NorthPack is an ambitious project which aims to unite web related&lt;br /&gt;professionals based in the North of England and shine a spotlight on the&lt;br /&gt;Northern community, providing a showcase for talent and the great work that goes&lt;br /&gt;on "up North".&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;So if that describes you why not sign up and add your blog to there RSS syndicate.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Ross&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3404451797694685821-3934309835415649347?l=blog.the-dargans.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/i2ly82lNDQqcKbN_lhLWajWUnzc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i2ly82lNDQqcKbN_lhLWajWUnzc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/i2ly82lNDQqcKbN_lhLWajWUnzc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i2ly82lNDQqcKbN_lhLWajWUnzc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=8kv09ZOCQHg:Z_u_eF3qLUM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=8kv09ZOCQHg:Z_u_eF3qLUM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=8kv09ZOCQHg:Z_u_eF3qLUM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentDiaries?a=8kv09ZOCQHg:Z_u_eF3qLUM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentDiaries?i=8kv09ZOCQHg:Z_u_eF3qLUM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentDiaries/~4/8kv09ZOCQHg" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-09T10:37:23.900Z</app:edited><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_XNLFf_IbM28/R7avbSehzqI/AAAAAAAAANU/RB_3-kfAJ8s/s72-c/Capture.PNG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.the-dargans.co.uk/2008/02/north-pack.html</feedburner:origLink></item></channel></rss>
