<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>.NET Blog</title>
    <description>Tony Cavaliere</description>
    <link>http://cynotwhynot.com/blog/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.Net Syndication Generator 1.0.0.0 (http://dotnetblogengine.net/)</generator>
    <language>en-GB</language>
    <blogChannel:blogRoll>http://cynotwhynot.com/blog/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>Tony Cavaliere</dc:creator>
    <dc:title>.NET Blog</dc:title>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/CynotWhyNot" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>Why I like Windows Server 2008 R2</title>
      <description>&lt;p&gt;Windows Server 2008 R2 was recently released on October 22, 2009. I have already used Windows Server 2008 and enjoyed many of it’s new features but this latest release has got me excited and all for one new feature, Remote Desktop multi-monitor support.&lt;/p&gt;  &lt;p&gt;Currently I am remoting&amp;#160; to a Windows Server 2008 computer, my local computer runs Windows 7. Remote Desktop Connection available on Windows 7 has support for multiple monitors however the computer you are remoting must also supports multiple monitors remotely. Both Windows 7 and Windows Server 2008 R2 have this build-in capability. All you need to do is enable it from your local machine and remote to the destination computer and sit back and enjoy. I’ve tried it (Windows 7 local and Windows Server 2008 R2 remote) and it work without any issues.&lt;/p&gt;  &lt;p&gt;So all you remote users out there rejoice and celebrate your productivity has just increased.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/WhyIlikeWindowsServer2008R2/0A4EBA84/image.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/WhyIlikeWindowsServer2008R2/6A7030FB/image_thumb.png" width="604" height="638" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/CynotWhyNot/~4/c2_GIkkLQdk" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/CynotWhyNot/~3/c2_GIkkLQdk/post.aspx</link>
      <author>cynotwhynot</author>
      <comments>http://cynotwhynot.com/blog/post/Why-I-like-Windows-Server-2008-R2.aspx#comment</comments>
      <guid isPermaLink="false">http://cynotwhynot.com/blog/post.aspx?id=ae852b6b-4294-4d5f-9948-6a96dfeb5cc7</guid>
      <pubDate>Sat, 24 Oct 2009 10:19:35 -0800</pubDate>
      <dc:publisher>cynotwhynot</dc:publisher>
      <pingback:server>http://cynotwhynot.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://cynotwhynot.com/blog/post.aspx?id=ae852b6b-4294-4d5f-9948-6a96dfeb5cc7</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://cynotwhynot.com/blog/trackback.axd?id=ae852b6b-4294-4d5f-9948-6a96dfeb5cc7</trackback:ping>
      <wfw:comment>http://cynotwhynot.com/blog/post/Why-I-like-Windows-Server-2008-R2.aspx#comment</wfw:comment>
      <wfw:commentRss>http://cynotwhynot.com/blog/syndication.axd?post=ae852b6b-4294-4d5f-9948-6a96dfeb5cc7</wfw:commentRss>
    <feedburner:origLink>http://cynotwhynot.com/blog/post.aspx?id=ae852b6b-4294-4d5f-9948-6a96dfeb5cc7</feedburner:origLink></item>
    <item>
      <title>Where&amp;rsquo;s the MDF?</title>
      <description>&lt;p&gt;I’ve always wondered why the ASP.NET folks have always had (or at least since VS2005) the ability to add a detached SQL Express file, or commonly referred to as an MDF file, whereas, project types like console application and windows forms do not. &lt;/p&gt;  &lt;p&gt;When you add a new item to an ASP.NET application you will see the following dialog.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/WherestheMDF/2C2888BB/image.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/WherestheMDF/6E6B7B31/image_thumb.png" width="604" height="422" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice the SQL Server Database option. Selecting this will cause an MDF file to be added to the ASP.NET application. Very convenient. However, no such option exists for either the console or windows forms project types. &lt;/p&gt;  &lt;p&gt;I have seen developers add MDF files by starting SQL Server Management Studio, creating a database, detaching it and then coping the file to the project. I have also seen developers create an ASP.NET project, add a MDF file and then copy the MDF to the desired project. Neither are optimal.&lt;/p&gt;  &lt;p&gt;One great way to automate this, is to create an Item Template. To do this create an ASP.NET project and then add an MDF file by selecting Add New Item menu option and selecting SQL Server Database. This will add a detached SQLExpress database file to the project. The next step is to delete the LDF (log) file from the project.&lt;/p&gt;  &lt;p&gt;Now we are ready to create the Item Template. Select the File-&amp;gt;Export Template menu. This causes the Export Template Wizard to appear,a s shown below.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/WherestheMDF/116BC6D5/image.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/WherestheMDF/6CAA8990/image_thumb.png" width="604" height="534" /&gt;&lt;/a&gt;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Select the Item template radio button and click the Next &amp;gt; button. The Select Item To Export dialog appears from which you select the MDF file.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/WherestheMDF/393EA067/image.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/WherestheMDF/0717501D/image_thumb.png" width="604" height="379" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The next dialog to appear after selecting the Next &amp;gt; button is the Select Item References dialog. In this situation there is no need to include any references so just click the Next &amp;gt; button. The Select Template Options dialog appears from which you specific the name of the template. When done select Finish and that’s it you have created a item template that can be used just about everywhere.&lt;/p&gt;  &lt;p&gt;Try it out, create a console application and then select the Add-&amp;gt;New Item menu item. If all goes well you should see the Add New Item dialog and under the My Templates you should see the new Item Template. Selecting this Item Template will add a SQLExpress MDF file to the project.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/WherestheMDF/5F242AF0/image.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/WherestheMDF/160DE35D/image_thumb.png" width="604" height="422" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/CynotWhyNot/~4/XFK2xx_Z8Fk" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/CynotWhyNot/~3/XFK2xx_Z8Fk/post.aspx</link>
      <author>cynotwhynot</author>
      <comments>http://cynotwhynot.com/blog/post/Wherersquo3bs-the-MDF.aspx#comment</comments>
      <guid isPermaLink="false">http://cynotwhynot.com/blog/post.aspx?id=135f73c0-bec8-4caf-a032-b9fd77d402e1</guid>
      <pubDate>Wed, 07 Oct 2009 16:36:31 -0800</pubDate>
      <dc:publisher>cynotwhynot</dc:publisher>
      <pingback:server>http://cynotwhynot.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://cynotwhynot.com/blog/post.aspx?id=135f73c0-bec8-4caf-a032-b9fd77d402e1</pingback:target>
      <slash:comments>5</slash:comments>
      <trackback:ping>http://cynotwhynot.com/blog/trackback.axd?id=135f73c0-bec8-4caf-a032-b9fd77d402e1</trackback:ping>
      <wfw:comment>http://cynotwhynot.com/blog/post/Wherersquo3bs-the-MDF.aspx#comment</wfw:comment>
      <wfw:commentRss>http://cynotwhynot.com/blog/syndication.axd?post=135f73c0-bec8-4caf-a032-b9fd77d402e1</wfw:commentRss>
    <feedburner:origLink>http://cynotwhynot.com/blog/post.aspx?id=135f73c0-bec8-4caf-a032-b9fd77d402e1</feedburner:origLink></item>
    <item>
      <title>Expression 3 Screen Capture &amp;ndash; Dual Monitor</title>
      <description>&lt;p&gt;
