<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Bill's House O Insomnia&lt;img src="http://www.williamgryan.com/images/werecuckoosmall.jpg" alt="Bill Ryan" /&gt;</title><link>http://msmvps.com/blogs/williamryan/default.aspx</link><description>Striking terror into the hearts of all Guitar Hero III Playaz.</description><dc:language>en</dc:language><generator>CommunityServer 2008 SP1 (Build: 30619.63)</generator><item><title>Utter Coolness compliments of Roku</title><link>http://msmvps.com/blogs/williamryan/archive/2008/07/03/utter-coolness-compliments-of-roku.aspx</link><pubDate>Thu, 03 Jul 2008 20:01:14 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1639274</guid><dc:creator>William</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1639274</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/07/03/utter-coolness-compliments-of-roku.aspx#comments</comments><description>&lt;p&gt;My first &lt;a href="http://www.roku.com/"&gt;Roku Soundbridge&lt;/a&gt; joined the family back in 2005. As far as wireless media players go, it was a bit pricey.&amp;nbsp; But it looked really cool and I got it through a special offer making it a lot more reasonable.&amp;nbsp; The form factor and styling was the main thing I attributed the cost to, but I quickly learned that it was all the cool features that were responsible for the cost.&amp;nbsp; That was pretty much the case with each Roku product I&amp;#39;ve owned, they looked really cool and had all sorts of unanticipated goodness brimming throughout.&amp;nbsp; With Windows Home Server, an XBox 360 as an extender and a few Media Center pc&amp;#39;s in the house, it&amp;#39;s been a while since I looked at any Roku products, mainly b/c I just didn&amp;#39;t really need them - one network media player is usually plenty, let alone several.&amp;nbsp; But when I saw &lt;a href="http://www.engadget.com/2008/07/02/roku-serves-up-netflix-player-source-code/"&gt;Endgadget&amp;#39;s latest post on the sheer coolness of Roku&lt;/a&gt;, it made me realize what I was missing.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;So at first glance, it looked like Roku came up with a streaming media player which served up content from Netflix.&amp;nbsp; I always found Netflix&amp;#39;s pre-addressed envelopes a really nice touch - and a convenient one at that.&amp;nbsp; But Every time I&amp;#39;ve signed up for Netflix, it ended up being a waste of money b/c I don&amp;#39;t typically get around to watching many movies in any given month.&amp;nbsp; So I&amp;#39;ve signed up a few times only to cancel my account b/c of lack of use (Kim and I just can&amp;#39;t seem to let go of paying for movie rental late fees ;-)&amp;nbsp; ).&amp;nbsp; After the third or fourth time, i just sort of gave up on the whole thing.&amp;nbsp;&amp;nbsp;&amp;nbsp; By the &lt;a href="http://www.engadget.com/2008/07/02/roku-serves-up-netflix-player-source-code/"&gt;second sentence in this paragraph&lt;/a&gt;, I realized it&amp;#39;s time to rethink that policy - and go enable my subscription.&lt;/p&gt; &lt;p&gt;Roku is a truly innovative company with nothing but cool products, but it looks like they might have just raised their own bar.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1639274" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/williamryan/archive/tags/News/default.aspx">News</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Roku/default.aspx">Roku</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Mindless+Babbling/default.aspx">Mindless Babbling</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Misc+Technology/default.aspx">Misc Technology</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Open+Source/default.aspx">Open Source</category></item><item><title>Speaking of Funny</title><link>http://msmvps.com/blogs/williamryan/archive/2008/07/01/speaking-of-funny.aspx</link><pubDate>Tue, 01 Jul 2008 14:52:11 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1639003</guid><dc:creator>William</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1639003</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/07/01/speaking-of-funny.aspx#comments</comments><description>&lt;p&gt;On the drive to work this morning, Glenn Beck had even picked up on the whole &lt;a href="http://www.hotchickswithdouchebags.com/dimitri.mp3"&gt;Dimitri&lt;/a&gt; thing posted on &lt;a href="http://www.hotchickswithdouchebags.com/"&gt;HCwDB&lt;/a&gt;. It is definitely worth downloading!&amp;nbsp; &lt;a href="http://www.brains-n-brawn.com/"&gt;KC&lt;/a&gt; and &lt;a href="http://ryanolshan.com/technology/"&gt;Ryan&lt;/a&gt; turned me on to &lt;a href="http://www.hotchickswithdouchebags.com/"&gt;HCwDB&lt;/a&gt; when we were at the summit, and it&amp;#39;s just kick a55 beyond the ability of words to describe it.&amp;nbsp; And Dimitri&amp;#39;s message is as good as it gets.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1639003" width="1" height="1"&gt;</description></item><item><title>Stuff White People Like - The Book  - On Sale Tomorrow</title><link>http://msmvps.com/blogs/williamryan/archive/2008/07/01/stuff-white-people-like-the-book-on-sale-tomorrow.aspx</link><pubDate>Tue, 01 Jul 2008 14:48:37 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1639002</guid><dc:creator>William</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1639002</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/07/01/stuff-white-people-like-the-book-on-sale-tomorrow.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.stuffwhitepeoplelike.com"&gt;Stuff White People Like&lt;/a&gt; is just plain excellent and their book &lt;a href="http://shrinkster.com/zvh"&gt;goes on sale tomorrow&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1639002" width="1" height="1"&gt;</description></item><item><title>Phishers still unaware of SpellCheck</title><link>http://msmvps.com/blogs/williamryan/archive/2008/06/22/phishers-still-unaware-of-spellcheck.aspx</link><pubDate>Sun, 22 Jun 2008 21:24:02 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1636805</guid><dc:creator>William</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1636805</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/06/22/phishers-still-unaware-of-spellcheck.aspx#comments</comments><description>&lt;p&gt;I just got this email sent to my gmail account.&amp;nbsp; For all the effort they put into this, there&amp;#39;s a pretty serious giveaway that it&amp;#39;s shady: (I turned off links so no one accidentally falls for it).&lt;/p&gt; &lt;p&gt;Microsoft Cororation Inc. ® &amp;lt;update@microsoft.com&amp;gt;&lt;br /&gt;reply-to&amp;quot;Microsoft Cororation Inc. ®&amp;quot; &amp;lt;update@microsoft.com&amp;gt;  &lt;p&gt;&amp;nbsp; &lt;p&gt;dateSun, Jun 22, 2008 at 5:14 PM&lt;br /&gt;subjectWindows Update Critical Security Update for Microsoft Windows (KB946026)  &lt;p&gt;hide details 5:14 PM (7 minutes ago) Reply  &lt;p&gt;Images are not displayed.&lt;br /&gt;Display images below - Always display images from update@microsoft.com  &lt;p&gt;Critical Security Update for Microsoft Windows (KB946026)  &lt;p&gt;A critical security issue has been identified that could allow an attacker to compromise a computer running Windows and gain control over your system and files.This issue has been discussed in KB946026 Microsoft Knowledge Base. Microsoft Security Response Team recommends to protect your computer by installing this update from Microsoft.  &lt;p&gt;Patch Information: &lt;br /&gt;Type:Critical Security Update&lt;br /&gt;Vulnerability:High&lt;br /&gt;Vendor notified:March, 17, 2008&lt;br /&gt;Update Release Date:June, 22, 2008 &lt;br /&gt;Download Size:824 KB, &amp;lt; 2 minutes @ 56.6 modem&lt;br /&gt;File Name:WINDOWS-KB946026-X86-ENU&lt;br /&gt;Affected Versions:Microsoft Windows XP/2003  &lt;p&gt;To install this update, follow these instructions:&lt;br /&gt;1Download WINDOWS-KB946026-X86-ENU file from Windows Update site or open an attached file.  &lt;p&gt;2After you install this item, you may have to restart your computer, to ensure a full protection.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1636805" width="1" height="1"&gt;</description></item><item><title>Chris Craft's 30 Days of .NET for Windows Mobile</title><link>http://msmvps.com/blogs/williamryan/archive/2008/06/11/chris-craft-s-30-days-of-net-for-windows-mobile.aspx</link><pubDate>Wed, 11 Jun 2008 15:01:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1634023</guid><dc:creator>William</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1634023</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/06/11/chris-craft-s-30-days-of-net-for-windows-mobile.aspx#comments</comments><description>&lt;p&gt;Chris sure is &lt;a href="http://www.cjcraft.com/blog/default.aspx"&gt;talking softly and carrying a big stick&lt;/a&gt;&amp;nbsp;.&amp;nbsp; The 30 days thing is a great concept and he&amp;#39;s doing a bang up job.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1634023" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Compact+Framework/default.aspx">Compact Framework</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category></item><item><title>God I hate Ajax</title><link>http://msmvps.com/blogs/williamryan/archive/2008/06/08/god-i-hate-ajax.aspx</link><pubDate>Mon, 09 Jun 2008 02:11:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1633111</guid><dc:creator>William</dc:creator><slash:comments>15</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1633111</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/06/08/god-i-hate-ajax.aspx#comments</comments><description>&lt;p&gt;I was typing up a blog post earlier today and after 15 or so complete 5-10 second freezes, my browser finally crashed.&amp;nbsp; That was using IE 7.&amp;nbsp; IE 8 is a whole different story (and so, not a very good one).&amp;nbsp; So I started to think about how frequently my mobile browsing experience sucks.&amp;nbsp; Every single day, several times, I&amp;#39;ll run into a huge browser hang or some other performance nightmare that just makes my blood boil. If it was just once a day, it&amp;#39;d be one thing. If it was just on the desktop or the mobile device, it&amp;#39;d be one thing.&amp;nbsp; But ever since the world decided that every single g-d page needs Ajax in it - the overall browsing experience sucks.&amp;nbsp; And as I think more and more about it, how nice it was at first not to deal with Postbacks, I started to think &amp;quot;Maybe there&amp;#39;s a GOOD reason Ajax didn&amp;#39;t take off .... 10 years ago when it first came out.&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Think about it for a second, there could certainly be valid reasons it happened, but why is it that Ajax was pretty much totally overlooked years ago when it first came out - and then 10 years later, Jesse James whatever his name is dubs it Ajax and the whole world is shaken.&amp;nbsp; WTF?&amp;nbsp; If it was really that awesome, wouldn&amp;#39;t at least some significant portion of the market have realized it?&amp;nbsp; So here we are today - where you simply can&amp;#39;t escape Ajax.&amp;nbsp; I mean, how many Flash sites have &amp;quot;Skip Demo&amp;quot; or &amp;quot;Non-Flash Site&amp;quot; available?&amp;nbsp; Why can&amp;#39;t the same thing happen with Ajax?&lt;/p&gt;
&lt;p&gt;When i think about my daily browsing, Ajax saves me a few minutes a day.&amp;nbsp; The Intellisense in Gmail is pretty helpful and I use that a lot.&amp;nbsp; There are a few other places as well. But on the whole, when I look at how much time I lose to my browser hanging for seconds at a time, or from it crashing - there&amp;#39;s no doubt I&amp;#39;m at a net loss.&amp;nbsp; Now you might be thinking &amp;quot;But all those browser crashes aren&amp;#39;t specifically from Ajax, it&amp;#39;s not like browsers never crashed before&amp;quot;.&amp;nbsp; Ok, there&amp;#39;s definitely some validity to that.&amp;nbsp; But I know that I could count the number of times I got a &amp;quot;This script is running longer than expected&amp;quot; dialog box on my Pocket PC/Smartphone prior to Ajax.&amp;nbsp; And yep, I get it every single day now, several times. And in every case I&amp;#39;ve bothered to look into, it was Ajax.&amp;nbsp; I know on Community Server (one of the more frequent places), it&amp;#39;s due to the Ajax loading on a few specific pages.&amp;nbsp; And good lord, what happened to Gmail?&amp;nbsp; I remember when I used to be impressed with how fast it was, as opposed to now where I tolerate how slow it is b/c I use Gmail for everything.&amp;nbsp;&amp;nbsp; When I log in now, I&amp;#39;d fall over dead if I actually got gmail to fully load in under 10 seconds...&amp;nbsp; Thank God for the HTML only feature...something I wish a whole lot more sights would have.&amp;nbsp; Or at least a &amp;quot;This sight contains Ajax, hahahahahahahahahahahaha sucker&amp;quot; so I could be forewarned.&lt;/p&gt;
&lt;p&gt;And I know, it&amp;#39;s not Ajax&amp;#39;s fault. Since it became trendy to use, people are putting it everywhere.&amp;nbsp; I am so old I actually remember when dev meetings centered around how fast a page could load as opposed to what features could be replaced with Ajax, but I digress.&amp;nbsp; So it&amp;#39;s the overuse and lack of alternatives that&amp;#39;s causing the problem. And eventually it will work itself out.&amp;nbsp; When it gets here, it won&amp;#39;t be a second too soon.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1633111" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Rants/default.aspx">Rants</category></item><item><title>Looking for some .NET Developers</title><link>http://msmvps.com/blogs/williamryan/archive/2008/06/06/looking-for-some-net-developers.aspx</link><pubDate>Sat, 07 Jun 2008 02:19:26 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1632527</guid><dc:creator>William</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1632527</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/06/06/looking-for-some-net-developers.aspx#comments</comments><description>&lt;p&gt;A client of mine located in the Aiken/Columbia South Carolina Area has asked me if I had any friends who are .NET Developers and looking for a job. They are looking for at least one Junior Developer, on Mid-Level Developer and several Senior developers.&amp;nbsp; I know these folks quite well and I can vouch for the following:&amp;nbsp; &lt;/p&gt; &lt;ul&gt; &lt;li&gt;They pay extremely well&lt;/li&gt; &lt;li&gt;Generous benefits package&lt;/li&gt; &lt;li&gt;There&amp;#39;s plenty of cool people on their staff&lt;/li&gt; &lt;li&gt;They are growing at an explosive rate so there&amp;#39;s plenty of room for upward mobility. There&amp;#39;s also a very strong focus on learning/teaching and career development.&lt;/li&gt; &lt;li&gt;They are an Agile/SCRUM shop&lt;/li&gt; &lt;li&gt;Currently developing with the following technologies:&lt;/li&gt; &lt;ul&gt; &lt;li&gt; Visual Studio Team System 2008 / .NET 3.5 Framework&lt;/li&gt; &lt;li&gt;Windows Communication Foundation&lt;/li&gt; &lt;li&gt;Windows Presentation Foundation&lt;/li&gt; &lt;li&gt;ASP.NET&lt;/li&gt; &lt;li&gt;LINQ&lt;/li&gt; &lt;li&gt;Silverlight&lt;/li&gt; &lt;li&gt;Windows Mobile 5/ Windows Mobile 6/ .NET Compact Framework&lt;/li&gt; &lt;li&gt;Sql Server 2005 / Sql Server 2008&lt;/li&gt; &lt;li&gt;Windows Installer for XML&lt;/li&gt; &lt;li&gt;Sandcastle&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt; &lt;p&gt;If you&amp;#39;re in the area and looking for a job... if you know someone who looking for a job.... or if you&amp;#39;re willing to move, please drop me a line using the Contact option on&amp;nbsp; my blog or emailing me directly at &lt;a href="mailto://WilliamRyan@gmail.com"&gt;WilliamRyan@gmail.com&lt;/a&gt; and I&amp;#39;ll put you in contact with them.&amp;nbsp; They are looking to hire folks immediately so I can probably get you an interview within a few days.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Junior Developer:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Ideal candidate will be a recent college graduate with a Computer Science of MIS degree.&amp;nbsp; No experience is necessary for this position. The main soft-skill qualifications for this position are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;A true love for development&lt;/li&gt; &lt;li&gt;Strong desire to learn&lt;/li&gt; &lt;li&gt;A desire to stand out among one&amp;#39;s peers&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; The hard-skill qualifications include a good theoretical understanding of at least two of the following:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Object Oriented Design and Analysis&lt;/li&gt; &lt;li&gt;Relational Database theory&lt;/li&gt; &lt;li&gt;Design Patterns&lt;/li&gt; &lt;li&gt;Familiarity with at least two of the following:&amp;nbsp; C, C++, Java, C#, VB.NET&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;This is essentially a dream job for recent college grads b/c the job is being offered &amp;quot;no experience required&amp;quot;.&amp;nbsp; Since they are a SCRUM/Agile shop, you&amp;#39;ll get to work extensively with their Senior and Mid level devs via Pair Programming.&amp;nbsp;&amp;nbsp; You&amp;#39;ll be able to pick&amp;nbsp; an area to specialize in which you will decide on for yourself. Additionally, you&amp;#39;ll be using some of the most sought after Microsoft technologies available.&amp;nbsp; Go to Monster.com or Dice.com and see for yourself how much demand there is for the above technologies and how much those jobs pay.&amp;nbsp; You&amp;#39;ll get to work with these on day 1 and essentially carve out a path for yourself using whichever technologies you like the best.&amp;nbsp; If you want to be a &amp;quot;UI&amp;quot; expert, that&amp;#39;s where you&amp;#39;ll be put. If you want to be a Web Services dev, again, that&amp;#39;s what you can focus on.&amp;nbsp; If you want to be an expert buildmaster who specializes in installers, that&amp;#39;s what you&amp;#39;ll get to do.&amp;nbsp; The company is looking for some excellent candidates and willing to offer a really fun and great paying job with plenty of training and career development available.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Mid-Level Developer:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The ideal candidate will have a computer science or MIS degree and 1-3 years of development experience.&amp;nbsp; The ideal candidate will have two or more the following abilities:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Solid command of OOP/OOD using C++, C#, Java or VB.NET&lt;/li&gt; &lt;li&gt;Test Driven Design&lt;/li&gt; &lt;li&gt;Service Oriented Architecture&lt;/li&gt; &lt;li&gt;Familiarity with MySql, Sql Server (T-SQL), Oracle (PL/SQL)&lt;/li&gt; &lt;li&gt;Basic understanding of both Winforms and ASP.NET&lt;/li&gt; &lt;li&gt;Basic familiarity with Web Services, MSMQ, Enterprise Services/COM+, .NET Remoting, DCOM, J2EE, Java Beans&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Just like the Junior development positions, these ones will provide a great deal of flexibility to learn and specialize the area of your choice.&amp;nbsp; These are considered &amp;#39;fast track&amp;#39; positions to move into the Senior Developer or Architect roles&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Senior Developer:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The ideal candidate will be someone with at least 4 years experience.&amp;nbsp; This person will love challenges and love coming up with solutions to problems that other people run from.&amp;nbsp; They will be people that love figuring out how to do things that everyone else said can&amp;#39;t be done.&amp;nbsp; They will be the stereotypical Alpha-Geek, Someone that spends their spare time &lt;a href="http://newtechusa.com/csharp-dotnet-quiz.asp"&gt;answering quiz questions like these&lt;/a&gt;:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;All of the requirements for the Mid-Level Developer as well as several of the following skills:&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Proficiency with T-Sql or PL/SQL.&amp;nbsp; You should be able to write a 5 table join on your own. You should have written several stored procedures that were &amp;gt; 100 lines long.&lt;/li&gt; &lt;li&gt;Strong command of query tuning and ability to easily spot design flaws&lt;/li&gt; &lt;li&gt;Ability to design &amp;#39;real&amp;#39; objects.&amp;nbsp; &lt;/li&gt; &lt;ul&gt; &lt;li&gt;Someone who pays meticulous attention to the scope modifiers of their classes/functions/properties&lt;/li&gt; &lt;li&gt;Someone who understands the problems associated with coupling and strives to avoid it.&lt;/li&gt; &lt;li&gt;Someone who can write and use events in their classes without thinking twice about it.&lt;/li&gt; &lt;li&gt;Someone with a solid understanding of thread safety and thread synchronization&lt;/li&gt; &lt;li&gt;Someone who is comfortable using several different design patterns&lt;/li&gt; &lt;li&gt;Someone who is comfortable implementing several different interfaces in one object, using combinations of interface implementation and inheritance and someone who can use inheritance responsibly&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Keeps up with technology, reads computer books regularly, has favorite blogs in multiple disciplines and/or blogs themselves, attends or speaks at user&amp;#39;s groups, is active in one or more online forum or newsgroup&lt;/li&gt; &lt;li&gt;Someone who answers &amp;quot;Which is better, C# or VB.NET?&amp;quot; with &amp;quot;Either can be better depending on the circumstances but I&amp;#39;m comfortable writing in either of them&amp;quot; and then &amp;quot;But I&amp;#39;ve been learning F# lately and it&amp;#39;s really been growing on me&amp;quot;&lt;/li&gt; &lt;li&gt;Experience with .NET Remoting, Web Services &amp;amp; Web Services Enhancements, MSMQ, Enterprise Services and/or WCF&lt;/li&gt; &lt;li&gt;Ability to create syntactically correct UML diagrams (meaning they can do more than write the letters &amp;quot;UML&amp;quot; on their resume) and if not, they are willing to learn to do this.&lt;/li&gt; &lt;li&gt;Understands data structures solidly and could easily implement their own HashTable or LinkedList &lt;/li&gt; &lt;li&gt;Someone who&amp;#39;s always looking to come up with a newer, cooler, faster, and more secure way to do implement something&lt;/li&gt; &lt;li&gt;Experienced with either Biztalk server or Sharepoint&lt;/li&gt; &lt;li&gt;Takes pride in their code without falling in love with it or getting all defensive about it.&amp;nbsp; Ability to acknowledge the fact that everyone makes mistakes and can talk about their mistakes/bugs without getting defensive.&lt;/li&gt; &lt;li&gt;Someone who is the first to raise their hand whenever the boss says &amp;quot;I need someone to learn ____________, do I have any volunteers&amp;quot;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt; &lt;p&gt;Basically, if you love development, love creating new cutting edge solutions all the while making a lot of money and having a lot of fun you definitely should talk to these folks.&amp;nbsp; If you&amp;#39;re interested...... Please drop me a line using the Contact option on&amp;nbsp; my blog or emailing me directly at &lt;a href="mailto://WilliamRyan@gmail.com"&gt;WilliamRyan@gmail.com&lt;/a&gt; and I&amp;#39;ll put you in contact with them.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1632527" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Compact+Framework/default.aspx">Compact Framework</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Data+Access/default.aspx">Data Access</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Web+Services+_2F00_+WSE/default.aspx">Web Services / WSE</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/.NET+Basics/default.aspx">.NET Basics</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/.NET+General/default.aspx">.NET General</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Coding+Techniques/default.aspx">Coding Techniques</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Misc+Technology/default.aspx">Misc Technology</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Biztalk/default.aspx">Biztalk</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/WPF/default.aspx">WPF</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/WCF/default.aspx">WCF</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/.NET+3.0+Framework/default.aspx">.NET 3.0 Framework</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/WIX/default.aspx">WIX</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Sql+Server+Integration+Services/default.aspx">Sql Server Integration Services</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/SSIS/default.aspx">SSIS</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Sql+Server/default.aspx">Sql Server</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Sql+Server+2008/default.aspx">Sql Server 2008</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Sharepoint/default.aspx">Sharepoint</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/LINQ+To+ADO.NET/default.aspx">LINQ To ADO.NET</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/.NET+3.5+Framework/default.aspx">.NET 3.5 Framework</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/LINQ+Training/default.aspx">LINQ Training</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/ADO.NET+3.5/default.aspx">ADO.NET 3.5</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/C_2300_+3.5/default.aspx">C# 3.5</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Job+Stuff/default.aspx">Job Stuff</category></item><item><title>My first hours with my Amazon Kindle</title><link>http://msmvps.com/blogs/williamryan/archive/2008/05/29/my-first-hours-with-my-amazon-kindle.aspx</link><pubDate>Thu, 29 May 2008 04:32:23 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1628565</guid><dc:creator>William</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1628565</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/05/29/my-first-hours-with-my-amazon-kindle.aspx#comments</comments><description>&lt;p&gt;I decided to order an &lt;a href="http://www.amazon.com/gp/product/B000FI73MA/ref=s9kin_c1_imgk?pf_rd_m=ATVPDKIKX0DER&amp;amp;pf_rd_s=center-1&amp;amp;pf_rd_r=0X0YF4KED6EJEVF08YYB&amp;amp;pf_rd_t=101&amp;amp;pf_rd_p=398464101&amp;amp;pf_rd_i=507846"&gt;Amazon Kindle&lt;/a&gt;.&amp;nbsp; As patience is not something I am overly endowed with, I paid the extra money for the expedited shipping. Along with it I bought a backup battery, another case, a car charger, home charger and storage cards (wow are they cheap on Amazon). It arrived exactly at 3:00 PM today.&lt;/p&gt; &lt;p&gt;The packaging is quite elegant although it borders on overdone. It took me about 5 minutes to get it out of the box.&amp;nbsp; There&amp;#39;s a plastic sticker on the front of it telling you obvious things like &amp;quot;It needs charged&amp;quot; and the like.&amp;nbsp; I charged it and after 2 hours, couldn&amp;#39;t wait any longer.&lt;/p&gt; &lt;p&gt;I had already bought a few books, so I was waiting to see what it was going to be like pulling them down.&amp;nbsp; It&amp;#39;s noteworthy that as much as I love T-Mobile, I get no coverage in my office building.&amp;nbsp; The EVDO connection registers full strength irrespective of where I walked around.&amp;nbsp; In somewhere around 1 minute or two, I saw my books available. It probably took 5 minutes total to get all of them - there were 8 in total.&lt;/p&gt; &lt;p&gt;I was really worried about the screen.&amp;nbsp; At first &lt;a href="http://www.youtube.com/watch?v=XqTwhOyYWo0"&gt;Ann&lt;/a&gt; seemed to indicate the liked the overall experience but then she posted &lt;a href="http://althouse.blogspot.com/2008/05/real-problem-with-electronic-books.html"&gt;this rather harsh critique&lt;/a&gt; perfectly timed to make me worry it&amp;#39;d be a dud.&amp;nbsp; I don&amp;#39;t always agree with her on gadget issues so I hoped she was wrong. Besides, much of her critique seemed to be a cross between curmudgeonry and Book related Ludditeness (or whatever the adjective form of Luddite is).&amp;nbsp; And based on my heretofore experiences with e-books, i certainly understand where she&amp;#39;s coming from.&amp;nbsp; In short, her comments seemed to speak more to e-book readers in general than the Kindle, but she was speaking about the Kindle overall.&amp;nbsp; When i got mine, I quickly wanted to see what the screen was like and well, there&amp;#39;s plenty of contrast. It&amp;#39;s plenty bright and amazingly easy on the eyes. Compared to her iPhone the display might be a little lame, but it&amp;#39;s a heck of a lot easier to read IMHO than even her attempt at subtlety on her page ;-)&amp;nbsp; .&amp;nbsp; So the reviews are out. If you&amp;#39;re me you&amp;#39;ll find it great. But not everyone shares that viewpoint. The good news is that it&amp;#39;s all pretty much either love it or hate it so you&amp;#39;ve got a 50/50 chance.&lt;/p&gt; &lt;p&gt;I think there are two areas that no one can disagree with.&amp;nbsp; The speed/responsiveness is so impressive I almost started to yearn for the old DOS days and browsing with LINX.&amp;nbsp; Yes, it&amp;#39;s relatively plain (as Ann says, it&amp;#39;s very etch-a-sketch like) but it&amp;#39;s very fast.&amp;nbsp; There&amp;#39;s a tiny delay which is intentional when you flip pages, but there&amp;#39;s none of the painful annoying hangs that we&amp;#39;ve come to get used to ever since the world mandated that every web page should have Ajax in it somewhere and every UI form needs to pretend it&amp;#39;s a MAC.&amp;nbsp; Fast fast fast and responsive.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Ease of use is another are that it really excels in.&amp;nbsp; There are several ways to navigate and it lends itself well to left handed people (for instance, you can page forward or back with your left hand). It&amp;#39;s light as h3ll and you can easily hold it in one hand.&amp;nbsp; I often try to read while I&amp;#39;m on the elliptical machine and it&amp;#39;s a nightmare - it was wonderfully easy using the Kindle.&lt;/p&gt; &lt;p&gt;So far, I&amp;#39;ve logged about 3 hours of use on it and I have yet to see the power bar drop at all.&amp;nbsp; That alone makes it infinitely better than my UMPC for e-book reading.&lt;/p&gt; &lt;p&gt;I also tried to buy a few more books using the Kindle and bought a few blog feeds.&amp;nbsp; Once your account is set up, it&amp;#39;s about as easy as can be. you search for what you want, select it and buy it with one-click.&lt;/p&gt; &lt;p&gt;So the only thing that I&amp;#39;ve seen that could make the Kindle suck is if it was really fragile or if there weren&amp;#39;t many titles.&amp;nbsp; Every single non-programming book I looked for was available and 85% of the programming books I searched for were available.&amp;nbsp; I don&amp;#39;t plan on bouncing it off the ground but I&amp;#39;m sure I will (although I have to say the included carrying case is pretty clever and gets the job done well. I&amp;#39;m not sure I needed the other cover I bought).&lt;/p&gt; &lt;p&gt;Only having had it a day, I couldn&amp;#39;t be more pleased.&amp;nbsp; Let me use it some more and I&amp;#39;ll see if something comes out that I don&amp;#39;t like, there&amp;#39;s got to be something although I sure haven&amp;#39;t found it yet.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1628565" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Kindle/default.aspx">Kindle</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Amazon+Kindle/default.aspx">Amazon Kindle</category></item><item><title>Bill gets an Amazon Kindle</title><link>http://msmvps.com/blogs/williamryan/archive/2008/05/28/bill-gets-an-amazon-kindle.aspx</link><pubDate>Wed, 28 May 2008 14:19:27 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1628342</guid><dc:creator>William</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1628342</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/05/28/bill-gets-an-amazon-kindle.aspx#comments</comments><description>&lt;p&gt;Well, almost. I bought it Sunday night and it&amp;#39;s almost here although it&amp;#39;s not in my hands yet.&amp;nbsp; I have been trying to find a good e-book solution for a long time now. I got the &lt;a href="http://www.sonystyle.com/webapp/wcs/stores/servlet/CategoryDisplay?catalogId=10551&amp;amp;storeId=10151&amp;amp;langId=-1&amp;amp;categoryId=16184&amp;amp;XID=O:sony_ebook_reader:dg_read_msnsrch"&gt;Sony.&lt;/a&gt; I&amp;#39;ve went through a few tablets (although they weren&amp;#39;t exclusively for e-books) and I broke down and got a &lt;a href="http://search.live.com/products/?q=Samsung%20Q1%20Ultra%20Premium%20UMPC%20U1500%201.33%20GHz%20-%207%22%20TFT&amp;amp;p1=%5bCommerceService+scenario%3d%22reviews%22+docid%3d%22A21186DD16DE234D7841%22+p%3d%2228bb1d1608a34e4ab66dfd1866517858%22%5d&amp;amp;wf=Commerce&amp;amp;FORM=CQRE"&gt;Samsung Q1 Ultra&lt;/a&gt; UMPC.&amp;nbsp; None of them cut it.&amp;nbsp; Although the problem was multi-faceted.&amp;nbsp; There weren&amp;#39;t many books for them so the hardware didn&amp;#39;t much matter.&amp;nbsp; Although the hardware was an issue. Most tablets I&amp;#39;ve had, even the UMPC can get 4-6 hours of battery life tops.&amp;nbsp; On&amp;nbsp; a typical flight to Seattle, I spend almost that much time in the air and power is at a premium and frequently unavailable.&amp;nbsp; So in short, the experience sucked. Now I see the &lt;a href="http://www.amazon.com/gp/product/B000FI73MA/ref=amb_link_6369712_3?pf_rd_m=ATVPDKIKX0DER&amp;amp;pf_rd_s=center-1&amp;amp;pf_rd_r=19GK2E5VPK87AWGG8SE5&amp;amp;pf_rd_t=101&amp;amp;pf_rd_p=398464001&amp;amp;pf_rd_i=507846"&gt;Amazon Kindle&lt;/a&gt;.&amp;nbsp; I was worried b/c I mainly read computer books, so I searched around.&amp;nbsp; &lt;a href="http://www.amazon.com/s/ref=nb_ss_kinc?url=node%3D154606011&amp;amp;field-keywords=WCF"&gt;Here&amp;#39;s an example of what I found.&lt;/a&gt;&amp;nbsp; &lt;a href="http://www.amazon.com/s/ref=nb_ss_kinc?url=node%3D154606011&amp;amp;field-keywords=C%23"&gt;Here&amp;#39;s some more&lt;/a&gt;. &lt;a href="http://www.amazon.com/s/ref=nb_ss_kinc?url=node%3D154606011&amp;amp;field-keywords=Sql+Server"&gt;And here are a few more&lt;/a&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;So clearly the books are there.&amp;nbsp; the other feature I find pretty amazing is that you get a EVDO service which you use to pull down the books. you pay for it once and that&amp;#39;s it.&amp;nbsp; You don&amp;#39;t need monthly charges and you don&amp;#39;t have to worry about any other charges (unless I&amp;#39;ve read it all wrong and I don&amp;#39;t think I have).&amp;nbsp; &lt;a href="http://althouse.blogspot.com/2008/05/real-problem-with-electronic-books.html"&gt;The screen has a few complaints&lt;/a&gt; but there&amp;#39;s plenty of people saying it rocks.&lt;/p&gt; &lt;p&gt;At the moment, I can&amp;#39;t really tell although I&amp;#39;m optimistic.&amp;nbsp; In about 2 hours it will be here.&amp;nbsp; Even though I have many of the books I bought in hardback, I&amp;#39;m pretty stoked to see how they compare.&amp;nbsp; I&amp;#39;ll post details once I get it.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1628342" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Kindle/default.aspx">Kindle</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Amazon+Kindle/default.aspx">Amazon Kindle</category></item><item><title>The Best of Grand Theft Auto IV</title><link>http://msmvps.com/blogs/williamryan/archive/2008/05/24/the-best-of-grand-theft-auto-iv.aspx</link><pubDate>Sat, 24 May 2008 04:33:58 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1626730</guid><dc:creator>William</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1626730</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/05/24/the-best-of-grand-theft-auto-iv.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.theadoguy.com"&gt;Shawn&lt;/a&gt; posted a link to &lt;a href="http://www.gametrailers.com/player/34412.html?r=1&amp;amp;type=wmv"&gt;these awesome GTA IV Death Clips&lt;/a&gt;&amp;nbsp; on &lt;a href="http://twitter.com/TheADOGuy"&gt;Twitter&lt;/a&gt;.&amp;nbsp; Depending on where you work, it&amp;#39;s probably not the safest thing to get caught watching and I wouldn&amp;#39;t recommend watching it around young kids.&amp;nbsp; With that said, it really kicks a55.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1626730" width="1" height="1"&gt;</description></item><item><title>Two great folks are tying the knot!</title><link>http://msmvps.com/blogs/williamryan/archive/2008/05/23/two-great-folks-are-tying-the-knot.aspx</link><pubDate>Fri, 23 May 2008 19:52:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1626575</guid><dc:creator>William</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1626575</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/05/23/two-great-folks-are-tying-the-knot.aspx#comments</comments><description>&lt;p&gt;This weekend,&amp;nbsp;&lt;a href="http://www.franksworld.com/"&gt;Frank&lt;/a&gt; &amp;nbsp;is &lt;a href="http://www.frankandroberta.com/index.cfm?fa=welcome"&gt;getting married &lt;/a&gt;to the lovely and charming Roberta.&amp;nbsp; Frank is a fellow MVP, although he&amp;#39;s in the Tablet PC group and does a lot of work with the .NET Community, particularly in the South East.&amp;nbsp; I got to first meet him at a code camp (you can tell the cool guys b/c they are the ones with a Tablet PC in their hands [although occassionally, &lt;a href="http://blah.winsmarts.com/"&gt;iPhone loving, Tablet hating Sharepoint Ninjas&lt;/a&gt;&amp;nbsp;can be cool too]) and have had the pleasure of hanging out with him at more than a few events.&amp;nbsp; I was lucky enough to get to meet not only&amp;nbsp;Roberta, but the two pups.&amp;nbsp; It&amp;#39;s impossible to know Frank and not really like him - so if you haven&amp;#39;t had a chance to do so, stop by &lt;a href="http://www.frankandroberta.com/index.cfm?fa=guestbook&amp;amp;gb=y"&gt;and wish them well&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1626575" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Friends/default.aspx">Friends</category></item><item><title>Cool Powershell script</title><link>http://msmvps.com/blogs/williamryan/archive/2008/05/20/cool-powershell-script.aspx</link><pubDate>Wed, 21 May 2008 03:59:14 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1625389</guid><dc:creator>William</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1625389</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/05/20/cool-powershell-script.aspx#comments</comments><description>&lt;p&gt;I can&amp;#39;t take credit for this, I came across it in &lt;a href="http://www.amazon.com/Windows-Communication-Foundation-Unleashed-WCF/dp/0672329484"&gt;Windows Communication Foundation Unleashe&lt;/a&gt;d - but it&amp;#39;s very helpful for administering &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx"&gt;Windows Communication Foundation&lt;/a&gt;...&lt;/p&gt; &lt;p&gt;In the &amp;lt;diagnostics&amp;gt; tag of your service&amp;#39;s configuration, two available options are &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.configuration.diagnosticsection.wmiproviderenabled.aspx"&gt;wmiProviderEnabled&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.configuration.diagnosticsection.performancecounters.aspx"&gt;performanceCounters&lt;/a&gt;.&amp;nbsp; So ideally you&amp;#39;ll want to set both, but if you just need to identify the endpoint then only the first one is necessary:&lt;/p&gt; &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;lt;system.serviceModel&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;diagnostics &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wmiProviderEnabled=&amp;quot;true&amp;quot;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; performanceCounters=&amp;quot;ServiceOnly&amp;quot;/&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;lt;/system.ServiceModel&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;After you have that in place for your service(s), you can use the following Powershell script&lt;/p&gt; &lt;p&gt;&lt;font size="1" face="Courier New"&gt;PS C:\Windows\System32&amp;gt; get-wmiobject endpoint -n root\ServiceModel | ft name&lt;/font&gt;&lt;/p&gt; &lt;p&gt;I don&amp;#39;t know if I love Powershell more than Windows Communication Foundation or WCF more than Powershell, but few things are cooler than using them together and this is one script you&amp;#39;ll undoubtedly find helpful.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1625389" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/williamryan/archive/tags/WCF/default.aspx">WCF</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Visual+Studio+.NET+Orcas/default.aspx">Visual Studio .NET Orcas</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/WIndows+Communication+Foundation/default.aspx">WIndows Communication Foundation</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/.NET+3.5+Framework/default.aspx">.NET 3.5 Framework</category></item><item><title>Doing tiers with WCF</title><link>http://msmvps.com/blogs/williamryan/archive/2008/05/16/doing-tiers-with-wcf.aspx</link><pubDate>Fri, 16 May 2008 18:48:58 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1623469</guid><dc:creator>William</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1623469</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/05/16/doing-tiers-with-wcf.aspx#comments</comments><description>&lt;p&gt;Because the nomenclature of &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx"&gt;WCF&lt;/a&gt; is often different then the technologies it consolidated, one of the problems you&amp;#39;ll likely encounter when moving to it is figuring out how to do the same things you were doing before.&amp;nbsp; That&amp;#39;s probably not the right way to phrase it, what i mean is, how do you implement the WCF equivalent?&lt;/p&gt; &lt;p&gt;With plain old web services, there&amp;#39;s more that&amp;#39;s similar than different so it&amp;#39;s not a big challenge. But architecturally, things aren&amp;#39;t as similar as they may appear. And if you try to create a similar architecture for &lt;a href="http://en.wikipedia.org/wiki/.NET_Remoting"&gt;Remoting&lt;/a&gt; (you know, that technology &lt;a href="http://www.learnasp.com/learnasp/"&gt;Counterfeit&lt;/a&gt;&amp;nbsp;&lt;a href="http://blog.charlescarroll.com/chazblog/"&gt;ASP.NET Gurus&lt;/a&gt; cower away from b/c it&amp;#39;s over their head) or &lt;a href="http://www.microsoft.com/windowsserver2003/technologies/msmq/default.mspx"&gt;MSMQ&lt;/a&gt;, things are more pronounced, at least they seem to be. &lt;/p&gt; &lt;p&gt;At the risk of sounding like a cheerleader for the new latest greatest technology from MS, I will say that once you get into &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx"&gt;WCF&lt;/a&gt;, you&amp;#39;d be hard pressed not to find it much simpler and intuitive than any of the older technologies.&amp;nbsp; I personally have a pretty big investment in &lt;a href="http://msdn.microsoft.com/en-us/library/kwdt6w2k(VS.71).aspx"&gt;Remoting&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ms977317.aspx"&gt;WS and WSE 2.0 and 3.0&lt;/a&gt;.&amp;nbsp; Letting go of all of that and starting new is a little daunting. After all, while I know I can get there in &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx"&gt;WCF&lt;/a&gt;, it was hard at first coming up with time estimates and even harder making sure that what I was doing was the &amp;#39;same&amp;#39; as the &lt;a href="http://en.wikipedia.org/wiki/.NET_Remoting"&gt;Remoting&lt;/a&gt; or &lt;a href="http://msdn.microsoft.com/en-us/library/ms977317.aspx"&gt;WSE&lt;/a&gt; equivalent. You&amp;#39;ll likely find yourself in the same scenario but if you just stick it out for a little while, I can promise you&amp;#39;ll find yourself astounded at how much easier it is to do things.&lt;/p&gt; &lt;p&gt;I worked on a very large application for the state of South Carolina a few years ago. There was an ASP.NET Front end.&amp;nbsp; From there, it would call out to a Application Server which hosted the Business Layer. That Business layer in turn called a generic DAL. The DAL in turn called a provider specific DAL.&amp;nbsp; The provider specific DAl would then call the database.&amp;nbsp; There was also another facade implemented via WS that used &lt;a href="http://msdn.microsoft.com/en-us/library/ms996944.aspx"&gt;DIME&lt;/a&gt; and a few other WSE specific features (by virtue of saying it used &lt;a href="http://msdn.microsoft.com/en-us/library/ms996944.aspx"&gt;DIME&lt;/a&gt;, you can tell it was a while ago b/c &lt;a href="http://msdn.microsoft.com/en-us/library/aa529567.aspx"&gt;MTOM&lt;/a&gt; has been where it&amp;#39;s at for a while now).&lt;/p&gt; &lt;p&gt;All of the layers could be run on one machine or, you could move them out as needed. For scalability this was a great infrastructure. And it helped greatly with security.&amp;nbsp; Many of the apps that were built for the state were implemented with an ASP.NET Front end that talked directly to the database.&amp;nbsp; This forced the IT department to make many concessions with respect to the firewall and DMZ and if performance started suffering, the only solution was buying more server resources or getting a new server.&amp;nbsp; Well, that debate has been had and is over - for large scale applications that need to scale, the front end -&amp;gt; database model is lame.&lt;/p&gt; &lt;p&gt;Trying to implement this n-tier approach in &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx"&gt;WCF&lt;/a&gt; was so easy though it was really amazing.&amp;nbsp; I simply created a &lt;a href="http://msdn.microsoft.com/en-us/library/bb332338.aspx"&gt;WCF Service library&lt;/a&gt; for each tier.&amp;nbsp; There was a facade which is what the asp.net front end of Winforms front end would communicate with.&amp;nbsp; This was a service itself which in turn calls out to the Business tier/service.&amp;nbsp; The Business tier/service is another &lt;a href="http://msdn.microsoft.com/en-us/library/bb332338.aspx"&gt;WCF Service library&lt;/a&gt; which calls a Data Tier/service.&amp;nbsp; That tier is another &lt;a href="http://msdn.microsoft.com/en-us/library/bb332338.aspx"&gt;WCF Service library&lt;/a&gt; which can call out to any of the provider specific tiers. Each of those in turn can talk to the database directly. So, you can easily run this application in a manner that means the web server hosting the ASP.NET UI never talks to the db directly.&amp;nbsp; You can however, by simply changing a few configuration section values, run everything on the same machine (if you wanted).&lt;/p&gt; &lt;p&gt;WCF allows you to run all of the services InProcess (&lt;a href="http://www.idesign.net/idesign/DesktopDefault.aspx"&gt;Juval Lowy&lt;/a&gt; has an excellent discussion of this in his &lt;a href="http://www.amazon.com/Programming-WCF-Services-Juval-Lowy/dp/0596526997"&gt;Programming WCF Services&lt;/a&gt; book - which is as good of a book as you&amp;#39;ll find).&amp;nbsp; If they will all be run on the same machine, you can simply used the &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.netnamedpipebinding.aspx"&gt;netNamedPipeBinding&lt;/a&gt;.&amp;nbsp; &lt;/p&gt; &lt;p&gt;So using the example I mentioned above, the Facade service(s) serves as the Server for the Winforms client or ASP.NET front&amp;nbsp; end. At the same time though, it is a client of the Business Tier (and you certainly could make this the business tier if you wanted to). I discuss handling it as a client &lt;a href="http://msmvps.com/blogs/williamryan/archive/2008/05/12/channelfactory-createchannel-goes-to-the-gentlemen-s-club.aspx"&gt;Here&lt;/a&gt;.&amp;nbsp; So the wcf library holding the business logic becomes a server to the facade service, but serves as a client to the generic data tier.&amp;nbsp; The generic data tier is a server to the business service, but is a client of the provider specific DAL.&amp;nbsp; The provider specific DAL&amp;#39;s are not clients to anything in the WCF sense, but technically they are for they call out to the db server.&lt;/p&gt; &lt;p&gt;B/c many of these tiers simply call other tiers, the interface/contract they use is the same. It could be different if you had reason for it to be, but by using the same contract, you can greatly simplify things. In this instance, I created a library which was shared with every single library, that hosted the contracts.&amp;nbsp; Looking at the code snippet from my previous article, you can see that the Interface implemented is the same throughout:&lt;/p&gt; &lt;p&gt;The article I pulled this from it &lt;a href="http://msmvps.com/blogs/williamryan/archive/2008/05/12/channelfactory-createchannel-goes-to-the-gentlemen-s-club.aspx"&gt;available here&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;&lt;font color="#008080"&gt;ChannelFactory&lt;/font&gt;&amp;lt;&lt;font color="#008080"&gt;IStripper&lt;/font&gt;&amp;gt; stripperFactory = new &lt;font color="#008080"&gt;ChannelFactory&lt;/font&gt;&amp;lt;&lt;font color="#008080"&gt;IStripper&lt;/font&gt;&amp;gt;(&amp;quot;NamedPipe&amp;quot;);&lt;br /&gt;&lt;font color="#008080"&gt;IStripper&lt;/font&gt; serviceInstance = stripperFactory.CreateChannel();&lt;br /&gt;using (serviceInstance as IDisposable)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; Console.WriteLine(serviceInstance.Bounce(BounceLevel.Woot));&lt;br /&gt;&amp;nbsp;&amp;nbsp; Console.WriteLine(serviceInstance.SlideDownPoll(PoleManeuver.LookMaNoHands));&lt;br /&gt;&amp;nbsp;&amp;nbsp; Console.WriteLine(serviceInstance.MilkSuckerForCash(&amp;quot;Peter Griffin&amp;quot;)); &lt;br /&gt;}&lt;/code&gt; &lt;p&gt;Or where I was using the client proxy...&lt;/p&gt; &lt;p&gt;public partial class PurePlatinumServiceClient : ClientBase&amp;lt;IStripper&amp;gt;, IStripper&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {...} &lt;p&gt;So using that same methodology, the client configuration file looks like this (I&amp;#39;m leaving out everything unrelated to WCF): &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;lt;system.serviceModel&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;client&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint address=&amp;quot;net.pipe://localhost/StripperService&amp;quot; binding=&amp;quot;netNamedPipeBinding&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingConfiguration=&amp;quot;&amp;quot; contract=&amp;quot;Cuckooz.Sample.WCFStripClub.IStripper&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name=&amp;quot;MainPipe&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/client&amp;gt;&lt;/font&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;No server configuration is needed b/c this is the client tier hence, it does no serving at all.&amp;nbsp; Now, look at the facade&amp;#39;s configuration (again, the code is identical at each tier for the most part. Each tier may do some of it&amp;#39;s own validation , but at the end of it, it&amp;#39;s using the return base.Channel.MethodName(Params) if I use the clientproxy or calling the method directly if I use the interface.&lt;/p&gt; &lt;p&gt;Now, let&amp;#39;s look at the configuration of the Services.&amp;nbsp; For the actual business implementation, I called each service a slightly different named, like ProductBusinessAPIService, ProductGenericDALService, ProductDALSpecificService and the like.&amp;nbsp; The interface remains the same in each case, only the name of the service that I&amp;#39;m exposing it as changes.&amp;nbsp; If I used different interfaces, then obviously those would need to change in the configuration, but little more than that would need to be changed (actually, nothing more). The thing to notice is that other than the client and the data service, each of them is functioning as both a client and a server.&amp;nbsp; They are clients to the next service in the chain and a server to the one before it. So the facade is a server to the ui client app, but a client of the business service. The business service is a client of the generic DAL but a server to the facade. The generic DALis a server to the business server but a client of the specific DAL.&amp;nbsp; &lt;/p&gt; &lt;p&gt;If you saw that say the specific DAL was eating a ton of resources, you could simply move it to another box. You&amp;#39;d need to change the bindings to a different mechanism b/c namedpipes won&amp;#39;t work across machines but you&amp;#39;d simply need to add a Endpoint that uses the &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.nettcpbinding.aspx"&gt;NetTcpBinding&lt;/a&gt; for instance, and other than the address, they&amp;#39;d look virtually identical to the existing named pipe equivalent. So without changing a line of code, you could move each piece to a different box (unless you consider config values &amp;#39;a line of code&amp;#39;.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;So here&amp;#39;s the Facade Service:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;lt;system.serviceModel&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;client&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint address=&amp;quot;net.pipe://localhost/StripClubBusinessService&amp;quot; binding=&amp;quot;netNamedPipeBinding&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingConfiguration=&amp;quot;&amp;quot; contract=&amp;quot;Cuckooz.Sample.WCFStripClub.IStripper&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name=&amp;quot;ClientPipe&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/client&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;services&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;service behaviorConfiguration=&amp;quot;Cuckooz.Sample.WCFStripClub.StripServiceBehavior&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name=&amp;quot;Cuckooz.Sample.WCFStripClubs.StripperService&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint address=&amp;quot;mex&amp;quot; binding=&amp;quot;mexHttpBinding&amp;quot; name=&amp;quot;MainMex&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contract=&amp;quot;IMetadataExchange&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint address=&amp;quot;net.pipe://localhost/StripperService&amp;quot; binding=&amp;quot;netNamedPipeBinding&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingConfiguration=&amp;quot;&amp;quot; name=&amp;quot;MainPipe&amp;quot; contract=&amp;quot;Cuckooz.Sample.WCFStripClub.IStripper&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;host&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;baseAddresses&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add baseAddress=&amp;quot;&lt;/font&gt;&lt;a href="http://localhost:8731/blahblah/facade/GenericService/&amp;quot;"&gt;&lt;font face="Courier New" size="2"&gt;http://localhost:8731/blahblah/facade/GenericService/&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt;&lt;font face="Cordia New"&gt;&lt;font face="Courier New" size="2"&gt; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/baseAddresses&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/host&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/service&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/services&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;behaviors&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt; &amp;lt;serviceBehaviors&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;behavior name=&amp;quot;Cuckooz.Sample.WCFStripClub.StripServiceBehavior&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font face="Courier New" size="2"&gt; &amp;lt;serviceMetadata httpGetEnabled=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;serviceDebug includeExceptionDetailInFaults=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/behavior&amp;gt;&lt;/font&gt; &lt;p&gt;&lt;font&gt;&lt;font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/serviceBehaviors&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/behaviors&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/system.serviceModel&amp;gt;&lt;/font&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;So here&amp;#39;s the BusinessService:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;lt;system.serviceModel&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;client&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint address=&amp;quot;net.pipe://localhost/StripClubDataService&amp;quot; binding=&amp;quot;netNamedPipeBinding&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingConfiguration=&amp;quot;&amp;quot; contract=&amp;quot;Cuckooz.Sample.WCFStripClub.IStripper&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name=&amp;quot;DataPipe&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/client&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;services&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;service behaviorConfiguration=&amp;quot;Cuckooz.Sample.WCFStripClub.StripperServiceBehavior&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name=&amp;quot;Ger911.HCStandard.Core.API.StripClubBusinessService&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint address=&amp;quot;mex&amp;quot; binding=&amp;quot;mexHttpBinding&amp;quot; name=&amp;quot;Mex&amp;quot; contract=&amp;quot;IMetadataExchange&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint address=&amp;quot;net.pipe://localhost/StripClubBusinessService&amp;quot; binding=&amp;quot;netNamedPipeBinding&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingConfiguration=&amp;quot;&amp;quot; name=&amp;quot;MainPipe&amp;quot; contract=&amp;quot;Cuckooz.Sample.WCFStripClub.IStripper&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;host&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;baseAddresses&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add baseAddress=&amp;quot;&lt;/font&gt;&lt;a href="http://localhost:8731/blahblahbalh/CuckoozStripClub/StripperService/&amp;quot;"&gt;&lt;font face="Courier New" size="2"&gt;http://localhost:8731/blahblahbalh/CuckoozStripClub/StripperService/&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" size="2"&gt; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/baseAddresses&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/host&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/service&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/services&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;behaviors&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;serviceBehaviors&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;behavior name=&amp;quot;Cuckooz.Sample.WCFStripClub.StripperServiceBehavior&amp;quot;&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;serviceMetadata httpGetEnabled=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;serviceDebug includeExceptionDetailInFaults=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/behavior&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;lt;/serviceBehaviors&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/behaviors&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/system.serviceModel&amp;gt;&lt;/font&gt; &lt;p&gt;&lt;strong&gt;Now here&amp;#39;s the Generic Data Service:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;lt;system.serviceModel&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;services&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;service behaviorConfiguration=&amp;quot;Cuckooz.Sample.WCFStripClub.StripClubDataServiceBehavior&amp;quot; name=&amp;quot;Cuckooz.Sample.WCFStripClub.&lt;strong&gt;Strip&lt;/strong&gt;ClubDataService&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint address=&amp;quot;mex&amp;quot; binding=&amp;quot;mexHttpBinding&amp;quot; name=&amp;quot;Mex&amp;quot; contract=&amp;quot;IMetadataExchange&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint address=&amp;quot;net.pipe://localhost/StripClubDataService&amp;quot; binding=&amp;quot;netNamedPipeBinding&amp;quot; bindingConfiguration=&amp;quot;&amp;quot; name=&amp;quot;DataServicePipe&amp;quot; contract=&amp;quot;Cuckooz.Sample.WCFStripClub.IStripper&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;host&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;baseAddresses&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add baseAddress=&amp;quot;&lt;/font&gt;&lt;a href="http://localhost:8731/blahblah/CuckoozGenericDal/GenericDalService/&amp;quot;"&gt;&lt;font face="Courier New" size="2"&gt;http://localhost:8731/blahblah/CuckoozGenericDal/GenericDalService/&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" size="2"&gt; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/baseAddresses&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/host&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/service&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/services&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;behaviors&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;serviceBehaviors&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;behavior name=&amp;quot;Cuckooz.Sample.WCFStripClub.StripClubDataServiceBehavior&amp;quot;&amp;gt;&lt;br /&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;serviceMetadata httpGetEnabled=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;serviceDebug includeExceptionDetailInFaults=&amp;quot;True&amp;quot; /&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/behavior&amp;gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/serviceBehaviors&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/behaviors&amp;gt;&lt;br /&gt;&amp;lt;/system.serviceModel&amp;gt;&lt;/font&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;Finally, here&amp;#39;s the configuration for one of the provider specific (Sql Server) Data Service: &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;lt;system.serviceModel&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;services&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;service behaviorConfiguration=&amp;quot;Cuckooz.Sample.WCFStripClub.StripClubSqlServerServiceBehavior&amp;quot; name=&amp;quot;Cuckooz.Sample.WCFStripClub.StripClubSqlServerService&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint address=&amp;quot;mex&amp;quot; binding=&amp;quot;mexHttpBinding&amp;quot; name=&amp;quot;Mex&amp;quot; contract=&amp;quot;IMetadataExchange&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint address=&amp;quot;net.pipe://localhost/StripClubSqlServerService&amp;quot; binding=&amp;quot;netNamedPipeBinding&amp;quot; bindingConfiguration=&amp;quot;&amp;quot; name=&amp;quot;DataServicePipe&amp;quot; contract=&amp;quot;Cuckooz.Sample.WCFStripClub.IStripper&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;host&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;baseAddresses&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add baseAddress=&lt;/font&gt;&lt;a href="http://localhost:8731/blahblah/CuckoozGenericDal/SqlServerDalService/"&gt;&lt;font face="Courier New" size="2"&gt;http://localhost:8731/blahblah/CuckoozGenericDal/SqlServerDalService/&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" size="2"&gt; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/baseAddresses&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/host&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/service&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/services&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;behaviors&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;serviceBehaviors&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;behavior name=&amp;quot;Cuckooz.Sample.WCFStripClub.StripClubSqlServerServiceBehavior&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;serviceMetadata httpGetEnabled=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;serviceDebug includeExceptionDetailInFaults=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/behavior&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/serviceBehaviors&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/behaviors&amp;gt;&lt;br /&gt;&amp;lt;/system.serviceModel&amp;gt;&lt;/font&gt; &lt;p&gt;--------------------------------------------------------------- &lt;p&gt;In this case, I switched something I was doing in the real world to make it a little more entertaining (and thereby not divulging specifics of a client project).&amp;nbsp; The real application is a little more complex and includes some other services which are employed as well by each layer - for instance, a crypto service and one to serve up images and documents.&amp;nbsp; The Generic DAL service is one that we could probably easily do without, but the goal is that if the client wanted to change their DB to Oracle or something else, would could simply develop the service, deploy it, and add endpoints pointing to it.&amp;nbsp; In that case, we could change the whole mechanism without changing any code or causing any visible interruptions other than the initial switchover which would be miniscule.&amp;nbsp; By using an example where there are so many moving pieces, it really brings home home much flexibility you have using WCF and how easy it is to implement. Most applications one works on won&amp;#39;t have anywhere near the demands for scalability that are in place here (and there are a few other things that dictated this architecture which I don&amp;#39;t need to go into). The point is that if you only had one or two service tiers, it would be all that much easier.&amp;nbsp; Just configure each piece as either a client, a server or both. If you use a shared assembly to hold your client proxies and/or your interfaces (in most cases, I&amp;#39;ve found this to be beneficial b/c the size of these classes are typically pretty small, so you can get consistency without having to really worry about bloating the footprint by sharing the assembly over and over. And besides, you needed a contract anyway, so there&amp;#39;d only be bloat if you had additional items that you weren&amp;#39;t using. in this instance, I&amp;#39;m not introducing anything that I wouldn&amp;#39;t have needed anyway). &lt;p&gt;Oh yah, one other thing... I have a little pet peeve about string literals. They drive me nuts, especially in cases where they are used for session variables.&amp;nbsp; I&amp;#39;d highly recommend creating a constants class in your shared assemblies library.&amp;nbsp; For each Endpoint you plan on needing, create a string constant that you&amp;#39;ll use as the name of the endpoint. I started out calling it &amp;quot;... Pipe&amp;quot; but realized that was misleading b/c in many cases, I&amp;#39;d be using Tcp instead of Named pipes, so I just moved to something a little more generic.&amp;nbsp; The naming isn&amp;#39;t what really matters, it&amp;#39;s the consistency, but having clear and intuitive names doesn&amp;#39;t hurt ;-). So doing something old school like this (think back to session variables in ASP.NET): &lt;p&gt;&amp;nbsp; &lt;p&gt;public static class ConfigurationConstants&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public const String Localhost = &amp;quot;localhost&amp;quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public const String NamedPipeEndpointName = &amp;quot;MainPipe&amp;quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public const String ClientBusinessServiceEndpoint = &amp;quot;ClientBusinessPipe&amp;quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public const String ServerBusinessServiceEndpoint = &amp;quot;ServerBusinessPipe&amp;quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public const String ClientGenericDataServiceEndpoint = &amp;quot;ClientGenericDataPipe&amp;quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public const string ServerGenericDataServiceEndpoint = &amp;quot;ServerGenericDataPipe&amp;quot;;&lt;br /&gt;} &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I&amp;#39;m trying to make this into a real demo app that&amp;#39;s documented and can be done in steps - basically trying to turn it into a full walk-through. So I&amp;#39;m documenting it as I go along. I&amp;#39;ve gotten it completed through here - but I&amp;#39;m going to add Security, support for &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Message_Queuing"&gt;MSMQ&lt;/a&gt; and a few others (just to show you don&amp;#39;t need to change the code you write in most cases) and use the Enterprise library for logging, security and data - if you want the code for this part up through here, just email me privately. I should have the whole thing done in a few weeks. So be advised, i can give you the code, but I don&amp;#39;t have much done in the way of explanations in the code - although I will shortly.&lt;/p&gt; &lt;p&gt;---------------------------&lt;/p&gt; &lt;p&gt;Also, if you&amp;#39;re interested in WCF, times are really good.&amp;nbsp; I&amp;#39;ve read every book except for Michelle&amp;#39;s (and that&amp;#39;s next on the list b/c I&amp;#39;m sure it&amp;#39;s going to be great) and I have to say, they are all good.&amp;nbsp; It&amp;#39;s really a case of &amp;quot;you can&amp;#39;t go wrong&amp;quot; whichever one you buy. I&amp;#39;d recommend all of the following - in no particular order:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0596526997/ref=s9subs_c2_at1-2871_p?pf_rd_m=ATVPDKIKX0DER&amp;amp;pf_rd_s=center-2&amp;amp;pf_rd_r=00H7FNAT0YHVENSGJE88&amp;amp;pf_rd_t=101&amp;amp;pf_rd_p=278240301&amp;amp;pf_rd_i=507846"&gt;Programming WCF - Juval Lowy&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.amazon.com/Essential-Windows-Communication-Foundation-WCF/dp/0321440064/ref=pd_bbs_sr_3?ie=UTF8&amp;amp;s=books&amp;amp;qid=1210963529&amp;amp;sr=8-3"&gt;Essential Windows Communication Foundation (WCF): For .NET Framework 3.5&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.amazon.com/Inside-Windows-Communication-Foundation-Developer/dp/0735623066/ref=pd_bbs_4?ie=UTF8&amp;amp;s=books&amp;amp;qid=1210963573&amp;amp;sr=8-4"&gt;Inside Windows Communication Foundation&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.amazon.com/Pro-WCF-Practical-Microsoft-Implementation/dp/1590597028/ref=pd_bbs_sr_7?ie=UTF8&amp;amp;s=books&amp;amp;qid=1210963601&amp;amp;sr=8-7"&gt;Pro WCF - Practical Microsoft SOA Implementations&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.amazon.com/Microsoft-Windows-Communication-Foundation-Developer/dp/0735623368/ref=pd_bbs_6?ie=UTF8&amp;amp;s=books&amp;amp;qid=1210963639&amp;amp;sr=8-6"&gt;Windows Communication Foundation Step by Step&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.amazon.com/Professional-WCF-Programming-Development-Communication/dp/0470089849/ref=pd_bbs_sr_9?ie=UTF8&amp;amp;s=books&amp;amp;qid=1210963673&amp;amp;sr=8-9"&gt;Professional WCF Programming&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.amazon.com/Professional-WCF-Programming-Development-Communication/dp/0470089849/ref=pd_bbs_sr_9?ie=UTF8&amp;amp;s=books&amp;amp;qid=1210963673&amp;amp;sr=8-9"&gt;Windows Communication Foundation Unleashed&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1623469" width="1" height="1"&gt;</description></item><item><title>Mobile Application Development Webcast Info</title><link>http://msmvps.com/blogs/williamryan/archive/2008/05/16/mobile-application-development-webcast-info.aspx</link><pubDate>Fri, 16 May 2008 17:04:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1623440</guid><dc:creator>William</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1623440</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/05/16/mobile-application-development-webcast-info.aspx#comments</comments><description>&lt;p&gt;Constanze just &lt;a href="http://blogs.msdn.com/croman/"&gt;posted this&lt;/a&gt;&amp;nbsp;about &lt;a href="http://blogs.msdn.com/croman/archive/2008/05/16/reminder-webcast-series-on-mobile-application-development-starting-today.aspx"&gt;a 5 part webcast series&lt;/a&gt; he and &lt;a href="http://www.dotnetfordevices.com/forum.html"&gt;others like Maarten Struys&lt;/a&gt; will be conducting on mobile application development:&lt;/p&gt;
&lt;p&gt;-----------------------------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;font face="tahoma,arial,helvetica,sans-serif" size="2"&gt;&lt;em&gt;Just wanted to remind everybody that our 5-part Webcast series on &lt;strong&gt;Mobile Application&lt;/strong&gt; &lt;strong&gt;Development&lt;/strong&gt; is starting today. This morning, &lt;a href="http://www.dotnetfordevices.com/forum.html"&gt;Maarten Struys&lt;/a&gt; and I will provide an introduction into Mobile Application development, we&amp;#39;ll show you all the cool tools that are available, plus there will be some demos. So check it out.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="tahoma,arial,helvetica,sans-serif" size="2"&gt;&lt;em&gt;The Webcast will start today, Friday, April 16 at &lt;strong&gt;11 AM&lt;/strong&gt; PST.&lt;strong&gt; &lt;/strong&gt;Here&amp;#39;s the link to register for it: &lt;/em&gt;&lt;/font&gt;&lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032379365&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;&lt;font face="tahoma,arial,helvetica,sans-serif" size="2"&gt;&lt;em&gt;Register Here&lt;/em&gt;&lt;/font&gt;&lt;/a&gt;&lt;font face="tahoma,arial,helvetica,sans-serif" size="2"&gt;&lt;em&gt;.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="tahoma,arial,helvetica,sans-serif" size="2"&gt;&lt;em&gt;See you at the Webcast today!&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="tahoma,arial,helvetica,sans-serif" size="3"&gt;&amp;nbsp;Constanze&lt;/font&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1623440" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Mobility/default.aspx">Mobility</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Device+Application+Development/default.aspx">Device Application Development</category></item><item><title>ChannelFactory.CreateChannel goes to the Gentlemen's Club</title><link>http://msmvps.com/blogs/williamryan/archive/2008/05/12/channelfactory-createchannel-goes-to-the-gentlemen-s-club.aspx</link><pubDate>Mon, 12 May 2008 22:07:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1621334</guid><dc:creator>William</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1621334</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/05/12/channelfactory-createchannel-goes-to-the-gentlemen-s-club.aspx#comments</comments><description>&lt;p&gt;Currently, I&amp;#39;m tasked with getting some people up to speed on .NET 3.5 as well as WCF.&amp;nbsp; WCF is really cool and it&amp;#39;s easy to fall in love with, but it&amp;#39;s also easy to cause you to sleep when you&amp;#39;re first learning it. So instead of walking through Hello World, I changed course.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Basically, we&amp;#39;re using an architecture where the Business Layer and Data Layer are services. In most cases, we&amp;#39;d run them on the same machine, in Proc. In other cases, when scalability is more of an issue, we&amp;#39;d need to separate them out.&lt;/p&gt;
&lt;p&gt;Creating Services is nothing special and other than a few attributes (ServiceContract, OperationContract, often DataContract and/or DataMember or EnumMember) and an interface, there&amp;#39;s no real way to tell a wcf service from any other class (and since most of those attributes should&amp;nbsp;go on the interface, the class itself shows no sign of being a service other than the interface implementation).&amp;nbsp; One thing though, when you add a WCF service to an application through VS, it will stick the service class and the corresponding interface into the same project.&amp;nbsp; I typically move my interfaces out of the project and into a library so that I can share them.&amp;nbsp; In a case where your business methods just call the dal&amp;#39;s methods, the interfaces/contracts will be the same so you may be able to share them.&lt;/p&gt;
&lt;p&gt;WCF gives you similar hosting options to Remoting and Web Services.&amp;nbsp; You can add a Service Reference and have svcutil.exe generate a proxy class which is virtually identical to what you did with web services. Hosting them is the easy part and if you can run a Console application and remember to put Console.Readline at the end of it, you can start a service host.&amp;nbsp; There&amp;#39;s about a zillion examples out there and it&amp;#39;s usually one of the first things covered in WCF so I&amp;#39;m leaving that alone for now.&lt;/p&gt;
&lt;p&gt;On the client, you can add a service reference as I said. However that is not without its problems and you may want a little more flexibility. If you want to create your own proxies, there are two primary methods (outside of svcutil related approaches). Let&amp;#39;s say you have the following interface:&lt;/p&gt;&lt;code&gt;
&lt;p&gt;&lt;font color="#0000ff"&gt;namespace&lt;/font&gt; Cuckooz.Sample.WCFStripClub&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; [&lt;font color="#008080"&gt;DataContract&lt;/font&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;enum&lt;/font&gt; BounceLevel{&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;font color="#008080"&gt;EnumMember&lt;/font&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Lame,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;font color="#008080"&gt;EnumMember&lt;/font&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Woot,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;font color="#008080"&gt;EnumMember&lt;/font&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; YeahBaby&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;font color="#008080"&gt;DataContract&lt;/font&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;public enum&lt;/font&gt; PoleManeuver{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;font color="#008080"&gt;EnumMember&lt;/font&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Standard,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;font color="#008080"&gt;EnumMember&lt;/font&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LookMaNoHands,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;font color="#008080"&gt;EnumMember&lt;/font&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UpsideDownLookMaNoHands&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;font color="#008080"&gt;ServiceContract&lt;/font&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt; public interface&lt;/font&gt; IStripper&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;font color="#008080"&gt;OperationContract&lt;/font&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008080"&gt;String&lt;/font&gt; Bounce(&lt;font color="#008080"&gt;BounceLevel&lt;/font&gt; bouncin);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;font color="#008080"&gt;OperationContract&lt;/font&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008080"&gt;String&lt;/font&gt; SlideDownPoll(&lt;font color="#008080"&gt;PoleManeuver&lt;/font&gt; maneuver);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;font color="#008080"&gt;OperationContract&lt;/font&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt; long&lt;/font&gt; MilkSuckerForCash(&lt;font color="#008080"&gt;String&lt;/font&gt; customerName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;One approach is to create your own Proxy class , inheriting from ClientBase and passing in the type of the interface, while implementing the interface.&amp;nbsp; Pay attention to the implementations of this class:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;font color="#0000ff"&gt;namespace&lt;/font&gt; Cuckooz.Sample.WCFStripClub&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;public partial class&lt;/font&gt; &lt;font color="#008080"&gt;PurePlatinumServiceClient&lt;/font&gt; : &lt;font color="#008080"&gt;ClientBase&lt;/font&gt;&amp;lt;&lt;font color="#008080"&gt;IStripper&lt;/font&gt;&amp;gt;, &lt;font color="#008080"&gt;IStripper&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;public&lt;/font&gt; PurePlatinumServiceClient() { }&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;public&lt;/font&gt; PurePlatinumServiceClient(&lt;font color="#008080"&gt;String&lt;/font&gt; endpointConfigurationName) : &lt;font color="#0000ff"&gt;base&lt;/font&gt;(endpointConfigurationName) { }&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;public&lt;/font&gt; PurePlatinumServiceClient(&lt;font color="#008080"&gt;String&lt;/font&gt; endpointConfigurationName, &lt;font color="#008080"&gt;String&lt;/font&gt; remoteAddress) : &lt;font color="#0000ff"&gt;base&lt;/font&gt;(endpointConfigurationName, remoteAddress) { }&lt;/code&gt;&lt;/p&gt;&lt;code&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;public&lt;/font&gt; PurePlatinumServiceClient(&lt;font color="#008080"&gt;Binding&lt;/font&gt; binding, &lt;font color="#008080"&gt;EndpointAddress&lt;/font&gt; remoteAddress) : &lt;font color="#0000ff"&gt;base&lt;/font&gt;(binding, remoteAddress) { }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#008080"&gt;String&lt;/font&gt; Bounce(&lt;font color="#008080"&gt;BounceLevel&lt;/font&gt; bouncin)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;return base&lt;/font&gt;.Channel.Bounce(bouncin);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;public&lt;/font&gt; String SlideDownPoll(&lt;font color="#008080"&gt;PoleManeuver&lt;/font&gt; maneuver)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;return base&lt;/font&gt;.Channel.SlideDownPoll(maneuver);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;public long&lt;/font&gt; MilkSuckerForCash(&lt;font color="#008080"&gt;String&lt;/font&gt; customerName)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;return base&lt;/font&gt;.Channel.SlideDownPoll(&lt;font color="#008080"&gt;customerName&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Note that b/c we are passing in the interface as a generic type parameter to ClientBase, we can refer to it through base.Channel.MethodName.&lt;/p&gt;
&lt;p&gt;You will need to have an endpoint configured in order to call the service and you should give the endpoint a name to make things easy.&amp;nbsp; In this case, I have a namedPipe endpoint configured named &amp;quot;NamedPipe&amp;quot;. With that in place, you simply need to create an instance of your proxy and have at it:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;font color="#008080"&gt;PurePlatinumServiceClient&lt;/font&gt; dancerProxy = new &lt;font color="#008080"&gt;PurePlatinumServiceClient&lt;/font&gt;(&amp;quot;&lt;font color="#993300"&gt;NamedPipe&lt;/font&gt;&amp;quot;);&lt;br /&gt;&lt;font color="#008080"&gt;Console&lt;/font&gt;.WriteLine(dancerProxy.Bounce(&lt;font color="#008080"&gt;BounceLevel&lt;/font&gt;.YeahBaby));&lt;br /&gt;&lt;font color="#008080"&gt;Console&lt;/font&gt;.WriteLine(dancerProxy.SlideDownPoll(&lt;font color="#008080"&gt;PoleManeuver&lt;/font&gt;.UpsideDownLookMaNoHands));&lt;br /&gt;&lt;font color="#008080"&gt;Console&lt;/font&gt;.WriteLine(dancerProxy.MilkSuckerForCash(&amp;quot;&lt;font color="#993300"&gt;Peter Griffin&lt;/font&gt;&amp;quot;));&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If you are going to create your proxies like this, do yourself a favor and use CodeSmith, some other template, or if you&amp;#39;re just really hard up, copy and paste where applicable - it&amp;#39;ll save you a lot of time.&lt;/p&gt;
&lt;p&gt;If you don&amp;#39;t want to go this route though, you can skip the whole proxy altogether.&amp;nbsp; Using the ChannelFactory class, you can specify the same interface we used above and create a new ChannelFactory.&amp;nbsp; Remember to name your endpoints in the configuration file so that you can refer to them. Otherwise, you&amp;#39;ll need to specify the endpoint hard code style - which is lame.&amp;nbsp; Once you&amp;#39;ve done that, you instantiate an IYourInterface object using the CreateChannel method of the ChannelFactory you just created.&amp;nbsp; Then, you should cast it to an IDisposable object and throw it in a using block, and have at it from there. Note, you don&amp;#39;t have to use IDispose but the other approach is to cast it as a ICommuncationObject and then call Close.&amp;nbsp; For the money, it&amp;#39;s easier and safer to just go the IDispose route. So the code below is functionally equivalent to the preceding block:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;font color="#008080"&gt;ChannelFactory&lt;/font&gt;&amp;lt;&lt;font color="#008080"&gt;IStripper&lt;/font&gt;&amp;gt; stripperFactory = new &lt;font color="#008080"&gt;ChannelFactory&lt;/font&gt;&amp;lt;&lt;font color="#008080"&gt;IStripper&lt;/font&gt;&amp;gt;(&amp;quot;&lt;font color="#993300"&gt;NamedPipe&lt;/font&gt;&amp;quot;);&lt;br /&gt;&lt;font color="#008080"&gt;IStripper&lt;/font&gt; serviceInstance = stripperFactory.CreateChannel();&lt;br /&gt;using (serviceInstance as &lt;font color="#008080"&gt;IDisposable&lt;/font&gt;)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color="#008080"&gt;Console&lt;/font&gt;.WriteLine(serviceInstance.Bounce(&lt;font color="#008080"&gt;BounceLevel&lt;/font&gt;.Woot));&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color="#008080"&gt;Console&lt;/font&gt;.WriteLine(serviceInstance.SlideDownPoll(&lt;font color="#008080"&gt;PoleManeuver&lt;/font&gt;.LookMaNoHands));&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color="#008080"&gt;Console&lt;/font&gt;.WriteLine(serviceInstance.MilkSuckerForCash(&amp;quot;&lt;font color="#993300"&gt;Peter Griffin&lt;/font&gt;&amp;quot;));&amp;nbsp;&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Either of these approaches provides a ton of flexibility. For instance, you can create several endpoints, look at the environment and then decide which endpoint you want to talk on, hence, which binding you are going to use. Similarly, if you had several services you could easily change the execution to use on over the other ones.&amp;nbsp; All in all it really couldn&amp;#39;t be simpler and in this case, the hardest part of the equation is going to be setting up your configuration file properly.&lt;/p&gt;
&lt;p&gt;If I have time tomorrow I&amp;#39;ll post the next lesson which uses Duplexing, there&amp;#39;s a lot of potential with this interface and service when you enhance it with duplexing ;-)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1621334" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/williamryan/archive/tags/WCF/default.aspx">WCF</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/WIndows+Communication+Foundation/default.aspx">WIndows Communication Foundation</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/.NET+3.5+Framework/default.aspx">.NET 3.5 Framework</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/ChannelFactory/default.aspx">ChannelFactory</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/System.ServiceModel/default.aspx">System.ServiceModel</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/ClientBase/default.aspx">ClientBase</category></item><item><title>How cheap are SMS messages?</title><link>http://msmvps.com/blogs/williamryan/archive/2008/05/12/how-cheap-are-sms-messages.aspx</link><pubDate>Mon, 12 May 2008 19:16:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1621103</guid><dc:creator>William</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1621103</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/05/12/how-cheap-are-sms-messages.aspx#comments</comments><description>&lt;p&gt;Normally, when you hear&amp;nbsp;a price comparison and the govt is involved, it&amp;#39;s some ridiculously expensive item from the govt. However in the case of &lt;a href="http://www.labspaces.net/view_news_comments.php?newsID=5699"&gt;the cost of SMS messages vs the cost of pulling data from the Hubbell, it&amp;#39;s just the opposite&lt;/a&gt;&amp;nbsp; it&amp;#39;s just the opposite.&amp;nbsp; Hat Tip:&amp;nbsp; &lt;a href="http://www.odetocode.com/"&gt;http://www.odetocode.com/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1621103" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Misc+Technology/default.aspx">Misc Technology</category></item><item><title>Sql Server 2008, Intellisense and  Backward Compatibility</title><link>http://msmvps.com/blogs/williamryan/archive/2008/05/08/sql-server-2008-intellisense-and-backward-compatibility.aspx</link><pubDate>Thu, 08 May 2008 17:28:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1617586</guid><dc:creator>William</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1617586</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/05/08/sql-server-2008-intellisense-and-backward-compatibility.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blog.magenic.com/blogs/whitneyw"&gt;Whitney&lt;/a&gt;&amp;nbsp;is a little disappointed &lt;a href="http://blog.magenic.com/blogs/whitneyw/archive/2008/05/04/Backward-compatibility-for-IntelliSense-please.aspx"&gt;that the RTM version of Sql Server 2008 will &lt;strong&gt;not&lt;/strong&gt; support backward compatibility with respect to intellisense&lt;/a&gt;...&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The conversation related to what I felt was misinformation in various places about whether or not IntelliSense would be backward compatible.&amp;nbsp; Currently, CTP6 will support IntelliSense against a SQL 2005 or SQL 2000 instance.&amp;nbsp; This was exciting to me as I tend to work in multiple revs of the product.&amp;nbsp; As it turns out, the RTM version of SQL 2008 WILL NOT support this behavior.&amp;nbsp; Here is Eric&amp;#39;s statement to why that is the case:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;He&amp;#39;s got a &lt;a href="https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=341872"&gt;petition going &lt;/a&gt;to try to get the Sql Server 2008 team to include it at one point or another.&amp;nbsp; There&amp;#39;s no shortage of items on the wishlists of Microsoft products, especially something like Sql Server 2008.&amp;nbsp; They look to the community to help determine what&amp;#39;s going to make the cut, so if you care about this feature, take a few seconds to &lt;a href="https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=341872"&gt;let the team know your opinion.&lt;/a&gt; There are no guarantees but they care very much about what customers want and this is one avenue to communicate with the directly.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=341872"&gt;let the team know your opinion.&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1617586" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Sql+Server+2008/default.aspx">Sql Server 2008</category></item><item><title>LINQ Gotcha</title><link>http://msmvps.com/blogs/williamryan/archive/2008/05/07/linq-gotcha.aspx</link><pubDate>Thu, 08 May 2008 00:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1616777</guid><dc:creator>William</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1616777</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/05/07/linq-gotcha.aspx#comments</comments><description>&lt;p&gt;After a long hiatus, I was trying to figure out something cool or at least interesting to blog about.&amp;nbsp; I was having trouble figuring out what I wanted to write, but then one after another, I got a ton of ideas.&lt;/p&gt;
&lt;p&gt;One thing I wanted to do for my current project was finding out if a specific ConnectionString was present in the &amp;lt;ConnectionStrings&amp;gt; setting of a .config file. This is a big oversimplification but it&amp;#39;s close enough to explain. So I wrote the following:&lt;/p&gt;&lt;code&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt; myVar = from cs in &lt;font color="#339966"&gt;ConfigurationManager&lt;/font&gt;.ConnectionStrings&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;select&lt;/font&gt; cs;&lt;/code&gt;&lt;code&gt; 
&lt;p&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;foreach&lt;/font&gt; (&lt;font color="#0000ff"&gt;var&lt;/font&gt; Mine &lt;font color="#0000ff"&gt;in&lt;/font&gt; myVar)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#339966"&gt;Console&lt;/font&gt;.WriteLine(myVar);&lt;br /&gt;&amp;nbsp;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I knew the second I tried to write a where clause that there was a problem b/c intellisense wasn&amp;#39;t showing anything I expected. When I tried to display some of the properties in the foreach loop, nothing was visible. I knew something was wrong. So I tried to compile and got the following error:&lt;/p&gt;
&lt;p&gt;&lt;font face="courier new,courier"&gt;Could not find an implementation of the query pattern for source type &amp;#39;System.Configuration.ConnectionStringSettingsCollection&amp;#39;.&amp;nbsp; &amp;#39;Select&amp;#39; not found.&amp;nbsp; Consider explicitly specifying the type of the range variable &amp;#39;cs&amp;#39;.&lt;/font&gt;&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Well, that was helpful b/c I knew at least the problem was with the&amp;nbsp; &lt;a href="http://msdn.microsoft.com/en-us/library/bb383978.aspx"&gt;range variable&lt;/a&gt;&amp;nbsp;.&amp;nbsp; I wasn&amp;#39;t sure what type of collection the &lt;a href="http://msdn.microsoft.com/en-us/library/system.configuration.connectionstringssection.connectionstrings(VS.85).aspx"&gt;ConfigurationManager.ConnectionStrings&lt;/a&gt;&amp;nbsp; property was so I decided to look it up just to be sure. (I also just wanted to make sure it was in fact some type of collection or another. I couldn&amp;#39;t imagine that it wouldn&amp;#39;t have been,&amp;nbsp;but just wanted to make sure for purely superstitious reasons)&amp;nbsp;Ok, so it&amp;#39;s a &lt;a href="http://msdn.microsoft.com/en-us/library/system.configuration.connectionstringsettingscollection(VS.85).aspx"&gt;ConnectionStringsSettingsCollection&lt;/a&gt;&amp;nbsp;, nothing surprising there. Digging deeper I saw that &lt;a href="http://msdn.microsoft.com/en-us/library/system.configuration.connectionstringsettingscollection(VS.85).aspx"&gt;ConnectionStringsSettingsCollection&lt;/a&gt;&amp;nbsp;inherits from &lt;a href="http://msdn.microsoft.com/en-us/library/system.configuration.configurationelementcollection.aspx"&gt;ConfigurationElementCollection&lt;/a&gt;&amp;nbsp;. At that point, it all became crystal clear for I saw the following in the class definition:&lt;/p&gt;&lt;code&gt;&lt;pre class="libCScode" id="ctl00_rs1_mainContentContainer_ctl13CSharp"&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; abstract &lt;span style="COLOR:blue;"&gt;class&lt;/span&gt; ConfigurationElementCollection : ConfigurationElement, ICollection, 
    IEnumerable&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Do you see the problem? There&amp;#39;s an &lt;a href="http://msdn.microsoft.com/en-us/library/system.collections.ienumerable.aspx"&gt;IEnumerable&lt;/a&gt;&amp;nbsp;but no &lt;a href="http://msdn.microsoft.com/en-us/library/9eekhta0.aspx"&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;. You see, the collection implements the non-Generic IEnumerable but not the Generic IEnumerable.&amp;nbsp;Hence, a explicit range variable is in order to make this work.&amp;nbsp; I know I know, that&amp;#39;s exactly what the error message recommended, but I didn&amp;#39;t understand why at first and wanted to dig deeper into it. So bascially, here&amp;#39;s what was needed to make it work.&amp;nbsp; Simply use the &lt;a href="http://msdn.microsoft.com/en-us/library/bb341406.aspx"&gt;Cast&amp;lt;T&amp;gt; &lt;/a&gt;&amp;nbsp; extension method on the collection and well, that&amp;#39;s it.&lt;/p&gt;&lt;code&gt;
&lt;p&gt;&lt;font color="#0000ff"&gt;ConnectionStringSettingsCollection&lt;/font&gt; cfg = &lt;font color="#339966"&gt;ConfigurationManager&lt;/font&gt;.ConnectionStrings;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#0000ff"&gt;&lt;code&gt;var&lt;/font&gt; myvar = &lt;font color="#0000ff"&gt;from&lt;/font&gt; cs &lt;font color="#0000ff"&gt;in &lt;/font&gt;cfg.Cast&amp;lt;&lt;font color="#339966"&gt;ConnectionStringSettings&lt;/font&gt;&amp;gt;()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;select&lt;/font&gt; cs;&lt;br /&gt;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt; (var mine &lt;font color="#0000ff"&gt;in&lt;/font&gt; myvar)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color="#339966"&gt;&amp;nbsp;Console&lt;/font&gt;.WriteLine(mine);&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Of course, you could just cut out some of the bloat and address the collection directly&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt; myvar = &lt;font color="#0000ff"&gt;from&lt;/font&gt; cs &lt;font color="#0000ff"&gt;in&lt;/font&gt; &lt;font color="#339966"&gt;ConfigurationManager&lt;/font&gt;.ConnectionStrings.Cast&amp;lt;&lt;font color="#339966"&gt;ConnectionStringSettings&lt;/font&gt;&amp;gt;()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;select&lt;/font&gt; cs;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt; (&lt;font color="#0000ff"&gt;var&lt;/font&gt; mine &lt;font color="#0000ff"&gt;in&lt;/font&gt; myvar)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Console.WriteLine(mine);&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Whenever Intellisense doesn&amp;#39;t do what you&amp;#39;re expecting it to, that&amp;#39;s the first tipoff something is wrong in your query.&amp;nbsp; Although my days of 2 day work weeks have come to an end temporarily, I&amp;#39;ll try to find some time to blog the rest of what I was working on - there&amp;#39;s so much you can do with LINQ that I often overlook.&amp;nbsp; And this is the first time I&amp;#39;ve come across the explicit range variable issue but I&amp;#39;m guessing it&amp;#39;ll come up again, particularly if you use LINQ regularly.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1616777" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/williamryan/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Range+Variable/default.aspx">Range Variable</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/Explicit+Range+Variable/default.aspx">Explicit Range Variable</category><category domain="http://msmvps.com/blogs/williamryan/archive/tags/C_2300_+3.5/default.aspx">C# 3.5</category></item><item><title>Seasons changing again.</title><link>http://msmvps.com/blogs/williamryan/archive/2008/03/29/seasons-changing-again.aspx</link><pubDate>Sat, 29 Mar 2008 05:06:28 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1560101</guid><dc:creator>William</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1560101</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/03/29/seasons-changing-again.aspx#comments</comments><description>&lt;p&gt;Things have been pretty hectic lately so I haven&amp;#39;t really kept up with everyone as much as I&amp;#39;d like to.&amp;nbsp; The big announcement with me is that I&amp;#39;m leaving Magenic and taking a new position much closer to home.&amp;nbsp; I&amp;#39;ve really liked most every company I&amp;#39;ve worked for over the years, and have always made a lot of friends at work.&amp;nbsp; Magenic has been a lot different.&amp;nbsp; As a Magenic employee, you frequently hear about the Magenic &amp;#39;family&amp;#39;.&amp;nbsp; Many times such phrases are little more than campy soundin cliche&amp;#39;s.&amp;nbsp; I can honestly say though, it&amp;#39;s been completey different at Magenic.&amp;nbsp; It really is as close to family as you can get without the real thing and it&amp;#39;s a huge bummer leaving.&amp;nbsp; The problem is, i&amp;#39;ve been living a duel existence.&amp;nbsp; I work in Atlanta, have a residence here, but I live in Greenville.&amp;nbsp; Atlanta traffic is something to behold so unless I leave really early Friday&amp;#39;s, I end up with maybe 2 hours with the Family on Friday, all&amp;nbsp; day Sunday, and then about 1/2 day Sunday.&amp;nbsp; Although I agreed to travel as much as needed, Magenic was aware of my situation and really went out of their way to minimize travel for me. In my tenure, I&amp;#39;ve only had one real travel gig and that was only 5 weeks. I had a few small ones, but they were two or three day engagements. Throughout all of this, I&amp;#39;ve been busy doing work for Microsoft, work which requires me to be in Redmond regularly. I&amp;#39;ve been tech editing books pretty much consistently and I&amp;#39;m in the process of writing another book.&amp;nbsp; All of it added up to a really busy private life.&amp;nbsp; Kim has been a saint about the whole thing but we all have our bending points.&amp;nbsp; &lt;/p&gt; &lt;p&gt;So today was my last day at the company.&amp;nbsp; Sunday is my last day at my current residence.&amp;nbsp; I&amp;#39;ll certainly be around Atlanta regularly so I&amp;#39;m not leaving in any permanent sense.&amp;nbsp; And&amp;nbsp; b/c of what I&amp;#39;ll be doing, I&amp;#39;ll have a lot of free time.&amp;nbsp; &lt;a href="http://blah.winsmarts.com"&gt;Sahil&lt;/a&gt; had been instrumental in convincing me to go independent and i finally stepped up and did it.&amp;nbsp; I have a lot to learn about the whole &amp;#39;running your own business&amp;#39; aspect of consulting, but to be honest, I&amp;#39;m a really late bloomer in that regard and it&amp;#39;s about time I did it.&lt;/p&gt; &lt;p&gt;I was spending most of tonight getting ready for my &lt;a href="http://atlantacodecamp.com"&gt;code camp presentation&lt;/a&gt; tomorrow all the while packing and trying to get out of here.&amp;nbsp; I probably should have just hired movers but like cutting my own grass, moving is one of those things I always insist on doing myself.&amp;nbsp; If I keep up that philosophy though, I am pretty sure I have maybe 2 more moves left in me in this lifetime, b/c moving Sucks.&lt;/p&gt; &lt;p&gt;Anyway, as I was getting everything moved, everything started to sink in.&amp;nbsp; When I first came to Magenic, I was really scared of being a little fish in a big pond, and I was.&amp;nbsp; B/c of really helpful co-workers and really supportive management, I was able to build up my skills pretty quickly.&amp;nbsp; After 6 months I won Magenic&amp;#39;s Consultant of the Quarter award which was a big honor for me.&amp;nbsp; Shortly thereafter I was promoted from Senior Consultant to Principal Consultant.&amp;nbsp; With that came the position as Technology Evangelist which really added a high cool factor to an already cool job.&amp;nbsp; When I first got to Atlanta, I hated it. I love big cities and have lived in a few, but I felt totally overwhelmed. Traffic was like nothing I&amp;#39;ve ever experienced and it seemed that you had to plan your day around traffic.&amp;nbsp; It was hard to make committments to be anywhere in the morning, afternoon or early evening b/c of traffic.&amp;nbsp; One flat tire on the side of the road magnified by rubbernecking could turn a 15 minute trip into a 1 1/2 one.&amp;nbsp; And there was always a flat tire or police officer pulling someone over.&amp;nbsp; Rubbernecking is a scourge and I don&amp;#39;t know what can be done about it, but it has to cost zillions of dollars in lost productivity.&amp;nbsp; The weird thing too is that EVERYONE acknowledges how wrong it is. Everyone says it&amp;#39;s terrible and everyone says they don&amp;#39;t do it. Yet every time there&amp;#39;s a guy pulled over on the road, traffic will be backed up for 5 miles or more so there&amp;#39;s a disconnect somewhere. (Reminds me of the &amp;quot;Kids peeing in pool paradox&amp;quot;.&amp;nbsp; Every time I mention that I don&amp;#39;t go in public pools where there are children I get asked why. I say &amp;#39;b/c kids pee in the pool. I&amp;#39;m sure adults do as well, but you just *know* that kids are doing it.&amp;nbsp; Immediately, people with children say &amp;quot;Well, my child would never pee in the pool!&amp;quot;&amp;nbsp; So self-reports indicate that absolutely 0 people&amp;#39;s children pee in pools, yet there&amp;#39;s a lot of child pee in pools, so where does it come from?&amp;nbsp; Same phenomenon seems to be in place with rubbernecking).&amp;nbsp; Anyway, I ended up getting a place with a great location, so I missed traffic both ways other than getting out of the Perimeter on Fridays.&amp;nbsp; Little by little I went from hating Atlanta to really loving it.&amp;nbsp; Then it turned into my favorite city to live in.&amp;nbsp; And now that it&amp;#39;s acheived that place in my heart, I&amp;#39;ve got to move ;-(&amp;nbsp; To that end, I&amp;#39;m quite sure I&amp;#39;ll be back regularly - there&amp;#39;s just too much I&amp;#39;ve gotten accustomed to doing here and greenville is cool and all, but it&amp;#39;s not Atlanta.&lt;/p&gt; &lt;p&gt;If you want to get a hold of me, you can use the Contact link above and shoot me your email address, I&amp;#39;ll get back to you from there.&amp;nbsp; You can also reach me at &lt;a href="http://www.facebook.com/profile.php?id=592491475"&gt;Facebook&lt;/a&gt;&amp;nbsp;, &lt;a href="http://www.linkedin.com/profile?viewProfile=&amp;amp;key=2472475&amp;amp;trk=tab_pro"&gt;LinkedIn&lt;/a&gt;, or &lt;a href="http://twitter.com//wgryan"&gt;Twitter&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Anyway, I&amp;#39;ll be fully moved in this weekend and Kim and I will be tying the knot shortly.&amp;nbsp; Since I&amp;#39;m going to have a lot more free time, I&amp;#39;ll be able to blog all the different 3.5/LINQ/ Entity Framework/Synchronization Services stuff I&amp;#39;ve been working on and hopefully will be able to get back into the newsgroups a lot more consistently.&lt;/p&gt; &lt;p&gt;As much of a bummer as it is to leave Atlanta, I&amp;#39;ve always liked Greenville and I&amp;#39;ll be able to see Paul and Jason a lot more, not to mention my friends in Augusta like Ben. Brian and Andy.&amp;nbsp; All in all this is going to be a good move, but leaving a city you love and a job you love in a company you love is never easy.&lt;/p&gt; &lt;p&gt;And by the way... although we have a pretty high volume of applications, Magenic is always looking for passionate and talented professionals.&amp;nbsp; If you are in the Atlanta area and looking to get into consulting, or looking to work for a company that will really help you develop your career, Magenic is definitely a place that you&amp;#39;ll enjoy. I&amp;#39;d be glad to get you introduced if you have any interest there so just drop me a line if you want.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1560101" width="1" height="1"&gt;</description></item><item><title>Grand Theft Auto IV</title><link>http://msmvps.com/blogs/williamryan/archive/2008/03/28/grand-theft-auto-iv.aspx</link><pubDate>Fri, 28 Mar 2008 21:38:24 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1559596</guid><dc:creator>William</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/williamryan/rsscomments.aspx?PostID=1559596</wfw:commentRss><comments>http://msmvps.com/blogs/williamryan/archive/2008/03/28/grand-theft-auto-iv.aspx#comments</comments><description>&lt;p&gt;A really compelling trailer for it is available &lt;a href="http://www.amazon.com/gp/feature.html/?ie=UTF8&amp;amp;docId=1000174181"&gt;at Amazon&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1559596" width="1" height="1"&gt;</description></item></channel></rss>