I&amp;rsquo;ve been playing around with Expression 3 Encoder and Screen Capture and I must say, pretty impressive. The screen capture is extremely easily to use and has build-in support for overlays. In fact, the PIP webcam feature is automatically overlayed onto the video. This makes it easy to include the presenter in a small window, the location of which can be configured. 
&lt;/p&gt;
&lt;p&gt;
One thing that surprised me was the recognition that I was running dual monitor and that Expression Screen Capture was able to capture both screens. Wow! 
&lt;/p&gt;
&lt;p&gt;
Below are two videos, hosted on Silverlight Streaming, I capture using Expression 3. The video on the left shows the capture of the dual monitors, while the second contains a capture of a high definition video. Unfortunately, Expression 3 Encoder does not support the Publish To Silverlight Streaming option. I had to manually upload the videos to the Silverlight Streaming Service. Hopefully that plug-in will be made available shortly. 
&lt;/p&gt;
&lt;p&gt;
To enter full screen mode double click. Likewise, to exit full screen double click again. 
&lt;/p&gt;
&lt;iframe src="http://silverlight.services.live.com/invoke/98344/DualMonitor/iframe.html" frameborder="0" style="width: 400px; float: left; height: 300px"&gt;&lt;/iframe&gt;&lt;iframe src="http://silverlight.services.live.com/invoke/98344/ScreenCaptureWithVideo/iframe.html" frameborder="0" style="width: 400px; float: left; height: 300px"&gt;&lt;/iframe&gt;
&lt;p style="clear: both"&gt;
Expression 3 has taken video to the next level! 
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/CynotWhyNot/~4/XtzfdumIJiE" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/CynotWhyNot/~3/XtzfdumIJiE/post.aspx</link>
      <author>CynotWhyNot</author>
      <comments>http://cynotwhynot.com/blog/post/Expression-3-Screen-Capture-ndash3b-Dual-Monitor.aspx#comment</comments>
      <guid isPermaLink="false">http://cynotwhynot.com/blog/post.aspx?id=7dd881ca-12d2-4ad3-aeac-d1e9dab978f0</guid>
      <pubDate>Wed, 02 Sep 2009 22:27:00 -0800</pubDate>
      <category>Expression</category>
      <category>Silverlight</category>
      <dc:publisher>CynotWhyNot</dc:publisher>
      <pingback:server>http://cynotwhynot.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://cynotwhynot.com/blog/post.aspx?id=7dd881ca-12d2-4ad3-aeac-d1e9dab978f0</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://cynotwhynot.com/blog/trackback.axd?id=7dd881ca-12d2-4ad3-aeac-d1e9dab978f0</trackback:ping>
      <wfw:comment>http://cynotwhynot.com/blog/post/Expression-3-Screen-Capture-ndash3b-Dual-Monitor.aspx#comment</wfw:comment>
      <wfw:commentRss>http://cynotwhynot.com/blog/syndication.axd?post=7dd881ca-12d2-4ad3-aeac-d1e9dab978f0</wfw:commentRss>
    <feedburner:origLink>http://cynotwhynot.com/blog/post.aspx?id=7dd881ca-12d2-4ad3-aeac-d1e9dab978f0</feedburner:origLink></item>
    <item>
      <title>Installing CodeRush XPress on Windows 7 RTM</title>
      <description>&lt;p&gt;
Windows 7 RTM was recently released to MSDN subscribes and I decided to install it last week. I had already tried RC and was impressed but did not spend as much time using it as I would have liked. This time I decided, let&amp;rsquo;s go for it and install Windows 7 RTM with all my developer applications and tools. The installation of Windows 7 RTM went smoothly with no hick ups at all. The next step was to create a VHD from the Windows 7 install DVD, natively from Windows 7. That&amp;rsquo;s right for those of you that haven&amp;rsquo;t heard Windows 7 has native support for VHD (only Ultimate and Enterprise version have this). In fact, Windows 7 boot manager will boot a VHD and it will run natively and with the exception of the hard drive the hardware used by the booted VHD is physical. &lt;a href="http://www.hanselman.com/blog/StepByStepTurningAWindows7DVDOrISOIntoABootableVHDVirtualMachine.aspx"&gt;Scott Hansleman&lt;/a&gt; has posted on this subject and has instructions on how to setup and boot a VHD.
&lt;/p&gt;
&lt;p&gt;
After creating a VHD and adding it to the boot manager, I proceeded to install all my developer applications. here is the list of applications I installed.
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Visual Studio 2008&lt;/li&gt;
	&lt;li&gt;Visual Studio 2008 SP1&lt;/li&gt;
	&lt;li&gt;NUnit&lt;/li&gt;
	&lt;li&gt;RhinoMocks&lt;/li&gt;
	&lt;li&gt;TortoiseSVN&lt;/li&gt;
	&lt;li&gt;ASP.NET MVC&lt;/li&gt;
	&lt;li&gt;Silverlight SDK&lt;/li&gt;
	&lt;li&gt;testDriven.NET&lt;/li&gt;
	&lt;li&gt;Reflector&lt;/li&gt;
	&lt;li&gt;Firefox and Firebug&lt;/li&gt;
	&lt;li&gt;Fiddler&lt;/li&gt;
	&lt;li&gt;AnkhSVN&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
If you are not familiar with some of these tools and want a description then please visit my &lt;a href="http://home.cynotwhynot.com/home/toolbox"&gt;toolbox site.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Afterwards I took some of my applications namely, &lt;a href="http://home.cynotwhynot.com"&gt;My Site (ASP.NET MVC),&lt;/a&gt;&amp;nbsp;&lt;a href="http://silverlight.cynotwhynot.com/"&gt;My Silverlight Gallery,&lt;/a&gt; and &lt;a href="http://www.gtanetcc.com/"&gt;GTANETCC (asp.net),&lt;/a&gt; compiled and ran them and they all behaved as expected.
&lt;/p&gt;
&lt;p&gt;
Needless to say, the experience was great!
&lt;/p&gt;
&lt;p&gt;
Next came &lt;a href="http://www.devexpress.com/Products/Visual_Studio_Add-in/CodeRushX/"&gt;CodeRush Xpress&lt;/a&gt; a great refactoring tool available for free from Developer Express. I installed the tool and then noticed that the refactoring was not available when I ran Visual Studio 2008. The product was installed but did not load. Selecting the DevExpress menu item and then the Load option caused the Invalid index. (Exception form HRESULT:0x800200B (DISP_E_BDAINDEX)).
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/InstallingCodeRushXPressonWindows7RTM/71721FD3/CodeRushBadIndex.png"&gt;&lt;img style="display: inline; border: 0px" src="http://cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/InstallingCodeRushXPressonWindows7RTM/28D83102/CodeRushBadIndex_thumb.png" border="0" alt="CodeRush Bad Index" title="CodeRush Bad Index" width="644" height="281" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
It turns out that the DevExpressToolsOrcas.Addin file is not installed in the correct location. The fix was rather simple, copy C:\ProgramData\Microsoft\MSEnvShared\DevExpressToolsOrcas.Addin to C:\Users\(USER)\AppData\Roaming\Microsoft\MSEnvShared\Addins\DevExpressToolsOrcas.Addin
&lt;/p&gt;
&lt;p&gt;
After that all the refactoring tools from CodeRush Xpress worked fine.
&lt;/p&gt;
&lt;p&gt;
I have been using Windows 7 RTM for 5 days now and I have nothing bad to say about it and plenty good to say. This native support for VHD is wonderful. Windows 7 rocks!
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/CynotWhyNot/~4/AtU9gG2chDc" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/CynotWhyNot/~3/AtU9gG2chDc/post.aspx</link>
      <author>CynotWhyNot</author>
      <comments>http://cynotwhynot.com/blog/post/Installing-CodeRush-XPress-on-Windows-7-RTM.aspx#comment</comments>
      <guid isPermaLink="false">http://cynotwhynot.com/blog/post.aspx?id=78c24882-2ead-4938-b574-2b23d1340cb3</guid>
      <pubDate>Mon, 17 Aug 2009 14:34:00 -0800</pubDate>
      <dc:publisher>CynotWhyNot</dc:publisher>
      <pingback:server>http://cynotwhynot.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://cynotwhynot.com/blog/post.aspx?id=78c24882-2ead-4938-b574-2b23d1340cb3</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://cynotwhynot.com/blog/trackback.axd?id=78c24882-2ead-4938-b574-2b23d1340cb3</trackback:ping>
      <wfw:comment>http://cynotwhynot.com/blog/post/Installing-CodeRush-XPress-on-Windows-7-RTM.aspx#comment</wfw:comment>
      <wfw:commentRss>http://cynotwhynot.com/blog/syndication.axd?post=78c24882-2ead-4938-b574-2b23d1340cb3</wfw:commentRss>
    <feedburner:origLink>http://cynotwhynot.com/blog/post.aspx?id=78c24882-2ead-4938-b574-2b23d1340cb3</feedburner:origLink></item>
    <item>
      <title>My first jQuery plug-in</title>
      <description>&lt;p&gt;I’ve been using jQuery for quite some time and eventually after enough time you will end up writing your own custom plug-in. Fortunately, the mechanics of writing a jQuery plug-in is rather simple. Perhaps that is why we see so many plug-ins for jQuery. The jQuery site alone has some 1500+ of them.&lt;/p&gt;  &lt;p&gt;Recently, I decided to redo my site using ASP.NET MVC and decided to use rounded corners for the resume module. I found an excellent CSS implementation and so realized that surrounding existing tag with the necessary mark-up to implement rounded corners was cumbersome and problematic. Custom jQuery plug-in to the rescue.&lt;/p&gt;  &lt;p&gt;The CSS rounded corner implementation can be found at the following site &lt;a title="http://www.schillmania.com/projects/dialog/png/" href="http://www.schillmania.com/projects/dialog/png/"&gt;http://www.schillmania.com/projects/dialog/png/&lt;/a&gt; Basically, the technique wraps the following mark-up around the desired content you want add rounded corners to.&lt;/p&gt;  &lt;pre style="background-color: #dddddd"&gt;&amp;lt;div class=&amp;quot;rounded-corners&amp;quot;&amp;gt;
  &amp;lt;div class=&amp;quot;hd&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;c&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div class=&amp;quot;bd&amp;quot;&amp;gt;
    &amp;lt;div class=&amp;quot;c&amp;quot;&amp;gt;
      &amp;lt;div class=&amp;quot;s&amp;quot;&amp;gt;
         &amp;lt;!-- Your content goes here --&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;div class=&amp;quot;ft&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;c&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;

&lt;p&gt;Basically, this mark-up along with some CSS and images will render rounded corner container around your content. This works fine for the odd content that you want rounded corners for. But what if you have dozens of places where you want rounded corners? Do you really want to pollute the mark-up with all those div tags. In my case I decided that a jQuery plug-in would solve the problem. Rather than manually add all the above div tags why not write a jQuery plug-in that will wrap an element with the rounded corner div tags. The jQuery call would look like $(selector).roundedCorners(); This plug-in would take the DOM elements that are matched by the selector and dynamically add these div tags.&lt;/p&gt;

&lt;p&gt;Creating a jQuery plug-in is as simple as creating a function;&lt;/p&gt;

&lt;pre style="background-color: #dddddd"&gt;$.fn.roundeCorners = function() {
  //your code goes here
}&lt;/pre&gt;

&lt;p&gt;One problem with this approach is it assumes that $ is an alias for jQuery. What if a call is made to $.noConflict(); which removes the $ alias. You could use the jQuery function directly jQuery programmers are so use to to using the $ alias. To get around this the following code is used&lt;/p&gt;

&lt;pre style="background-color: #dddddd"&gt;(function($) {
    $.fn.roundeCorners = function() {
        //your code goes here
    }
})(jQuery);&lt;/pre&gt;

&lt;p&gt;This syntax is difficult to get your head around but what it does is call an anonymous function with a parameter $ and passes jQuery to the function, that is, for the duration of the function $ represents the function jQuery.&lt;/p&gt;

&lt;p&gt;That’s all there is to creating a jQuery plug-in. Now let’s write a jQuery plug-in that dynamically adds the rounded corner div tags.&lt;/p&gt;

&lt;div style="font-size: 10pt; background: #dddddd; color: black; font-family: monaco"&gt;
  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 1&lt;/span&gt; (&lt;span style="color: blue"&gt;function&lt;/span&gt;($) {&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 2&lt;/span&gt;&amp;#160;&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 3&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $.fn.roundedCorners = &lt;span style="color: blue"&gt;function&lt;/span&gt;() {&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 4&lt;/span&gt;&amp;#160;&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 5&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//wrap the element with div tags required to round the corners&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 6&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color: blue"&gt;this&lt;/span&gt;)&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 7&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .wrap(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;lt;div class='rounded-corners'&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;/span&gt;)&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 8&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .wrap(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;lt;div class='rounded-corners-bd'&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;/span&gt;)&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 9&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .wrap(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;lt;div class='rounded-corners-c'&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;/span&gt;)&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160; 10&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .wrap(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;lt;div class='rounded-corners-s'&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160; 11&lt;/span&gt;&amp;#160;&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160; 12&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//need to add header and footer div tags before and after the body div tag &lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160; 13&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; selector = &lt;span style="color: #a31515"&gt;'.rounded-corners '&lt;/span&gt; + &lt;span style="color: blue"&gt;this&lt;/span&gt;.selector;&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160; 14&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; bd = $(selector).parents(&lt;span style="color: #a31515"&gt;'.rounded-corners-bd'&lt;/span&gt;);&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160; 15&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;lt;div class='rounded-corners-hd'&amp;gt;&amp;lt;div class='rounded-corners-c'&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;/span&gt;).insertBefore(bd);&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160; 16&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;lt;div class='rounded-corners-ft'&amp;gt;&amp;lt;div class='rounded-corners-c'&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;/span&gt;).insertAfter(bd);&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160; 17&lt;/span&gt;&amp;#160;&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160; 18&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;this&lt;/span&gt;;&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160; 19&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160; 20&lt;/span&gt;&amp;#160;&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160; 21&lt;/span&gt; })(jQuery);&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;The above code wraps all matched DOM elements with the rounded corner div tags.&amp;#160; The following shows how to make use of this plug-in&lt;/p&gt;

&lt;div style="font-size: 10pt; background: #dddddd; color: black; font-family: monaco"&gt;
  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 5&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 6&lt;/span&gt;&amp;#160;&amp;#160; $(&lt;span style="color: blue"&gt;function&lt;/span&gt;() {&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 7&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color: #a31515"&gt;'#foo&amp;quot;).roundedCorners();&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 8&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color: #a31515"&gt;'.moo&amp;quot;).roundedCorners();&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 9&lt;/span&gt;&amp;#160;&amp;#160; }); &lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160; 10&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160; 11&lt;/span&gt;&amp;#160;&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160; 12&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;foo&amp;quot;&amp;gt;&lt;/span&gt;Hello foo&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160; 13&lt;/span&gt;&amp;#160;&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160; 14&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt; &lt;span style="color: red"&gt;class&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;moo&amp;quot;&amp;gt;&lt;/span&gt;Hello moo 1&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160; 15&lt;/span&gt;&amp;#160;&lt;/p&gt;

  &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160; 16&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt; &lt;span style="color: red"&gt;class&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;moo&amp;quot;&amp;gt;&lt;/span&gt;Hello moo 2&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;All three div tags will be wrapped with the rounded corner div tags and will be rendered with rounded corners.&lt;/p&gt;

&lt;div class="wlWriterEditableSmartContent" id="scid:8eb9d37f-1541-4f29-b6f4-1eea890d4876:1f1183a3-77d0-433f-aec3-d72a15815390" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;p&gt;&lt;div&gt;&lt;a href="http://www.cynotwhynot.com/blog/file.axd?file=WindowsLiveWriter/MyfirstjQueryplugin_E678/rounded-corners.zip" target="_self"&gt;Download source code here.&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CynotWhyNot/~4/lsAoEMtPM-M" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/CynotWhyNot/~3/lsAoEMtPM-M/post.aspx</link>
      <author>CynotWhyNot</author>
      <comments>http://cynotwhynot.com/blog/post/My-first-jQuery-plug-in.aspx#comment</comments>
      <guid isPermaLink="false">http://cynotwhynot.com/blog/post.aspx?id=aa5270b0-917c-4819-9543-6b6e05aa951b</guid>
      <pubDate>Wed, 05 Aug 2009 08:18:42 -0800</pubDate>
      <dc:publisher>CynotWhyNot</dc:publisher>
      <pingback:server>http://cynotwhynot.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://cynotwhynot.com/blog/post.aspx?id=aa5270b0-917c-4819-9543-6b6e05aa951b</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://cynotwhynot.com/blog/trackback.axd?id=aa5270b0-917c-4819-9543-6b6e05aa951b</trackback:ping>
      <wfw:comment>http://cynotwhynot.com/blog/post/My-first-jQuery-plug-in.aspx#comment</wfw:comment>
      <wfw:commentRss>http://cynotwhynot.com/blog/syndication.axd?post=aa5270b0-917c-4819-9543-6b6e05aa951b</wfw:commentRss>
    <feedburner:origLink>http://cynotwhynot.com/blog/post.aspx?id=aa5270b0-917c-4819-9543-6b6e05aa951b</feedburner:origLink></item>
    <item>
      <title>It&amp;rsquo;s time to MVCify my website.</title>
      <description>&lt;p&gt;OK it’s time. I have been spending quite some time learning ASP.NET MVC. I’ve read the Professional ASP.NET MVC 1.0 book and watched numerous videos on the topic but until you sit down and create a real website with the technology, it just won’t click. To this end, I have decided to redo my website using MVC. Frankly it needed an overhaul anyway. I used a template to construct my home and resume pages and they used tables for layout. They work perfectly fine but are outdated and need to be replaced with the preferred CSS DIV tag layout.&lt;/p&gt;  &lt;p&gt;So here we go my first crack at creating an MVC application. I’ll be refactoring the home page first and will follow with the resume, agenda, toolbox and jQuery sites. I’m not to sure about my blog as it uses BlogEngine.net. My &lt;a href="http://www.cynotwhynot.com/slgallery" target="_blank"&gt;silverlight gallery&lt;/a&gt; can certainly be ported to MVC but that will take a bit longer.&lt;/p&gt;  &lt;p&gt;So far I have almost completed MVCifying my home page. Check it out &lt;a href="http://home.cynotwhynot.com" target="_blank"&gt;here.&lt;/a&gt; Hover over the menu items, my photo and my name, all done with jQuery and CSS.&lt;/p&gt;  &lt;p&gt;Once completed I will make available the source code for download.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/CynotWhyNot/~4/faeavVY8CtE" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/CynotWhyNot/~3/faeavVY8CtE/post.aspx</link>
      <author>CynotWhyNot</author>
      <comments>http://cynotwhynot.com/blog/post/Itrsquo3bs-time-to-MVCify-my-website.aspx#comment</comments>
      <guid isPermaLink="false">http://cynotwhynot.com/blog/post.aspx?id=7c82a18f-b47f-46a3-b1e5-2759eaf9c747</guid>
      <pubDate>Thu, 23 Jul 2009 15:56:29 -0800</pubDate>
      <dc:publisher>CynotWhyNot</dc:publisher>
      <pingback:server>http://cynotwhynot.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://cynotwhynot.com/blog/post.aspx?id=7c82a18f-b47f-46a3-b1e5-2759eaf9c747</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://cynotwhynot.com/blog/trackback.axd?id=7c82a18f-b47f-46a3-b1e5-2759eaf9c747</trackback:ping>
      <wfw:comment>http://cynotwhynot.com/blog/post/Itrsquo3bs-time-to-MVCify-my-website.aspx#comment</wfw:comment>
      <wfw:commentRss>http://cynotwhynot.com/blog/syndication.axd?post=7c82a18f-b47f-46a3-b1e5-2759eaf9c747</wfw:commentRss>
    <feedburner:origLink>http://cynotwhynot.com/blog/post.aspx?id=7c82a18f-b47f-46a3-b1e5-2759eaf9c747</feedburner:origLink></item>
    <item>
      <title>Linq to SQL: A small CRUD application</title>
      <description>&lt;p&gt;
For the last month or so I have been helping out with a medium .NET windows forms application that uses Linq to SQL for it&amp;rsquo;s ORM. It had been a while since I last used Linq to SQL, so I thought it would be a good time to refresh my skills and write a proof of concept application, one that used Linq to SQL to create, read, update and delete records.
&lt;/p&gt;
&lt;p&gt;
The model consists of four classes and is shown in the following figure.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/LinqtoSQLAsmallCRUDapplication_815C/BookModel_2.png"&gt;&lt;img style="border-width: 0px; display: inline" src="http://cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/LinqtoSQLAsmallCRUDapplication_815C/BookModel_thumb.png" border="0" alt="BookModel" title="BookModel" width="604" height="546" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;Linq to SQL Model Diagram&lt;/u&gt;
&lt;/p&gt;
&lt;p&gt;
The Book object contains references to each of the Genre, Publisher and Author objects. In this contrived example, a Book must have one and only one Author, Genre and Publisher. 
&lt;/p&gt;
&lt;p&gt;
Early one in this prototype, it became apparent that it was important to manage the lifetime on the Linq to SQL DataContext. &lt;a href="http://www.west-wind.com/weblog/posts/246222.aspx" target="_blank"&gt;Rich Strahl&lt;/a&gt; has an excellent post on managing the lifetime of DataContext. In this application, the Linq to SQL DataContext is abstracted within a BookRepository class and a singleton is used to serve up a reference to the repository. The following listing shows how this singleton is implemented.
&lt;/p&gt;
&lt;div style="background: #dddddd none repeat scroll 0% 0%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: monaco"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&lt;/span&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;sealed&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Repository&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&lt;/span&gt;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 10&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af"&gt;BooksRepository&lt;/span&gt; _bookRepository = &lt;span style="color: blue"&gt;null&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; connectionString;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 13&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;private&lt;/span&gt; Repository() { }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 15&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; ConnectionString(&lt;span style="color: blue"&gt;string&lt;/span&gt; cs) { connectionString = cs; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 17&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af"&gt;BooksRepository&lt;/span&gt; BookRepository(&lt;span style="color: #2b91af"&gt;Boolean&lt;/span&gt; create)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; (connectionString == &lt;span style="color: blue"&gt;null&lt;/span&gt;) 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;throw&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ApplicationException&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Need to set connection string for Repository&amp;quot;&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; (!create &amp;amp;&amp;amp; _bookRepository != &lt;span style="color: blue"&gt;null&lt;/span&gt;) &lt;span style="color: blue"&gt;return&lt;/span&gt; _bookRepository;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;else&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 25&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _bookRepository = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;BooksRepository&lt;/span&gt;(connectionString);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 26&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;return&lt;/span&gt; _bookRepository;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 27&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 28&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 29&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 30&lt;/span&gt;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
The BookRepository method has a single parameter and decides whether to return a new BooksRepository or to return the existing BooksRepository, remember the BooksRepository abstracts the DataContext. Each call to&amp;nbsp; Repository.BookRepository(false) returns the same BooksRepository and therefore uses same DataContext. 
&lt;/p&gt;
&lt;div id="scid:8eb9d37f-1541-4f29-b6f4-1eea890d4876:2a57a989-1adf-45c9-8179-d1c98a949223" class="wlWriterEditableSmartContent" style="margin: 0px; padding: 0px; display: inline; float: none"&gt;
&lt;div&gt;
&lt;a href="http://cynotwhynot.com/blog/file.axd?file=WindowsLiveWriter/LinqtoSQLAsmallCRUDapplication_815C/Linq2SqlCRUD_1.zip" target="_self"&gt;Download the source code.&lt;/a&gt;&amp;nbsp;
&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CynotWhyNot/~4/uFNt9R_K1r8" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/CynotWhyNot/~3/uFNt9R_K1r8/post.aspx</link>
      <author>CynotWhyNot</author>
      <comments>http://cynotwhynot.com/blog/post/Linq-to-SQL-A-small-CRUD-application.aspx#comment</comments>
      <guid isPermaLink="false">http://cynotwhynot.com/blog/post.aspx?id=166dd50f-ce63-4790-99ae-c637e565d92e</guid>
      <pubDate>Wed, 08 Jul 2009 09:15:00 -0800</pubDate>
      <category>LINQ</category>
      <dc:publisher>CynotWhyNot</dc:publisher>
      <pingback:server>http://cynotwhynot.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://cynotwhynot.com/blog/post.aspx?id=166dd50f-ce63-4790-99ae-c637e565d92e</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://cynotwhynot.com/blog/trackback.axd?id=166dd50f-ce63-4790-99ae-c637e565d92e</trackback:ping>
      <wfw:comment>http://cynotwhynot.com/blog/post/Linq-to-SQL-A-small-CRUD-application.aspx#comment</wfw:comment>
      <wfw:commentRss>http://cynotwhynot.com/blog/syndication.axd?post=166dd50f-ce63-4790-99ae-c637e565d92e</wfw:commentRss>
    <feedburner:origLink>http://cynotwhynot.com/blog/post.aspx?id=166dd50f-ce63-4790-99ae-c637e565d92e</feedburner:origLink></item>
    <item>
      <title>Adding client side reCAPTCHA to your ASP.NET site</title>
      <description>&lt;p&gt;
&lt;a href="http://en.wikipedia.org/wiki/Captcha" target="_blank"&gt;CAPTCHA&lt;/a&gt; is a challenge-response test to make sure that the user is human rather than some hacker automated software. The user is presented with a graphical image of some text and is required to type the text. If the user&amp;rsquo;s response is correct then all is well. 
&lt;/p&gt;
  
&lt;p&gt;
&lt;a href="http://recaptcha.net/" target="_blank"&gt;reCAPTCHA&lt;/a&gt; is unique in that user&amp;rsquo;s are assisting in the digitization of books, newspapers and radio shows. The service is free and with little effort can be added to your website.
&lt;/p&gt;
  
&lt;p&gt;
I have been working on a .NET developer community site that requires registration. The site makes use of AJAX and it was decided to that the registration and sign in process would be implement using AJAX. In addition, in order to prevent malicious attacks, reCAPTCHA was added to the registration dialog. The registration dialog is shown below.
&lt;/p&gt;
  
&lt;p&gt;
&lt;a href="http://cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/AddingclientsidereCAPTCHAtoyourA.NETsite_865D/registration-reCAPTCHA_2.png"&gt;&lt;img style="border-width: 0px; display: inline" src="http://cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/AddingclientsidereCAPTCHAtoyourA.NETsite_865D/registration-reCAPTCHA_thumb.png" border="0" alt="registration-reCAPTCHA" title="registration-reCAPTCHA" width="304" height="404" /&gt;&lt;/a&gt; 
&lt;/p&gt;
  
&lt;p&gt;
The dialog has the typical input fields required for registration but also has the reCAPTCHA to make sure that a human is performing the registration. 
&lt;/p&gt;
  
&lt;p&gt;
This post describes how to add client side reCAPTCHA functionality to your ASP.NET site.
&lt;/p&gt;
  
&lt;p&gt;
The steps required to add client side reCAPTCHA functionality are:
&lt;/p&gt;
  
&lt;ol&gt;
	   
	&lt;li&gt;Register at the &lt;a href="http://recaptcha.net/" target="_blank"&gt;reCAPTCHA&lt;/a&gt; site. You will receive a public and private API key. The keys are used for encryption. Make sure the private key is hidden away. &lt;/li&gt;    
	&lt;li&gt;&lt;a href="http://recaptcha.net/plugins/aspnet/" target="_blank"&gt;Download&lt;/a&gt; the ASP.NET server side reCAPTCHA assembly.&amp;nbsp;&amp;nbsp; &lt;/li&gt;    
	&lt;li&gt;&lt;a href="http://api.recaptcha.net/js/recaptcha_ajax.js" target="_blank"&gt;Download&lt;/a&gt; the reCAPTCHA client side Javascript. Alternatively, you can just include the Javascript directly for the reCAPTCHA site. &lt;/li&gt;    
	&lt;li&gt;Create an ASP.NET site. &lt;/li&gt;    
	&lt;li&gt;Add Javascript code to create the reCAPTCHA widget. &lt;/li&gt;    
	&lt;li&gt;Add a AJAX enabled web service that accepts the challenge and response data from the reCAPTCHA control. &lt;/li&gt; 
&lt;/ol&gt;
  
&lt;p&gt;
Steps 1 through 3 are well documented at the reCAPTCHA site and I leave it to the reader to perform these steps. I will also assume that the reader can create a default ASP.NET application. 
&lt;/p&gt;
  
&lt;p&gt;
&lt;u&gt;Adding Javascript to create a reCAPTCHA Widget&lt;/u&gt;
&lt;/p&gt;
  
&lt;p&gt;
Adding client side reCAPTCHA widget to the page is fairly simple. Listing 1 contains the code to display the reCAPTCHA control.
&lt;/p&gt;
  
&lt;div style="background: #dddddd none repeat scroll 0% 0%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: monaco"&gt;
   
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/span&gt;&amp;nbsp;&lt;span style="background: #ffee62 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue"&gt;@&lt;/span&gt; &lt;span style="color: #a31515"&gt;Page&lt;/span&gt; &lt;span style="color: red"&gt;Language&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;C#&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;AutoEventWireup&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;CodeBehind&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Default.aspx.cs&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;Inherits&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;recaptcha_client_side._Default&amp;quot;&lt;/span&gt; &lt;span style="background: #ffee62 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;%&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #a31515"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color: red"&gt;html&lt;/span&gt; &lt;span style="color: red"&gt;PUBLIC&lt;/span&gt; &lt;span style="color: blue"&gt;&amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;html&lt;/span&gt; &lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;head&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;src&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;jquery-1.3.2.js&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;src&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;http://api.recaptcha.net/js/recaptcha_ajax.js&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 11&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&lt;span style="color: blue"&gt;function&lt;/span&gt;() {
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Recaptcha.create(&lt;span style="color: #a31515"&gt;&amp;quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;quot;&lt;/span&gt;,
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a31515"&gt;&amp;#39;recaptcha&amp;#39;&lt;/span&gt;,
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 17&lt;/span&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; theme: &lt;span style="color: #a31515"&gt;&amp;quot;red&amp;quot;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); 
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 21&lt;/span&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 22&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 23&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;head&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 24&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;body&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 25&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;form&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;form1&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 26&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 27&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;recaptcha&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 28&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;input&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;getperson&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;button&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Get Person&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 29&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;greeting&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 30&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 31&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;form&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 32&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;body&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 33&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;html&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
 
&lt;/div&gt;
  
&lt;p&gt;
&lt;em&gt;Listing 1: Adding client side reCAPTCHA control&lt;/em&gt;
&lt;/p&gt;
  
&lt;p&gt;
First, as shown on line 10, we need to add the reCAPTCHA Javascript file. I have also added the jQuery Javascript library. Next we add a HTML tag that will host the reCAPTCHA widget. I have chosen a div tag and have given it an id of &lt;em&gt;recaptcha&lt;/em&gt; (line 27). Finally, using the reCAPTCHA client side function Recaptcha.create, we create the reCAPTCHA widget (lines 12 to 21). Note that the first parameter, shown in the listing as x&amp;rsquo;s needs to contain the public key. The second parameter is the id of the tag where the reCAPTCHA widget will be rendered. I have also chosen to use the red theme. This Recaptcha.create API has additional parameters. Refer to the &lt;a href="http://recaptcha.net/apidocs/captcha/client.html#customization" target="_blank"&gt;reCAPTCHA client library documentation.&lt;/a&gt;
&lt;/p&gt;
  
&lt;p&gt;
Running the application should render the following in the browser.
&lt;/p&gt;
  
&lt;p&gt;
&lt;a href="http://cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/AddingclientsidereCAPTCHAtoyourA.NETsite_865D/recaptcha-simple_2.png"&gt;&lt;img style="border-width: 0px; display: inline" src="http://cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/AddingclientsidereCAPTCHAtoyourA.NETsite_865D/recaptcha-simple_thumb.png" border="0" alt="recaptcha-simple" title="recaptcha-simple" width="404" height="217" /&gt;&lt;/a&gt;&amp;nbsp; 
&lt;/p&gt;
  
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
  
&lt;p&gt;
&lt;u&gt;Add the AJAX-enabled WCF Service&lt;/u&gt;
&lt;/p&gt;
  
&lt;p&gt;
The next step is to create a server side service that will accept the reCAPTCHA challenge response, as entered by the user. Right-click the asp.net project and select Add-&amp;gt;New Item.. menu option. This will display the Add New Item dialog from which you can select the AJAX-enabled WCF Service.
&lt;/p&gt;
  
&lt;p&gt;
&lt;a href="http://cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/AddingclientsidereCAPTCHAtoyourA.NETsite_865D/add%20AJAX-enabled%20WCF%20service_2.png"&gt;&lt;img style="border-width: 0px; display: inline" src="http://cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/AddingclientsidereCAPTCHAtoyourA.NETsite_865D/add%20AJAX-enabled%20WCF%20service_thumb.png" border="0" alt="add AJAX-enabled WCF service" title="add AJAX-enabled WCF service" width="504" height="327" /&gt;&lt;/a&gt; 
&lt;/p&gt;
  
&lt;p&gt;
The name of the service is ServiceWithRecaptcha.svc. After clicking the Add button, the ServiceWithRecaptcha.svc file(s) will be added the asp.net project. Select the code behind for the ServiceWithRecaptcha.svc. The code editor should display the default&amp;nbsp; implementation for an AJAX-enabled WCF service. Modify the service as per Listing 2.
&lt;/p&gt;
  
&lt;div style="background: #dddddd none repeat scroll 0% 0%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: monaco"&gt;
   
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;using&lt;/span&gt; System.Runtime.Serialization;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;using&lt;/span&gt; System.ServiceModel;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;using&lt;/span&gt; System.ServiceModel.Activation;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;using&lt;/span&gt; System.ServiceModel.Web;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;using&lt;/span&gt; System.Web;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;namespace&lt;/span&gt; recaptcha_client_side
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&lt;/span&gt; {
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af"&gt;ServiceContract&lt;/span&gt;(Namespace = &lt;span style="color: #a31515"&gt;&amp;quot;&amp;quot;&lt;/span&gt;)]
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af"&gt;AspNetCompatibilityRequirements&lt;/span&gt;(RequirementsMode = &lt;span style="color: #2b91af"&gt;AspNetCompatibilityRequirementsMode&lt;/span&gt;.Allowed)]
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ServiceWithRecaptcha&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af"&gt;OperationContract&lt;/span&gt;]
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af"&gt;WebGet&lt;/span&gt;]
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Person&lt;/span&gt; GetPerson(&lt;span style="color: blue"&gt;string&lt;/span&gt; challenge, &lt;span style="color: blue"&gt;string&lt;/span&gt; response)
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 17&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 18&lt;/span&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; Recaptcha.&lt;span style="color: #2b91af"&gt;RecaptchaValidator&lt;/span&gt; rv = &lt;span style="color: blue"&gt;new&lt;/span&gt; Recaptcha.&lt;span style="color: #2b91af"&gt;RecaptchaValidator&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 19&lt;/span&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;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 20&lt;/span&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; PrivateKey = &lt;span style="color: #a31515"&gt;&amp;quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;quot;&lt;/span&gt;,
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 21&lt;/span&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; RemoteIP = &lt;span style="color: #2b91af"&gt;HttpContext&lt;/span&gt;.Current.Request.UserHostAddress,
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 22&lt;/span&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; Challenge = challenge,
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 23&lt;/span&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; Response = response
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 24&lt;/span&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;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 25&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 26&lt;/span&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; Recaptcha.&lt;span style="color: #2b91af"&gt;RecaptchaResponse&lt;/span&gt; rr = rv.Validate();
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 27&lt;/span&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;span style="color: #2b91af"&gt;Person&lt;/span&gt; p = &lt;span style="color: blue"&gt;null&lt;/span&gt;;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 28&lt;/span&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;span style="color: blue"&gt;if&lt;/span&gt; (rr.IsValid)
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 29&lt;/span&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;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 30&lt;/span&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; p = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Person&lt;/span&gt; { first = &lt;span style="color: #a31515"&gt;&amp;quot;John&amp;quot;&lt;/span&gt;, last = &lt;span style="color: #a31515"&gt;&amp;quot;Smith&amp;quot;&lt;/span&gt;};
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 31&lt;/span&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;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 32&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 33&lt;/span&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;span style="color: blue"&gt;return&lt;/span&gt; p;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 34&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 35&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 36&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 37&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 38&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af"&gt;DataContract&lt;/span&gt;]
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 39&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Person&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 40&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 41&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;]
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 42&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; first { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 43&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;]
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 44&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; last { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 45&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 46&lt;/span&gt; }
&lt;/p&gt;
 
&lt;/div&gt;
  
&lt;p&gt;
&lt;em&gt;Listing 2: The AJAX-enabled WCF service.&lt;/em&gt;&amp;nbsp;
&lt;/p&gt;
  
&lt;p&gt;
The code uses the RecaptchaValidator object which requires a reference to the serve side reCAPTCHA assembly.
&lt;/p&gt;
  
&lt;p&gt;
In Listing 2, we create a simple function that returns a Person object. The Person class is defined in the code listing and contains only two properties first and last. The class is decorated with the DataContractAttribute indicating that the class is serializable. Both properties are decorated with the DataMemberAttribute meaning that they will be included in the serialization of the object. Remember, unlike web services where properties&amp;nbsp; are by default included when serialized, in WCF you must opt in.
&lt;/p&gt;
  
&lt;p&gt;
The actual service class, ServiceWithRecaptcha, is decorated with the ServiceContractAttribute and it&amp;rsquo;s only function GetPerson is decorated with OperationContractAttribute and WebGetAttribute. This means that the GetPerson function is callable through a HTTP GET method. The GetPerson function accepts two parameters the reCAPTCHA challenge and response from the client side reCAPTCHA API. Prior to returning a person object we call the RecaptchaValidator passing it the private key, shown in x&amp;rsquo;s, the IP and the challenge and response obtained from the client side (more on this in a bit). The Validate method is then called and if the response, as entered by the user is the same as the challenge then the validator returns true otherwise it returns false. If the validation failed then a null object is returned, otherwise, a Person object is return in JSON serialized format.
&lt;/p&gt;
  
&lt;p&gt;
Let&amp;rsquo;s return to the client side code and update it so the the WCF service is called. Listing 3 contains the necessary changes to call the ServiceWithRecaptcha service.
&lt;/p&gt;
  
&lt;div style="background: #dddddd none repeat scroll 0% 0%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: monaco"&gt;
   
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/span&gt;&amp;nbsp;&lt;span style="background: #ffee62 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue"&gt;@&lt;/span&gt; &lt;span style="color: #a31515"&gt;Page&lt;/span&gt; &lt;span style="color: red"&gt;Language&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;C#&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;AutoEventWireup&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;CodeBehind&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Default.aspx.cs&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;Inherits&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;recaptcha_client_side._Default&amp;quot;&lt;/span&gt; &lt;span style="background: #ffee62 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;%&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #a31515"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color: red"&gt;html&lt;/span&gt; &lt;span style="color: red"&gt;PUBLIC&lt;/span&gt; &lt;span style="color: blue"&gt;&amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;html&lt;/span&gt; &lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;head&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;src&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;jquery-1.3.2.js&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;src&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;http://api.recaptcha.net/js/recaptcha_ajax.js&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 11&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&lt;span style="color: blue"&gt;function&lt;/span&gt;() {
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 14&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Recaptcha.create(&lt;span style="color: #a31515"&gt;&amp;quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;quot;&lt;/span&gt;,
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a31515"&gt;&amp;#39;recaptcha&amp;#39;&lt;/span&gt;,
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 18&lt;/span&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; theme: &lt;span style="color: #a31515"&gt;&amp;quot;red&amp;quot;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 21&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&lt;span style="color: #a31515"&gt;&amp;#39;#getperson&amp;#39;&lt;/span&gt;).click(&lt;span style="color: blue"&gt;function&lt;/span&gt;() {
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ServiceWithRecaptcha.GetPerson(
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 24&lt;/span&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; Recaptcha.get_challenge(),
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 25&lt;/span&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; Recaptcha.get_response(),
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 26&lt;/span&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;span style="color: blue"&gt;function&lt;/span&gt;(result) {
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 27&lt;/span&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; &lt;span style="color: blue"&gt;if&lt;/span&gt; (result != &lt;span style="color: blue"&gt;null&lt;/span&gt;) {
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 28&lt;/span&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; $(&lt;span style="color: #a31515"&gt;&amp;#39;#greeting&amp;#39;&lt;/span&gt;).text(&lt;span style="color: #a31515"&gt;&amp;#39;Hello there &amp;#39;&lt;/span&gt; + result.first + &lt;span style="color: #a31515"&gt;&amp;#39; &amp;#39;&lt;/span&gt; + result.last);
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 29&lt;/span&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; }
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 30&lt;/span&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; &lt;span style="color: blue"&gt;else&lt;/span&gt; {
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 31&lt;/span&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; $(&lt;span style="color: #a31515"&gt;&amp;#39;#greeting&amp;#39;&lt;/span&gt;).text(&lt;span style="color: #a31515"&gt;&amp;#39;The reCAPTCHA text you entered is wrong.&amp;#39;&lt;/span&gt;);
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 32&lt;/span&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; }
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 33&lt;/span&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;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 34&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 35&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 36&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 37&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); 
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 38&lt;/span&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 39&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 40&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;head&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 41&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;body&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 42&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;form&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;form1&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 43&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 44&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;ScriptManager&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 45&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Services&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 46&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;ServiceReference&lt;/span&gt; &lt;span style="color: red"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;~/ServiceWithRecaptcha.svc&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 47&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Services&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 48&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;ScriptManager&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 49&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 50&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;recaptcha&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 51&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;input&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;getperson&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;button&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Get Person&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 52&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;greeting&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 53&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 54&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;form&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 55&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;body&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
    
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 56&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;html&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
 
&lt;/div&gt;
  
&lt;p&gt;
&lt;em&gt;Listing 3: Client side modification to invoke the AJAX-enabled WCF service. &lt;/em&gt;
&lt;/p&gt;
  
&lt;p&gt;
Two major changes were made to the aspx page. 
&lt;/p&gt;
  
&lt;p&gt;
The first is the inclusion of the ScriptManager, lines 44 to 48. A reference to the the ServiceWithRecaptcha service is included within the ScriptManager tag. This adds the Javascript proxy code that simplifies the calling of the service. To view the Javascript, while in Visual Studio just select the service file and select the View in Browser menu option and then add /js to the URL. This will display the auto-generated Javascript that can be used to call the service.
&lt;/p&gt;
  
&lt;p&gt;
The second change required is the Javascript to make the call to the service. This code is shown in lines&amp;nbsp; 22 to 38. I have chosen to use jQuery to attach the click event handler to the the input button. The call to the service is done through the proxy generated code, and in our case is the function, ServiceWithRecaptcha.GetPerson. The two parameters, challenge and response, are obtained by calling the Recaptcha APIs&amp;nbsp; get_challenge and get_response, respectively. The challenge is encrypted via the public key and can only be decrypt by the private key and hence the call to the service.
&lt;/p&gt;
  
&lt;p&gt;
Try running the code and entering a valid response to the reCAPTCHA widget. The figure below shows the rendered result. Notice that the text &lt;em&gt;Hello there John Smith&lt;/em&gt; is displayed, whereas, if an incorrect response was entered the string &lt;em&gt;The reCAPTCHA text you entered is wrong &lt;/em&gt;would be displayed.
&lt;/p&gt;
  
&lt;p&gt;
&lt;a href="http://cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/AddingclientsidereCAPTCHAtoyourA.NETsite_865D/recaptcha%20correct%20response_2.png"&gt;&lt;img style="border-width: 0px; display: inline" src="http://cynotwhynot.com/blog/image.axd?picture=WindowsLiveWriter/AddingclientsidereCAPTCHAtoyourA.NETsite_865D/recaptcha%20correct%20response_thumb.png" border="0" alt="recaptcha correct response" title="recaptcha correct response" width="504" height="296" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/CynotWhyNot/~4/zLgMg9OCyqo" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/CynotWhyNot/~3/zLgMg9OCyqo/post.aspx</link>
      <author>CynotWhyNot</author>
      <comments>http://cynotwhynot.com/blog/post/Adding-client-side-reCAPTCHA-to-your-ASPNET-site.aspx#comment</comments>
      <guid isPermaLink="false">http://cynotwhynot.com/blog/post.aspx?id=e5ef5d3d-5dbf-4fa7-966e-dd2415b59992</guid>
      <pubDate>Mon, 22 Jun 2009 14:00:00 -0800</pubDate>
      <category>ASP.NET</category>
      <dc:publisher>CynotWhyNot</dc:publisher>
      <pingback:server>http://cynotwhynot.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://cynotwhynot.com/blog/post.aspx?id=e5ef5d3d-5dbf-4fa7-966e-dd2415b59992</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://cynotwhynot.com/blog/trackback.axd?id=e5ef5d3d-5dbf-4fa7-966e-dd2415b59992</trackback:ping>
      <wfw:comment>http://cynotwhynot.com/blog/post/Adding-client-side-reCAPTCHA-to-your-ASPNET-site.aspx#comment</wfw:comment>
      <wfw:commentRss>http://cynotwhynot.com/blog/syndication.axd?post=e5ef5d3d-5dbf-4fa7-966e-dd2415b59992</wfw:commentRss>
    <feedburner:origLink>http://cynotwhynot.com/blog/post.aspx?id=e5ef5d3d-5dbf-4fa7-966e-dd2415b59992</feedburner:origLink></item>
    <item>
      <title>Typemock &amp;ndash; the ASP.NET Bundle</title>
      <description>&lt;strong&gt;&lt;font color="#cc0000"&gt;&lt;/font&gt;&lt;/strong&gt;  &lt;br /&gt;&lt;a href="http://www.typemock.com/"&gt;Unit Testing&lt;/a&gt; ASP.NET? &lt;a href="http://www.typemock.com/ASP.NET_unit_testing_page.php"&gt;ASP.NET unit testing&lt;/a&gt; has never been this easy.   &lt;br /&gt;  &lt;br /&gt;Typemock is launching a new product for ASP.NET developers – the &lt;strong&gt;ASP.NET Bundle&lt;/strong&gt; - and for the launch will be giving out &lt;span style="color: rgb(0,102,0)"&gt;&lt;strong&gt;FREE licenses&lt;/strong&gt;&lt;/span&gt; to bloggers and their readers.   &lt;br /&gt;  &lt;br /&gt;The ASP.NET Bundle is the ultimate ASP.NET unit testing solution, and offers both &lt;a href="http://www.typemock.com/"&gt;Typemock Isolator&lt;/a&gt;, a &lt;a href="http://www.typemock.com/"&gt;unit test&lt;/a&gt; tool and &lt;a href="http://sm-art.biz/Ivonna.aspx"&gt;Ivonna&lt;/a&gt;, the Isolator add-on for &lt;a href="http://sm-art.biz/Ivonna.aspx"&gt;ASP.NET unit testing&lt;/a&gt;, for a bargain price.   &lt;br /&gt;  &lt;br /&gt;Typemock Isolator is a leading &lt;a href="http://www.typemock.com/"&gt;.NET unit testing&lt;/a&gt; tool (C# and VB.NET) for many ‘hard to test’ technologies such as &lt;a href="http://typemock.com/sharepointpage.php"&gt;SharePoint&lt;/a&gt;, &lt;a href="http://www.typemock.com/ASP.NET_unit_testing_page.php"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://www.typemock.com/ASP.NET_unit_testing_page.php"&gt;MVC&lt;/a&gt;, &lt;a href="http://www.typemock.com/wcfpage.php"&gt;WCF&lt;/a&gt;, WPF, &lt;a href="http://www.typemock.com/Silverlight_unit_testing_page.php"&gt;Silverlight&lt;/a&gt; and more. Note that for &lt;a href="http://www.typemock.com/Silverlight_unit_testing_page.php"&gt;unit testing Silverlight&lt;/a&gt; there is an open source Isolator add-on called &lt;a href="http://www.typemock.com/Silverlight_unit_testing_page.php"&gt;SilverUnit&lt;/a&gt;.   &lt;br /&gt;  &lt;br /&gt;The first 60 bloggers who will blog this text in their blog and &lt;a href="http://blog.typemock.com/2009/05/get-free-typemock-licenses-aspnet.html"&gt;tell us about it&lt;/a&gt;, will get a Free Isolator ASP.NET Bundle license (Typemock Isolator + Ivonna). If you post this in an ASP.NET &lt;strong&gt;dedicated&lt;/strong&gt; blog, you'll get a license automatically (even if more than 60 submit) during the first week of this announcement.   &lt;br /&gt;  &lt;br /&gt;Also 8 bloggers will get an &lt;strong&gt;additional 2 licenses&lt;/strong&gt; (each) to give away to their readers / friends.   &lt;br /&gt;  &lt;br /&gt;Go ahead, click the following link for &lt;a href="http://blog.typemock.com/2009/05/get-free-typemock-licenses-aspnet.html"&gt;more information &lt;/a&gt;on how to get your free license.&lt;img src="http://feeds.feedburner.com/~r/CynotWhyNot/~4/p6D5BppXuHo" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/CynotWhyNot/~3/p6D5BppXuHo/post.aspx</link>
      <author>CynotWhyNot</author>
      <comments>http://cynotwhynot.com/blog/post/Typemock-ndash3b-the-ASPNET-Bundle.aspx#comment</comments>
      <guid isPermaLink="false">http://cynotwhynot.com/blog/post.aspx?id=12b4dd43-592d-49f8-9eee-91445eebd1a6</guid>
      <pubDate>Wed, 20 May 2009 11:18:37 -0800</pubDate>
      <dc:publisher>CynotWhyNot</dc:publisher>
      <pingback:server>http://cynotwhynot.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://cynotwhynot.com/blog/post.aspx?id=12b4dd43-592d-49f8-9eee-91445eebd1a6</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://cynotwhynot.com/blog/trackback.axd?id=12b4dd43-592d-49f8-9eee-91445eebd1a6</trackback:ping>
      <wfw:comment>http://cynotwhynot.com/blog/post/Typemock-ndash3b-the-ASPNET-Bundle.aspx#comment</wfw:comment>
      <wfw:commentRss>http://cynotwhynot.com/blog/syndication.axd?post=12b4dd43-592d-49f8-9eee-91445eebd1a6</wfw:commentRss>
    <feedburner:origLink>http://cynotwhynot.com/blog/post.aspx?id=12b4dd43-592d-49f8-9eee-91445eebd1a6</feedburner:origLink></item>
    <item>
      <title>Windows 2008 Server Hyper-V on my Dell Precision M65</title>
      <description>&lt;p&gt;I've decided that virtualization is the way to go. This is not to say that I haven’t virtualized in the past. I’ve had VPC virtual boxes that host IE6, IE7 and IE8. This allowed me to test my web applications in the various flavours of Internet Explorer. But for the most part I have always developed on a host OS. I guess I just haven’t felt comfortable developing on a virtual machine.&lt;/p&gt;  &lt;p&gt;But this time things are different. Windows Server 2008 x64 with Hyper-V has the potential of changing all this. You now have an OS that supports hardware virtualization all in a 64 bit environment.&lt;/p&gt;  &lt;p&gt;Last week I got my visa out and decided to buy a new hard disk for my laptop and installed Windows Server 2008 x64 with Hyper-V. So far the experience is great. I now have two guest operating systems; XP Professional and Windows 7 RC. I only have 2GB of RAM limiting me to only having a single VM running at any given time but I just got off the phone and will soon have 4GB, at which time, I should be able to host up to three guest VMs. Pretty sweet!&lt;/p&gt;  &lt;p&gt;I wanted to summarize some of my experiences I had while getting this environment up and running. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Install RTM Version of Hyper-V&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I have a MSDN subscription and the version of windows 2008 server I downloaded has a pre-release of Hyper-V. Make sure you upgrade to RTM.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Install Latest BIOS Version&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is good practise anyways. Go to your vendor and install the latest version of BIOS.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Enable Hardware Virtualization&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Run your BIOS setup program and make sure that the virtualization option is enabled. By default Dell has this option disabled. This is a must if you want to use Hyper-V.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Install x64 Display Drivers&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This one is optional but necessary if you want to get the most of your display. The M65 has a WUXGA (1920x1200) display. The generic drivers that are installed by windows server 2008 only support 1200x1024, certainly not ideal! Finding a x64 driver for the nVidia Quadro FX350 was time consuming. nVidia doers not provide one and the Vista x64 from them won’t install. After many hours of googling I finally found a driver that works. I am currently using XFastest-177.85 Vista64 driver and I am back to 1920x1200.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Configure Windows Server 2008 Desktop Experience&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is purely optional. If you like a desktop experience then you should enable this feature. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Connect using RDC&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Again optional, but connecting to a VM using Hyper-V has a display limitation of 1600x1200. If you want to get maximum resolution when running a VM then connect using RDC. Using RDC also has the added advantage of enabled audio. I have yet to find a way of enabling audio for a VM running in Hyper-V. To get RDC to work you will still need to start the VM from Hyper-V. Once the VM has started, start RDC and connect to that VM.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;So far my experience with Windows Server 2008 x64 has been very positive. The VM’s have been responsive. The only complaint I have so far is video playback or animation running in a browser, it’s slow but acceptable. Not a huge issue as I can always run my browser in the host OS.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/CynotWhyNot/~4/FJM2IYF9ano" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/CynotWhyNot/~3/FJM2IYF9ano/post.aspx</link>
      <author>CynotWhyNot</author>
      <comments>http://cynotwhynot.com/blog/post/Windows-2008-Server-Hyper-V-on-my-Dell-Precision-M65.aspx#comment</comments>
      <guid isPermaLink="false">http://cynotwhynot.com/blog/post.aspx?id=aeb2d448-37c8-4efc-a02b-1f89f79f0784</guid>
      <pubDate>Fri, 08 May 2009 10:24:12 -0800</pubDate>
      <dc:publisher>CynotWhyNot</dc:publisher>
      <pingback:server>http://cynotwhynot.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://cynotwhynot.com/blog/post.aspx?id=aeb2d448-37c8-4efc-a02b-1f89f79f0784</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://cynotwhynot.com/blog/trackback.axd?id=aeb2d448-37c8-4efc-a02b-1f89f79f0784</trackback:ping>
      <wfw:comment>http://cynotwhynot.com/blog/post/Windows-2008-Server-Hyper-V-on-my-Dell-Precision-M65.aspx#comment</wfw:comment>
      <wfw:commentRss>http://cynotwhynot.com/blog/syndication.axd?post=aeb2d448-37c8-4efc-a02b-1f89f79f0784</wfw:commentRss>
    <feedburner:origLink>http://cynotwhynot.com/blog/post.aspx?id=aeb2d448-37c8-4efc-a02b-1f89f79f0784</feedburner:origLink></item>
  </channel>
</rss>
