<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>DevServer Wiki &amp; Documentation Rss Feed</title><link>http://www.codeplex.com/DevServer/Wiki/View.aspx?title=Home</link><description>DevServer Wiki Rss Description</description><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/DevServer/Wiki/View.aspx?title=Home&amp;version=12</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;NetFXHarmonics DevServer is a web server hosting environment built on WPF and WCF technologies that allows multiple instances of Cassini-like web servers to run in parallel.  DevServer also includes tracing capabilities for monitoring requests and responses, request filtering, automatic ViewState and ControlState parsing, visually enhanced HTTP status codes, IP binding modes for both local-only as well as remote access, and easy to use XML configuration.
&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
NetFXHarmonics Blog
&lt;/h3&gt; &lt;br /&gt;&lt;b&gt;DevServer Announcement and Overview&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released" class="externalLink"&gt;http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
As a Training Tool
&lt;/h3&gt; &lt;br /&gt;NetFXHarmonics DevServer is built on .NET 3.5 using WPF, WCF, and LINQ.  DevServer could be used as a training tool to help teach WPF binding, WCF communication, LINQ collection transformation and querying, and .NET 2.0 custom configuration.  See the &amp;quot;As a Training Tool&amp;quot; in the &amp;quot;DevServer Announcement and Overview&amp;quot; blog entry for more detailed information how using DevServer as a training tool.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Screenshot
&lt;/h3&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=DevServer&amp;amp;DownloadId=31627" alt="OriginalDevServerThumb.png" /&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>quantum00</author><pubDate>Thu, 10 Apr 2008 13:04:32 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080410010432P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/DevServer/Wiki/View.aspx?title=Home&amp;version=11</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;NetFXHarmonics DevServer is a web server hosting environment built on WPF and WCF technologies that allows multiple instances of Cassini-like web servers to run in parallel.  DevServer also includes tracing capabilities for monitoring requests and responses, request filtering, automatic ViewState and ControlState parsing, visually enhanced HTTP status codes, IP binding modes for both local-only as well as remote access, and easy to use XML configuration.
&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
NetFXHarmonics Blog
&lt;/h3&gt; &lt;br /&gt;&lt;b&gt;DevServer Announcement and Overview&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released" class="externalLink"&gt;http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
As a Training Tool
&lt;/h3&gt; &lt;br /&gt;NetFXHarmonics DevServer is built on .NET 3.5 using WPF, WCF, and LINQ.  DevServer could be used as a training tool to help teach WPF binding, WCF communication, and LINQ collection transformation and querying.  See the &amp;quot;As a Training Tool&amp;quot; in the &amp;quot;DevServer Announcement and Overview&amp;quot; blog entry for more detailed information how using DevServer as a training tool.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Screenshot
&lt;/h3&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=DevServer&amp;amp;DownloadId=31627" alt="OriginalDevServerThumb.png" /&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>quantum00</author><pubDate>Sun, 06 Apr 2008 01:25:55 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080406012555A</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/DevServer/Wiki/View.aspx?title=Home&amp;version=10</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;NetFXHarmonics DevServer is a web server hosting environment built on WPF and WCF technologies that allows multiple instances of Cassini-like web servers to run in parallel.  DevServer also includes tracing capabilities for monitoring requests and responses, request filtering, automatic ViewState and ControlState parsing, visually enhanced HTTP status codes, IP binding modes for both local-only as well as remote access, and easy to use XML configuration.
&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
NetFXHarmonics Blog &lt;div class="rss"&gt;
&lt;div class="accentbar"&gt;
&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;NEWS FEED&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/FXHarmonics/~3/264803996/NetFXHarmonics-DevServer-Released"&gt;NetFXHarmonics DevServer Released&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Saturday, April 05, 2008&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/FXHarmonics/" target="_blank"&gt;NetFX Harmonics&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;Two months ago started work on a project to help me in my AJAX and SOA development.&amp;nbsp; What I basically needed was a development web server that allowed me to start up multiple web servers at once, monitor server traffic, and bind to specific IP interfaces.&amp;nbsp; Thus, the creation of NetFXHarmonics DevServer.&amp;nbsp; I built it completely for myself, but others started to ask for it as well.&amp;nbsp; When the demand for it became stronger, I realized that I needed to release the project on the web.&amp;nbsp; Normally I would host it myself, but given the interest from the .NET community, I thought I would put it on CodePlex.&amp;nbsp; I've only cried twice seen I've put it on CodePlex, but I'll survive.&lt;/p&gt; &lt;p&gt;NetFXHarmonics DevServer is a web server hosting environment built on WPF and WCF technologies that allows multiple instances of Cassini-like web servers to run in parallel. DevServer also includes tracing capabilities for monitoring requests and responses, request filtering, automatic ViewState and ControlState parsing, visually enhanced HTTP status codes, IP binding modes for both local-only as well as remote access, and easy to use XML configuration. &lt;/p&gt; &lt;p&gt;Using this development server, I am able to simultaneously start multiple web sites to very quickly view everything that happens over the wire and therefore easily debug JSON and SOAP messages flying back and forth between client and server and between services.&amp;nbsp; This tool have been a tremendous help for me in the past few months to discover exactly why my services are tripping out without having to enable WCF tracing.&amp;nbsp; It's also been a tremendous help in managing my own web development server instances for all my projects, each having 3-5 web sites (or segregated service endpoints) each.&lt;/p&gt; &lt;p&gt;Let me give you a quick run down of the various features in NetFXHarmonics DevServer with a little discussion of each feature's usage:&lt;/p&gt; &lt;h4&gt;XML Configuration&lt;/h4&gt; &lt;p&gt;NetFXHarmonics DevServer has various projects (and therefore assemblies) with the primary being DevServer.Client, the client application which houses the application's configuration.&lt;/p&gt; &lt;p&gt;In the app.config of DevServer.Client, you have a structure that looks something like the following:&lt;/p&gt;&lt;pre class="code vs2008-0308-code-background"&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;jampad.devServer&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;jampad.devServer&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;This is where all your configuration lives and the various parts of this will be explained in their appropriate contexts in the discussions that follow.&lt;/p&gt;
&lt;h4&gt;Multiple Web Site Hosting&lt;/h4&gt;
&lt;p&gt;In side of the jampad.devServer configuration section in the app.config file, there is a branch called &amp;lt;servers /&amp;gt; which allows you to declare the various web servers you would like to load.&amp;nbsp; This is all that's required to configure servers.&amp;nbsp; Each server requires a friendly name, a port, a virtual path, and the physical path.&amp;nbsp; Given this information, DevServer will know how to load your particular servers.&lt;/p&gt;&lt;pre class="code vs2008-0308-code-background"&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;servers&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;key&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;SampleWS1&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;name&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;Sample Website 1&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;port&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;2001&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"
            &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;virtualPath&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;/&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;physicalPath&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;C:\Project\DevServer\SampleWebsite1&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;key&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;SampleWS2&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;name&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;Sample Website 2&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;disabled&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;true&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;port&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;2003&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"
            &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;virtualPath&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;/&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;physicalPath&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;C:\Project\DevServer\SampleWebsite2&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;servers&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;&lt;font style="background-color: #202020" color="#a4a4a4" face="Courier New"&gt;&lt;/font&gt;
&lt;p&gt;If you want to disable a specific server from loading, use the "disabled" attribute.&amp;nbsp; All disabled servers will be completely skipped in the loading process.&amp;nbsp; On the other hand, if you would like to load a single server, you can actually do this from the command line by setting a server key on the &amp;lt;server /&amp;gt; element and by accessing it via a command line argument:&lt;/p&gt;
&lt;p&gt;DevServer.Client.exe -serverKey:SampleWS1&lt;/p&gt;
&lt;p&gt;In most scenarios you will probably want to load various sets of servers at once.&amp;nbsp; This is especially true in properly architected service-oriented solutions.&amp;nbsp; Thus, DevServer includes a concept of startup profiles.&amp;nbsp; Each profile will include links to a number of keyed servers.&amp;nbsp; You configure these startup profiles in the &amp;lt;startupProfiles /&amp;gt; section.&lt;/p&gt;&lt;pre class="code vs2008-0308-code-background"&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;startupProfiles &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;activeProfile&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;Sample&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;profile &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;name&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;Sample&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;key&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;SampleWS1&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;key&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;SampleWS2&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;profile&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;startupProfiles&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;This configuration block lives parallel to the &amp;lt;servers /&amp;gt; block and the inclusion of servers should be fairly self-explanatory.&amp;nbsp; When DevServer starts it will load the profile in the "activeProfile" attribute.&amp;nbsp; If the activeProfile block is missing, it will be ignored.&amp;nbsp; If the activeProfile states a profile that does not exist, DevServer will not load.&amp;nbsp; When using a startup profile, the "disabled" attribute on each server instance is ignored.&amp;nbsp; That attribute is only for non-startup profile usage.&amp;nbsp; An activeProfile may also be set via command line:&lt;/p&gt;
&lt;p&gt;DevServer.Client.exe -activeProfile:Sample&lt;/p&gt;
&lt;p&gt;This will override any setting in the activeProfile attribute of &amp;lt;startupProfiles/&amp;gt;.&amp;nbsp; In fact, the "serverKey" command line argument overrides the activeProfile &amp;lt;startupProfiles /&amp;gt; attribute as well.&amp;nbsp; Therefore, the order of priority is is as follows: command line argument override profile configuration and profile configuration overrides the "disabled" attribute.&lt;/p&gt;
&lt;p&gt;Most developers don't work on one project and with only client.&amp;nbsp; Or, even if they do, they surely have their own projects as well.&amp;nbsp; Therefore, you may have even more servers in your configuration:&lt;/p&gt;&lt;pre class="code vs2008-0308-code-background"&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;key&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;ABCCorpMainWS&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;name&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;Main Website&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;port&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;7001&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"
        &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;virtualPath&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;/&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;physicalPath&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;C:\Project\ABCCorp\Website&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;key&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;ABCCorpKBService&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;name&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;KB Service&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;port&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;7003&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"
        &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;virtualPath&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;/&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;physicalPath&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;C:\Project\ABCCorp\KnowledgeBaseService&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;key&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;ABCCorpProductService&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;name&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;Product Service&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;port&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;7005&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"
        &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;virtualPath&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;/&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;physicalPath&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;C:\Project\ABCCorp\ProductService&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;These would be grouped together in their own profile with the activeProfile set to that profile.&lt;/p&gt;&lt;pre class="code vs2008-0308-code-background"&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;startupProfiles &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;activeProfile&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;ABCCorp&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;profile &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;name&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;ABCCorp&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;key&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;ABCCorpMainWS&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;key&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;ABCCorpKBService&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;key&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;ABCCorpProductService&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;profile&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;profile &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;name&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;Sample&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;key&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;SampleWS1&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;key&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;SampleWS2&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;profile&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;startupProfiles&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;What about loading servers from different profiles?&amp;nbsp; Well, think about it... that's a different profile:&lt;/p&gt;&lt;pre class="code vs2008-0308-code-background"&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;startupProfiles &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;activeProfile&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;ABCCorpWithSampleWS1&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;profile &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;name&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;ABCCorpWithSampleWS1&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;key&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;SampleWS1&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;key&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;ABCCorpMainWS&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;key&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;ABCCorpKBService&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;key&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;ABCCorpProductService&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;profile&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;startupProfiles&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;One of the original purposes of DevServer was to allow remote non-IIS access to development web sites.&amp;nbsp; Therefore, in DevServer you can use the &amp;lt;binding /&amp;gt; configuration element to set either "loopback" (or "localhost") to only allow access to your machine, "any" to allow web access from all addresses, or you can specific a specific IP address to bind the web server to a single IP address so that only systems with access to that IP on that interface can access the web site.&lt;/p&gt;
&lt;p&gt;In the following example the first web site is only accessible by the local machine and the second is accessible by others.&amp;nbsp; This comes in handy for both testing in a virtual machine as well as quickly doing demos.&amp;nbsp; If your evil project manager (forgive the redundancy) wants to see something, bring the web site up on all interface and he can poke around from his desk and then have all his complains and irrational demands ready when he comes to your desk (maybe you want to keep this feature secret).&lt;/p&gt;&lt;pre class="code vs2008-0308-code-background"&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;key&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;SampleWS1&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;name&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;Sample Website 1&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;port&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;2001&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"
        &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;virtualPath&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;/&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;physicalPath&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;C:\Project\DevServer\SampleWebsite1&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;binding &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;address&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;loopback&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;key&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;SampleWS2&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;name&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;Sample Website 2&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;port&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;2003&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"
        &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;virtualPath&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;/&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;physicalPath&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;C:\Project\DevServer\SampleWebsite2&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;binding &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;address&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;any&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;h4&gt;Web Site Settings&lt;/h4&gt;
&lt;p&gt;In addition to server configuration, there is also a bit of general configuration that apply to all instances.&amp;nbsp; As you can see from the following example, you can add default documents to the existing defaults and you can also setup content type mappings.&amp;nbsp; A few content types already exist, but you can override as the example shows.&amp;nbsp; In this example, where ".js" is normally sent as text/javascript, you can override it to go to "application/x-javascript" or to something else.&lt;/p&gt;&lt;pre class="code vs2008-0308-code-background"&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;webServer&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;defaultDocuments&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;add &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;name&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;index.jsx&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;defaultDocuments&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;contentTypeMappings&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;add &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;extension&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;.jsx&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;type&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;application/x-javascript&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;add &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;extension&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;.js&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;type&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;application/x-javascript&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;override&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;true&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;contentTypeMappings&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;webServer&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;h4&gt;Request/Response Tracing&lt;/h4&gt;
&lt;p&gt;One of the core features of DevServer is the ability to do tracing on the traffic in each server.&amp;nbsp; Tracing is enabled by adding a &amp;lt;requestTracing /&amp;gt; configuration element to a server and setting the "enabled" attribute to true.&lt;/p&gt;&lt;pre class="code vs2008-0308-code-background"&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;key&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;SampleWS1&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;name&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;Sample Website 1&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;port&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;2001&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"
        &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;virtualPath&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;/&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;physicalPath&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;C:\Project\DevServer\SampleWebsite1&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;binding &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;address&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;loopback&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;requestTracing &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;enabled&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;true&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;enableVerboseTypeTracing&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;false&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;enableFaviconTracing&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;true&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;server&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;This will have request/response messages show up in DevServer which will allow you to view status code, date/time, URL, POST data (if any), response data, request headers, response headers, as well as parsed ViewState and Control state for both the request and response.&amp;nbsp; In addition, each entry is color coded based on it's status code.&amp;nbsp; Different colors will show for 301/302, 500+, and 404.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.netfxharmonics.com/Images/WindowsLiveWriter/NetFXHarmonicsDevServerReleased_F35B/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="image" src="http://www.netfxharmonics.com/Images/WindowsLiveWriter/NetFXHarmonicsDevServerReleased_F35B/image_thumb.png" width="420" height="324"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;When working with the web, you don't always want to see every little thing that happens all the time.&amp;nbsp; Therefore, by default, you only trace common text specific file like HTML, CSS, JavaScript, JSON, XAML, Text, and SOAP and their content.&amp;nbsp; If you want to trace images and other things going across, then set "enableVerboseTypeTracing" to true.&amp;nbsp; However, since there is no need to see the big blob image data, the data of binary types are not sent to the trace viewer even with enableVerboseTypeTracing.&amp;nbsp; You can also toggle both tracing as well as verbose type tracing on each server as each is running.&lt;/p&gt;
&lt;p&gt;There's also the ability to view custom content types without seeing all the images and extra types.&amp;nbsp; This is the purpose of the &amp;lt;allowedConntetTypes /&amp;gt; configuration block under &amp;lt;requestTracing /&amp;gt;, which is parallel to &amp;lt;servers /&amp;gt;.&lt;/p&gt;&lt;pre class="code vs2008-0308-code-background"&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;requestTracing&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;allowedContentTypes&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;add &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;value&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;application/x-custom-type&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;" &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;allowedContentTypes&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;requestTracing&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;In this case, responses of content-type "application/x-custom-type" are also traced without needing to turn on verbose type tracing.&lt;/p&gt;
&lt;p&gt;However, there is another way to control this information.&amp;nbsp; If you want to see all requests, but want the runtime ability to see various content types, then you can use a client-side filter in the request/response list.&amp;nbsp; In the box immediately above the request/response list, you can type something like the following:&lt;/p&gt;
&lt;p&gt;verb:POST;statuscode:200;file:css;contentType:text/css&lt;/p&gt;
&lt;p&gt;Filtering will occur as you type, allowing you to find the particular request you are looking for.&amp;nbsp; The filter is NOT case sensitive.&amp;nbsp; You can also clear the request/response list with the clear button.&amp;nbsp; There is also the ability to copy/paste the particular headers that you want from the headers list by using typical SHIFT (for range) and CTRL-clicking (for single choosing).&lt;/p&gt;
&lt;p&gt;Request/Response monitoring actually goes a bit further by automatically parsing both ViewState and ControlState for both request (POST) and response data.&amp;nbsp; Thanks goes to Fritz Onion for granting me permission to use his ViewState parser class in DevServer.&lt;/p&gt;
&lt;h4&gt;As a Training Tool&lt;/h4&gt;
&lt;p&gt;When announce any major project I always provide an "as a training tool" section to explain how the project can be used for personal training.&amp;nbsp; NetFXHarmonics DevServer is built using .NET 3.5 and relies heavily on LINQ and WCF with a WPF interface.&amp;nbsp; In terms of LINQ, you can find many examples of how to use both query expression syntax and extension method syntax.&amp;nbsp; When people first learn LINQ, they think that LINQ is an O/R mapper.&amp;nbsp; Well, it's not (and probably shouldn't be usef for that in enterprise applications! there is only one enterprise class O/R mapper: &lt;a href="http://www.llblgen.com/"&gt;LLBLGen Pro&lt;/a&gt;).&amp;nbsp; LINQ allows Language INtegrated Query in both C# and VB.&amp;nbsp; So, in DevServer, you will see heavy reliable on LINQ to search List&amp;lt;&amp;gt; objects and transform LINQ database entities to WCF DTOs.&lt;/p&gt;
&lt;p&gt;DevServer also relies heavily on WCF for all inner-process communication via named-pipes.&amp;nbsp; The web servers are actually hosted inside of a WCF service, thus segregating the web server loader from the client application in a very SOA friendly manner.&amp;nbsp; The client application loads the service and then acts as a client to the service calling on it to start, stop, and kill server instances.&amp;nbsp; WCF is also used to communicate the HTTP requests inside the web server back to the client, which is itself a WCF service to which the HTTP request is a client.&amp;nbsp; Therefore, DevServer is an example of how you can use WCF to communicate between AppDomains.&lt;/p&gt;
&lt;p&gt;The entire interface in DevServer is a WPF application that relies heavy on WPF binding for all visual information.&amp;nbsp; All status information is in a collection to which WPF binds.&amp;nbsp; Not only that all, but all request/response information is also in a collection.&amp;nbsp; WPF simply binds to the data.&amp;nbsp; Using WPF, no eventhandling was required to say "on a click event, obtain SelectedIndex, pull data, then text these TextBox instances".&amp;nbsp; In WPF, you simply have normal every day data and WPF controls bind directly to that data being automatically updated via special interfaces (i.e INotifyPropertyChanged and INotifyCollectionChanged) or the special generic ObservableCollection&amp;lt;T&amp;gt;.&lt;/p&gt;
&lt;p&gt;Since the bindings are completely automated, there also needs to be ways to "transform" data.&amp;nbsp; For example, in the TabItem header I have a little green or red icon showing the status of that particular web server instance.&amp;nbsp; There was no need to handle this manually.&amp;nbsp; There is already a property on my web server instance that has a status.&amp;nbsp; All I need to do is bind the image to my status enumeration and set a TypeConverter which transforms the enumeration value to a specific icon.&amp;nbsp; When the enumeration is set to Started, the icon is green, when it says "Stopped", the icon is red.&amp;nbsp; No events are required and the only code required for this scenario is the quick creation of a TypeConverter.&lt;/p&gt;
&lt;p&gt;Therefore, DevServer is an example of WPF databinding.&amp;nbsp; I've heard people say that they are more into architecture and WCF and therefore have no interested in learning WPF.&amp;nbsp; This statement makes no sense.&amp;nbsp; If you don't want to mess with UI stuff, you &lt;strong&gt;need&lt;/strong&gt; to learn WPF.&amp;nbsp; Instead of handing events all over the place and manually setting data, you can do whatever it is you do and have WPF just bind to your data.&amp;nbsp; When it comes to creating quick client applications, WPF is a much more productive platform than Windows Forms... or even the web!&lt;/p&gt;
&lt;h4&gt;Links&lt;/h4&gt;
&lt;ul&gt;
&lt;li class="code-base"&gt;&lt;a href="http://www.codeplex.com/DevServer"&gt;NetFXHarmonics DevServer on CodePlex&lt;/a&gt; (I hate CodePlex-- but I know that .NET people visit that more often than the far technically superior Subversion-based Google Code-- I have to kill devenv.exe every 5 or so "check-ins" and when I move my project root folder [which I do &lt;strong&gt;often&lt;/strong&gt;] everything dies!&amp;nbsp; CodePlex [TFS] is a nightmare!). &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/FXHarmonics?a=R7COPX"&gt;&lt;img src="http://feeds.feedburner.com/~a/FXHarmonics?i=R7COPX" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=5PSvDWG"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=5PSvDWG" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=ZLnnn7G"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=ZLnnn7G" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=BkpYPCg"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=BkpYPCg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FXHarmonics/~4/264803996" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/FXHarmonics/~3/253425615/Squid-Data-Feed-Framework-for-NET-35"&gt;Squid - Data Feed Framework for .NET 3.5&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Monday, March 17, 2008&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/FXHarmonics/" target="_blank"&gt;NetFX Harmonics&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;A few years ago I designed a system that would greatly ease data syndication, data aggregation, and reporting.&amp;nbsp; The first two components of the system were repackaged and release early last year under the incredibly horrible name "Data Feed Framework".&amp;nbsp; The idea behind the system was two fold.&amp;nbsp; The first concept was that you write a SQL statement and you immediately get a fully functional RSS feed with absolutely no more work required.&amp;nbsp; Here's an example of a DFF SQL statement that creates an RSS feed of SQL Server jobs:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;select &lt;/span&gt;Id&lt;span style="color: gray"&gt;=&lt;/span&gt;0&lt;span style="color: gray"&gt;,
&lt;/span&gt;Title&lt;span style="color: gray"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;name&lt;/span&gt;&lt;span style="color: gray"&gt;,
&lt;/span&gt;&lt;span style="color: blue"&gt;Description&lt;/span&gt;&lt;span style="color: gray"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;description
from &lt;/span&gt;msdb&lt;span style="color: gray"&gt;.&lt;/span&gt;dbo&lt;span style="color: gray"&gt;.&lt;/span&gt;sysjobs
&lt;span style="color: blue"&gt;where enabled &lt;/span&gt;&lt;span style="color: gray"&gt;= &lt;/span&gt;1&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;The second part of DFF was it's ASP.NET control named InfoBlock that would accept an RSS or ATOM feed and display it in a mini-reader window.&amp;nbsp; The two parts of DFF combine to create the following:&lt;/p&gt;
&lt;p&gt;Given the following SQL statement (or more likely a stored procedure)...&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;select top &lt;/span&gt;10
Id&lt;span style="color: gray"&gt;=&lt;/span&gt;pc&lt;span style="color: gray"&gt;.&lt;/span&gt;ContactID&lt;span style="color: gray"&gt;, 
&lt;/span&gt;Title&lt;span style="color: gray"&gt;=&lt;/span&gt;pc&lt;span style="color: gray"&gt;.&lt;/span&gt;FirstName &lt;span style="color: gray"&gt;+ &lt;/span&gt;&lt;span style="color: red"&gt;' ' &lt;/span&gt;&lt;span style="color: gray"&gt;+ &lt;/span&gt;pc&lt;span style="color: gray"&gt;.&lt;/span&gt;LastName &lt;span style="color: gray"&gt;+ &lt;/span&gt;&lt;span style="color: red"&gt;': $' &lt;/span&gt;&lt;span style="color: gray"&gt;+ &lt;/span&gt;&lt;span style="color: magenta"&gt;convert&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;varchar&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;20&lt;span style="color: gray"&gt;), &lt;/span&gt;&lt;span style="color: magenta"&gt;convert&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;numeric&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;10&lt;span style="color: gray"&gt;,&lt;/span&gt;2&lt;span style="color: gray"&gt;), &lt;/span&gt;&lt;span style="color: magenta"&gt;sum&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;LineTotal&lt;span style="color: gray"&gt;))), 
&lt;/span&gt;&lt;span style="color: blue"&gt;Description&lt;/span&gt;&lt;span style="color: gray"&gt;=&lt;/span&gt;&lt;span style="color: red"&gt;''&lt;/span&gt;&lt;span style="color: gray"&gt;, 
&lt;/span&gt;LinkTemplate &lt;span style="color: gray"&gt;= &lt;/span&gt;&lt;span style="color: red"&gt;'/ShowContactInformation/{id}'
&lt;/span&gt;&lt;span style="color: blue"&gt;from &lt;/span&gt;Sales&lt;span style="color: gray"&gt;.&lt;/span&gt;SalesOrderDetail sod
&lt;span style="color: gray"&gt;inner join &lt;/span&gt;Sales&lt;span style="color: gray"&gt;.&lt;/span&gt;SalesOrderHeader soh &lt;span style="color: blue"&gt;on &lt;/span&gt;soh&lt;span style="color: gray"&gt;.&lt;/span&gt;SalesOrderID &lt;span style="color: gray"&gt;= &lt;/span&gt;sod&lt;span style="color: gray"&gt;.&lt;/span&gt;SalesOrderID
&lt;span style="color: gray"&gt;inner join &lt;/span&gt;Person&lt;span style="color: gray"&gt;.&lt;/span&gt;Contact pc &lt;span style="color: blue"&gt;on &lt;/span&gt;pc&lt;span style="color: gray"&gt;.&lt;/span&gt;ContactID &lt;span style="color: gray"&gt;= &lt;/span&gt;soh&lt;span style="color: gray"&gt;.&lt;/span&gt;SalesPersonID
&lt;span style="color: blue"&gt;group by &lt;/span&gt;pc&lt;span style="color: gray"&gt;.&lt;/span&gt;FirstName&lt;span style="color: gray"&gt;, &lt;/span&gt;pc&lt;span style="color: gray"&gt;.&lt;/span&gt;LastName&lt;span style="color: gray"&gt;, &lt;/span&gt;pc&lt;span style="color: gray"&gt;.&lt;/span&gt;ContactID
&lt;span style="color: blue"&gt;order by &lt;/span&gt;&lt;span style="color: magenta"&gt;sum&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;LineTotal&lt;span style="color: gray"&gt;) &lt;/span&gt;&lt;span style="color: blue"&gt;desc&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;...we have an automatically updating RSS feed and when that RSS feed is given to an InfoBlock, you get the following:&lt;/p&gt;
&lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="image" src="http://www.netfxharmonics.com/Images/WindowsLiveWriter/SquidDataFeedFrameworkfor.NET3.5_14B60/image_thumb.png" width="518" height="207"&gt;&lt;/p&gt;
&lt;p&gt;InfoBlocks could be placed all over a web site or intranet to give quick and easy access to continually updating information.&amp;nbsp; The InfoBlock control would also register the feed with modern web browsers that had integrated RSS support.&amp;nbsp; Furthermore, since it was styled properly in CSS, there's no reason for it to be a block at all.&amp;nbsp; It could be a horizontal list, a DOM-based window, or even a ticker as CSS and modern AJAX techniques allow.&lt;/p&gt;
&lt;p&gt;DFF relied on RSS.NET for syndication feed creation and both RSS.NET and Atom.NET for aggregation.&amp;nbsp; It also used LLBLGen Pro a bit to access the data from SQL Server.&amp;nbsp; As I've promised with all my projects, they will update as new technologies are publicly released.&amp;nbsp; Therefore, DFF has been completely updated for .NET 3.5 technologies including LINQ and WCF.&lt;/p&gt;
&lt;p&gt;I've also decided to continue down my slippery slope of a change in product naming philosophy.&amp;nbsp; Whereas before I would follow the Microsoft marketing philosophy of "add more words to the title until it's so long to say that you require an acronym" to the more Linux or O'Reilly approaches of "choose a random weird sounding word and leave it be" and "pick a weird animal", respectively.&amp;nbsp; I've also been moving more towards the idea of picking a cool name and leaving it as is.&amp;nbsp; This is in contrast to Microsoft's idea of picking an &lt;strong&gt;awesome&lt;/strong&gt; name and then changing it to an impossibly long name right before release (i.e. Sparkle, Acrylic, and Atlas)&amp;nbsp; Therefore, I decided to rename DFF to Squid.&amp;nbsp; I think this rivals my &lt;a href="http://www.netfxharmonics.com/2008/01/DojrNET-Dojo-RPC-Library-NET-20"&gt;Dojr.NET&lt;/a&gt; and Prominax (to be released-- someday) projects as having the weirdest and most random name I've ever come up with.&amp;nbsp; I think it may have something to do with SQL and uhhhh.. something about a GUID.&amp;nbsp; Donno.&lt;/p&gt;
&lt;p&gt;Squid follows the same everything as DFF, however the dependencies on RSS.NET and ATOM.NET were completely removed.&amp;nbsp; This was possible due to the awesome syndication support in WCF 3.5.&amp;nbsp; Also, all reliance on LLBLGen Pro was removed.&amp;nbsp; &lt;a href="http://www.llblgen.com/defaultgeneric.aspx"&gt;LLBLGen Pro&lt;/a&gt; (see my &lt;a href="http://www.netfxharmonics.com/2006/03/LLBLGen-Overview-Special-Edition-Video"&gt;training video here&lt;/a&gt;) is an awesome system and is the only enterprise-class O/R mapping solution in existence.&amp;nbsp; NHibernate should not be considered enterprise-class and it's usability is almost through the floor.&amp;nbsp; Free in terms of up-front costs, does not mean free in terms of usability (something Linux geeks don't seem to get).&amp;nbsp; However, given that LINQ is built into .NET 3.5, I decided that all my shared and open-source projects should be using LINQ, not LLBLGen Pro.&amp;nbsp; The new LLBLGen Pro uses LINQ and when it's released, should absolutely be used as the primary solution for enterprise-class O/R mapping.&lt;/p&gt;
&lt;p&gt;Let me explain a bit about the new syndication feature in WCF 3.5 and how it's used in Squid.&amp;nbsp; Creating a syndication feed in WCF is required a WCF endpoint just like everything else in WCF.&amp;nbsp; This endpoint will be part of a service and will have an address, binding, and contract.&amp;nbsp; Nothing fancy yet as the sweetness is in the details.&amp;nbsp; Here's part of the contract Squid uses for it's feed service (don't be jealous of the VS2008 theme -- see Scott Hanselman's post on &lt;a href="http://www.hanselman.com/blog/VisualStudioProgrammerThemesGallery.aspx"&gt;VS2008 themes&lt;/a&gt;):&lt;/p&gt;&lt;pre class="code vs2008-0308-code-background"&gt;&lt;span style="background: #202020; color: #90ee90"&gt;namespace &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Squid&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Service
&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;{
    [&lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;ServiceContract&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Namespace &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;= &lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;"http://www.netfxharmonics.com/services/squid/2008/03/"&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;)]
    &lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;public interface &lt;/span&gt;&lt;span style="background: #202020; color: #2b91af"&gt;ISquidService
    &lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;{
        [&lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;OperationContract&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;]
        [&lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;WebGet&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;UriTemplate &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;= &lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;"GetFeedByTitle/{title}"&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;)]
&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;        &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;Rss20FeedFormatter &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;GetFeedByTitle&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;String &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;title&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;);

        &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;//+ More code here
    &lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;}
}&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Notice the WebGet attribute.&amp;nbsp; This is applied to signify that this will be part of a HTTP GET request.&amp;nbsp; This relates to the fact that we are using a new WCF 3.5 binding called the WebHttpBinding.&amp;nbsp; This is the same binding used by JSON and POX services.&amp;nbsp; There are actually a few new attributes, each of which provides it's own treasure chest (see later in this post when I mention a free chapter on the topic).&amp;nbsp; The WebGet attribute has an awesome property on it called UriTemplate that allows you to match parameters in the request URI to parameters in the WCF operation contract.&amp;nbsp; That's beyond cool.&lt;/p&gt;
&lt;p&gt;The service implementation is extremely straight forward.&amp;nbsp; All you have to do is create a SyndicationFeed object, populate it with SyndicationItem objects and return it in the constructor of the Rss20FeedFormatter.&amp;nbsp; Here's a non-Squid example: &lt;/p&gt;&lt;pre class="code vs2008-0308-code-background"&gt;&lt;span style="background: #202020; color: #ff0080"&gt;SyndicationFeed &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;feed &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;= &lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;new &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;SyndicationFeed&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;();
&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;feed&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Title &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;= &lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;new &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;TextSyndicationContent&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;"My Title"&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;);
&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;feed&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Description &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;= &lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;new &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;TextSyndicationContent&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;"My Desc"&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;);
&lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;List&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;SyndicationItem&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;&amp;gt; &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;items &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;= &lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;new &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;List&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;SyndicationItem&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;();
&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;items&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Add&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;new &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;SyndicationItem&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;()
{
    &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Title &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;= &lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;new &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;TextSyndicationContent&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;"My Entry"&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;),
    &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Summary &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;= &lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;new &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;TextSyndicationContent&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;"My Summary"&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;),
    &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;PublishDate &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;= &lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;new &lt;/span&gt;&lt;span style="background: #202020; color: #2b91af"&gt;DateTimeOffset&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="background: #202020; color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Now&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;)
});
&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;feed&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Items &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;= &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;items&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;;
&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;return new &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;Rss20FeedFormatter&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;feed&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;You may want to make note that you can create an RSS or ATOM feed directly from an SyndicationFeed instance using the SaveAsRss20 and SaveAsAtom10 methods.&lt;/p&gt;
&lt;p&gt;As with any WCF service, you need a place to host it and you need to configure it.&amp;nbsp; To create a service, I simply throw down a FeedService.svc file with the following page directive (I'm really not trying to have the ugliest color scheme in the world-- it's just an added bonus):&lt;/p&gt;&lt;pre class="code vs2008-0308-code-background"&gt;&lt;span style="background: #ff8080"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;@ &lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;ServiceHost &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;Service&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;"Squid.Service.SquidService" &lt;/span&gt;&lt;span style="background: #ff8080"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;The configuration is also fairly straight forward, all we have is our previously mentioned ending with an address(blank to use FeedService.svc directly), binding (WebHttpBinding), and contract(Squid.Service.ISquidService).&amp;nbsp; However, you also need to remember to add the WebHttp behavior or else nothing will work for you.&lt;/p&gt;&lt;pre class="code vs2008-0308-code-background"&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;system.serviceModel&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;behaviors&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;behavior &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;name&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;FeedEndpointBehavior&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;webHttp&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;behavior&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;behaviors&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;services&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;service &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;name&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;Squid.Service.SquidService&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;endpoint &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;address&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;""
                      &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;binding&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;webHttpBinding&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"
                      &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;contract&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;Squid.Service.ISquidService&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"
                      &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;behaviorConfiguration&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;=&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: cyan"&gt;FeedEndpointBehavior&lt;/span&gt;&lt;span style="background: #202020; color: #ff80c0"&gt;"&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;/&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;service&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;services&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;system.serviceModel&lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;That's seriously all there is to it: write your contract, write your implementation, create a host, and set configuration.&amp;nbsp; In other words, creating a syndication feed in WCF is no different than creating a WsHttpBinding or NetTcpBinding service.&amp;nbsp; However, what about reading an RSS or ATOM feed? This is even simpler.&lt;/p&gt;
&lt;p&gt;To read a feed all you have to do is create an XML reader with the data source of the feed and pass that off to the static Load method of the SyndicationFeed class.&amp;nbsp; This will return an instance of SyndicationFeed which you may iterate or, as I'm doing in Squid, transform with LINQ.&amp;nbsp; I actually liked how my server-control used an internal repeater instance and therefore wanted to continue to use it.&amp;nbsp; So, I kept my ITemplate object (RssListTemplate) the same and used the following LINQ to transform a SyndicationFeed to what my ITemplate what already using:&lt;/p&gt;&lt;pre class="code vs2008-0308-code-background"&gt;&lt;span style="background: #202020; color: #ff0080"&gt;Object &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;bindingSource &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;= &lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;from &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;entry &lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;in &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;feed&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Items
                       &lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;select new &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;SimpleFeedEntry
                       &lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;{
                           &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;DateTime &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;= &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;entry&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;PublishDate&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;DateTime&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;,
                           &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Link &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;= &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;entry&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Links&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;First&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;()&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Uri&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;AbsoluteUri&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;,
                           &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Text &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;= &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;entry&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Content &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;!= &lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;null &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;? &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;entry&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Content&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;ToString&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;() : &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;entry&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Summary&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Text&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;,
                           &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Title &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;= &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;entry&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Title&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;Text
                       &lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;};&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Thus, with .NET 3.5 I was able to remove RSS.NET and ATOM.NET completely from the project.&amp;nbsp; LINQ also, of course helped me with my database access and therefore remove my dependency on my LLBLGen Pro generated DAL:&lt;/p&gt;&lt;pre class="code vs2008-0308-code-background"&gt;&lt;span style="background: #202020; color: #90ee90"&gt;using &lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;SquidLINQDataContext &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;db &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;= &lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;new &lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;SquidLINQDataContext&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="background: #202020; color: #ff0080"&gt;Configuration&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;DatabaseConnectionString&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;))
{
    &lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;var &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;collection &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;= &lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;from &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;p &lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;in &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;db&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;FeedCreations
                     &lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;where &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;p&lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;.&lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;FeedCreationTitle &lt;/span&gt;&lt;span style="background: #202020; color: silver"&gt;== &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;title
                     &lt;/span&gt;&lt;span style="background: #202020; color: #90ee90"&gt;select &lt;/span&gt;&lt;span style="background: #202020; color: #f2f0df"&gt;p&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;;

    &lt;/span&gt;&lt;span style="background: #202020; color: #a4a4a4"&gt;//+ More code here
&lt;/span&gt;&lt;span style="background: #202020; color: #eeeeee"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Thus, you can use Squid in your existing .NET 3.5 system with little impact to anything.&amp;nbsp; Squid is what I use in my &lt;a href="http://www.netfxharmonics.com/2007/08/Minima-NET-35-Blog-Engine"&gt;Minima blog engine&lt;/a&gt; to provide the boxes of information in the sidebar.&amp;nbsp; I'm able to modify the data in the Snippet table in the Squid database to modify the content and order in my sidebar.&amp;nbsp; Of course I can also easily bring in RSS/ATOM content from the web with this as well.&lt;/p&gt;
&lt;p&gt;You can get more information on the new web support in WCF 3.5 by reading the chapter "&lt;a href="http://www.informit.com/articles/article.aspx?p=1173045&amp;amp;seqNum=1"&gt;Programmable Web&lt;/a&gt;" (free chapter) in the book &lt;a href="http://www.amazon.com/gp/product/0321440064?ie=UTF8&amp;amp;tag=httpwwwnetfxh-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321440064"&gt;Essential WCF for .NET 3.5&lt;/a&gt; (click to buy).&amp;nbsp; This is an amazing book that I highly recommend to all WCF users.&lt;/p&gt;
&lt;h4&gt;Links&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://svn.netfxharmonics.com/Squid/tags/"&gt;Squid Subversion Repository&lt;/a&gt; 
&lt;li&gt;&lt;a href="http://viewer.netfxharmonics.com/Squid/tags/"&gt;Squid in the NetFX Harmonics Subversion Viewer&lt;/a&gt; 
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0321440064?ie=UTF8&amp;amp;tag=httpwwwnetfxh-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321440064"&gt;Essential Windows Communication Foundation for .NET 3.5&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/FXHarmonics?a=PoPs0M"&gt;&lt;img src="http://feeds.feedburner.com/~a/FXHarmonics?i=PoPs0M" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=qVSCivF"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=qVSCivF" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=3LCJkXF"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=3LCJkXF" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=RqsBkNf"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=RqsBkNf" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FXHarmonics/~4/253425615" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/FXHarmonics/~3/246505984/March-2008-Web-Technology-Update"&gt;March 2008 Web Technology Update&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Wednesday, March 05, 2008&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/FXHarmonics/" target="_blank"&gt;NetFX Harmonics&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;Recently a bunch of technologies have been released and/or updated and I would like to mention a few of them briefly.&lt;/p&gt;  &lt;p&gt;First and foremost, Silverlight 2 Beta 1 has finally been released and you may download it immediately.&amp;#160; There is also an &lt;a href="http://blogs.msdn.com/tims/archive/2008/03/05/download-links-for-mix08-announcements.aspx"&gt;accompanying SDK&lt;/a&gt;.&amp;#160; You can find a nice &lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-1-creating-quot-hello-world-quot-with-silverlight-2-and-vs-2008.aspx"&gt;development tutorial series&lt;/a&gt; on Scott Guthrie's blog.&amp;#160; If you are already familiar with WPF, you can just skim this entire series in less than 5 minutes.&amp;#160; Given that this technology isn't the same as the full WPF and given that it's designed for the web, there will obviously be differences.&amp;#160; It's important to remember that Silverlight 2 isn't simply WPF for the web.&amp;#160; I would call WPF 3.5's XBAP support for IE/Firefox &amp;quot;WPF for the web&amp;quot;.&amp;#160; No, this is possibly the biggest web technology improvement since the release of Firefox 1.0, which in turn was the biggest technology release since the printing press.&amp;#160; Alight, alight... since .NET 1.1.&amp;#160; It's support for the dynamic language runtime is going to completely revolutionize our web development.&lt;/p&gt;  &lt;p&gt;When reading through Scott's tutorial series (serious, at least skim it), it's interesting to note that Silverlight 2 allows cross-domain communication.&amp;#160; It does this by reusing the Flash communication policy files.&amp;#160; This is really awesome as it means that you can start accessing resources that Flash has been using for a while.&amp;#160; Being able to dynamically access resources from different domains is critical to the success of web architecture in the future.&lt;/p&gt;  &lt;p&gt;Speaking of cross-domain communication, &lt;a href="http://ejohn.org/"&gt;John Resig&lt;/a&gt; and I received a very depressing e-mail the other day telling us horrible news: cross-domain communication will probably be removed from Firefox 3 before it's official release.&amp;#160; Apparently a bunch of paranoid anti-architects were complaining about the dreaded evils of being able to access resources from different domains.&amp;#160; Um ok.&amp;#160; Fortunately, however, Firefox 3 has a feature called postMessage that allows you to get around this.&amp;#160; Malte Ubl has produced a library called &lt;a href="http://ajaxian.com/archives/xssinterface-cross-domain-access-using-postmessage-and-more"&gt;xssinterface&lt;/a&gt; to demonstrate just this concept.&amp;#160; You could, of course, get around this completely with some iframe hacks or some other scripting magic.&lt;/p&gt;  &lt;p&gt;Speaking of web browsers, I would like to bring people's attention to a technology that I've been following for some time now: Apple WebKit.&amp;#160; This is basically the brains inside Safari.&amp;#160; I absolutely love the Safari web browser.&amp;#160; It's by far and away the easiest web browser to use.&amp;#160; It also has the same keyboard short-cuts as Firefox, which is how I'm able to use it.&amp;#160; It's also incredibly fast, but I should mention that it uses even more memory than Firefox.&amp;#160; My last instance passed 500MB.&amp;#160; Given it's lack of an extension or configuration (i.e. about:config) system, it's obviously no where near the same caliber as Firefox though.&amp;#160; It is, however, my primary web browser as has been since October '07.&lt;/p&gt;  &lt;p&gt;The reason I mention WebKit is because as very few people know, this is an open source project and has nightly binaries released on their &lt;a href="http://webkit.org/"&gt;webkit.org&lt;/a&gt; web site.&amp;#160; One of the most interesting thing about nightlies that you can actually watch the progress of development as time goes on.&amp;#160; About every month or so I like to get the latest Firefox nightly.&amp;#160; It's always interesting to see the major experiments that the developers try about 2 months after a major release of Firefox.&amp;#160; There's always some really awesome &amp;quot;teaser&amp;quot; feature in there that later grows into a fully grown technology.&amp;#160; The same can be said for WebKit.&lt;/p&gt;  &lt;p&gt;None of that is, however, my primary reason for mentioning WebKit.&amp;#160; As, most web developers know, the Acid2 test has been the standard for checking a web browsers compatibility with the CSS standard.&amp;#160; I've been pushing this test for a long time, but I've never pushed it as the only test.&amp;#160; There are many things that a web browser must do and many features a web browser must have before it can be considered appropriate for use.&amp;#160; Merely focusing on CSS, while completely ignoring DOM support, JavaScript, and general user usability can lead a browser to be as impossible to use as Opera 9.&lt;/p&gt;  &lt;p&gt;As I've said time and time again, I'm not a CSS specialist.&amp;#160; Part of the definition of being a professional web develop is that I have a solid understand of the inner workings of CSS including specificity, the various selectors, and how to merge absolute, floating, and relative position on the same elements, tasks &amp;quot;coders&amp;quot; see as nearly impossible to learn.&amp;#160; However, my focus is on AJAX interaction as seen from the JavaScript and DOM worlds.&amp;#160; Therefore, we need to have a test for browsers that goes beyond the simple Acid 2 test for CSS.&amp;#160; I'm not the only one thinking this way, because recently the &lt;a href="http://acid3.acidtests.org/"&gt;Acid3 test&lt;/a&gt; was published and it tests CSS, JavaScript and DOM support.&amp;#160; This is the new standard for web browsers.&lt;/p&gt;  &lt;p&gt;So far no web browser has even gotten close, with the lowest score from a web browser being 39% in Safari to the best score being 50% in Firefox 2.0.0.12.&amp;#160; However, in terms of non-released software, &lt;a href="http://www.mozilla.com/en-US/firefox/all-beta.html"&gt;Firefox 3.0b3&lt;/a&gt; has a score between 59% and 61%, depending on its mood (update: b4 is steady at 67%) and the latest WebKit nighty has a score is 90% (watch WebKit progress on Acid 3 at &lt;a title="http://bugs.webkit.org/show_bug.cgi?id=17064" href="http://bugs.webkit.org/show_bug.cgi?id=17064"&gt;http://bugs.webkit.org/show_bug.cgi?id=17064&lt;/a&gt;).&amp;#160; That's phenomenal!&amp;#160; The newly released Internet Explorer 8 beta 1 has a score of 17%.&amp;#160; Those of you who have naively praising the IE team for being &lt;strong&gt;YEARS&lt;/strong&gt; late on getting &lt;em&gt;near &lt;/em&gt;the Acid 2 test need to wake up and realize this is 2008.&amp;#160; Time moves-- keep up.&amp;#160; Firefox has been close for the longest time and has always had the next-gen's next-gen JavaScript and DOM support, but has only recently completely passed the finish line of the Acid 2 test.&amp;#160; So, they are finally off my watch list there, but I will not stop bugging them until they pass the Acid 3 test.&lt;/p&gt;  &lt;p&gt;For more information on the Acid 3 test, see John Resig's most entitled &amp;quot;&lt;a href="http://ejohn.org/blog/acid3-tackles-ecmascript/"&gt;Acid 3 tackes EMCAScript&lt;/a&gt;&amp;quot;.&amp;#160; He's about as passionate as I am for web standards and Firefox and his blog is an invaluable resource for all things JavaScript.&amp;#160; His work is so good that I would like to take the time to plug his book he is currently writing: &lt;a href="http://ejohn.org/blog/secrets-table-of-contents/"&gt;Secrets of the JavaScript Ninja&lt;/a&gt;.&amp;#160; I absolutely guarantee you that this book will redefine the entire world of JavaScript and will raise the bar incredibly out of the reach of &amp;quot;&lt;a href="http://www.netfxharmonics.com/2007/08/Coders-and-Professional-Programmers"&gt;coders&lt;/a&gt;&amp;quot;. To all of you coders who think you know JavaScript, do a view-source on the Acid 3 source code (you may want to bring a change of underwear with you).&lt;/p&gt;  &lt;p&gt;Lastly, it's not necessarily a &amp;quot;new&amp;quot; technology, but it's so incredibly phenomenal that I need to mention it: &lt;a href="http://prototypejs.org/"&gt;Prototype 1.6&lt;/a&gt;.&amp;#160; It's amazing to me that people actually go out of their way to use ASP.NET AJAX 3.5 (I still find the &lt;a href="http://msdn2.microsoft.com/en-us/magazine/cc163863.aspx"&gt;ICallbackEventHandler&lt;/a&gt; interface more productive).&amp;#160; ASP.NET AJAX 3.5 is not nearly as bad as extremists think, but the design is still flawed.&amp;#160; Prototype on the other hand is absolutely incredible.&amp;#160; I've written about Prototype before, but this version 1.6 is even more powerful.&amp;#160; There a A LOT of changes from Prototype 1.5.&amp;#160; It's so good that I no longer call it &amp;quot;prototype/script.aculo.us&amp;quot;.&amp;#160; Script.aculo.us is a great animation system, but, honestly, the main reason I used it was for the DOM abstraction in the Builder object.&amp;#160; Prototype now has an &lt;a href="http://prototypejs.org/api/element"&gt;Element&lt;/a&gt; object to help create DOM objects, thus allowing me to remove Script.aculo.us from most of my projects (it's not as complete as the Builder object, but it allows object chaining-- which &lt;em&gt;greatly&lt;/em&gt; increases code readability, conciseness and understanding!).&amp;#160; The &lt;a href="http://prototypejs.org/api/template"&gt;Template&lt;/a&gt; object is also amazing as it gives you the ability to go far beyond simple String.Format formatting.&amp;#160; The new &lt;a href="http://prototypejs.org/api/class/create"&gt;Class&lt;/a&gt; object for OOP is also great.&amp;#160; It's so much easier to use than Prototype 1.5.&amp;#160; Also, being able to hide all elements with a particular CSS pattern with one shot is very useful! (for example, $$('div span .cell-block').invoke('hide')).&amp;#160; It even allows you to use CSS 3 selectors on the most dead of web browsers.&amp;#160; It really makes developing for Internet Explorer 6 and 7 bearable!&amp;#160; Even if I have to use ASP.NET AJAX 3.5, I'll still including prototype.js.&amp;#160; If you do &lt;strong&gt;anything&lt;/strong&gt; with JavaScript, you need Prototype!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Links&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.msdn.com/tims/archive/2008/03/05/download-links-for-mix08-announcements.aspx"&gt;Silverlight 2 Beta 1 Stuff&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://webkit.org/" href="http://webkit.org/"&gt;WebKit.org&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.mozilla.com/en-US/firefox/all-beta.html"&gt;Firefox 3 Beta 3&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/tims/archive/2008/03/05/download-links-for-mix08-announcements.aspx"&gt;Acid 3&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://prototypejs.org/"&gt;Prototype 1.6&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/FXHarmonics?a=Ik5CKQ"&gt;&lt;img src="http://feeds.feedburner.com/~a/FXHarmonics?i=Ik5CKQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=7MOFeSF"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=7MOFeSF" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=y1zd3lF"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=y1zd3lF" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=zVTJYjf"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=zVTJYjf" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FXHarmonics/~4/246505984" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/FXHarmonics/~3/232958754/Comic-Strip-2-NET-and-PHP-Source-Code"&gt;Comic Strip #2: .NET and PHP Source Code&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Sunday, February 10, 2008&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/FXHarmonics/" target="_blank"&gt;NetFX Harmonics&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;Here's another conversations that I've had with various PHP programmers over the years.&amp;nbsp; Actually, this strip is a combination of three separate conversations wrapped up into one.&amp;nbsp; I think these conversations also give an accurate image of how the ignorant anti-Microsoft cult thinks.&amp;nbsp; Most of the time these people don't even know their own systems and often assume that since I'm a .NET programmer that I'm a complete fool.&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.netfxharmonics.com/Images/WindowsLiveWriter/ComicStrip2.NETandPHPSourceCode_14857/DotNetPhpCartoon02.png" alt=".NET and PHP Source Code Comic Strip" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/FXHarmonics?a=d2ZD6B"&gt;&lt;img src="http://feeds.feedburner.com/~a/FXHarmonics?i=d2ZD6B" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=wMCtwkE"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=wMCtwkE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=n0hqC7E"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=n0hqC7E" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=7nB5kNe"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=7nB5kNe" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FXHarmonics/~4/232958754" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/FXHarmonics/~3/228180725/Comic-Strip-Enterprise-NETPHP"&gt;Comic Strip: Enterprise .NET/PHP&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Saturday, February 02, 2008&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/FXHarmonics/" target="_blank"&gt;NetFX Harmonics&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;Recently I ran across a really awesome web site called &lt;a href="http://www.toondoo.com/"&gt;ToonDoo&lt;/a&gt;.&amp;nbsp; The web site basically allows you to create your own comic strips using a simple, yet feature rich Flash application.&amp;nbsp; Today I learned about &lt;a href="http://ajaxian.com/archives/cartoon-comic-fun"&gt;a few other web sites&lt;/a&gt; that do something similar.&amp;nbsp; In light of the nonsensical anti-.NET drivel I hear constantly from ignorant outsiders, I thought I would put a few of my encounters into a few strips.&amp;nbsp; Here is the first...&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.netfxharmonics.com/Images/WindowsLiveWriter/ComicStripEnterprise.NETPHP_13EF1/DotNetPhpCartoon01.png" border="0"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/FXHarmonics?a=1AizoV"&gt;&lt;img src="http://feeds.feedburner.com/~a/FXHarmonics?i=1AizoV" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=TM9okDE"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=TM9okDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=vrzjAjE"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=vrzjAjE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=O4vQaje"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=O4vQaje" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FXHarmonics/~4/228180725" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/FXHarmonics/~3/222730050/Framework-Engineering-Lecture-Released"&gt;Cwalina's Framework Engineering Lecture Posted&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Thursday, January 24, 2008&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/FXHarmonics/" target="_blank"&gt;NetFX Harmonics&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;In my mind the single most important aspect of any system is usability.&amp;nbsp; Unless the context states otherwise, when I use the term "optimize" or "efficiency" I am always always talking about usability optimization and efficiency.&amp;nbsp; Things can be fast with a small footprint, but if you can't figure out how to use it right away or continually confuses your methods for your fields, then it doesn't really matter.&amp;nbsp; Fortunately, Microsoft agrees with this.&amp;nbsp; The days of every company writing their own coding-guidelines are gone and we .NET developers been unified under the great Framework Design Guidelines ("FDG") that &lt;a href="http://blogs.msdn.com/kcwalina/"&gt;Krzysztof Cwalina&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/brada/"&gt;Brad Abrams&lt;/a&gt; have so graciously given us.&lt;/p&gt; &lt;p&gt;To help further the unity in the community, Krzysztof recently posted a lecture on his blog entitled "&lt;a href="http://blogs.msdn.com/kcwalina/archive/2008/01/08/FrameworkEngineering.aspx"&gt;Framework Engineering: Architecting, Designing, and Developing Reusable Libraries&lt;/a&gt;".&amp;nbsp; Here is the abstract of the lecture:&lt;/p&gt; &lt;blockquote&gt;This session covers the main aspects of reusable library design: API design, architecture, and general framework engineering processes. Well-designed APIs are critical to the success of reusable libraries, but there are other aspects of framework development that are equally important, yet not widely covered in literature. Organizations creating reusable libraries often struggle with the process of managing dependencies, compatibility, and other design processes so critical to the success of modern frameworks. Come to this session and learn about how Microsoft creates its frameworks. The session is based on experiences from the development of the .NET Framework and Silverlight, and will cover processes Microsoft uses in the development of managed frameworks. &lt;/blockquote&gt; &lt;p&gt;This video is, of course, not the only video on such an incredibly critical topic.&amp;nbsp; Many years ago, Brad Abrams (and friends) gave a &lt;a href="http://msdn2.microsoft.com/en-us/netframework/aa497250.aspx"&gt;lecture series&lt;/a&gt; to Microsoft employees on the topic of framework design guidelines.&amp;nbsp; These videos don't just cover the critically important topic of name guidelines, but also CLR performance topics, interopability guidelines, security topics, as well as various others.&amp;nbsp; It's a video series that's essential to serious .NET development.&lt;/p&gt; &lt;p&gt;More importantly then these videos though, is the classic work produced by Krzysztof and Brad entitled "&lt;a href="http://www.amazon.com/gp/product/0321246756?ie=UTF8&amp;amp;tag=httpwwwnetfxh-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321246756"&gt;Microsoft Framework Design Guidelines&lt;/a&gt;".&amp;nbsp; At the time of this writing, this book has 28 Amazon.com customer reviews and is still at five stars.&amp;nbsp; Look at a few of the review titles: "&lt;em&gt;A must have for any C# Developer or Architect&lt;/em&gt;", "&lt;em&gt;For the individual who wants to rise above the masses&lt;/em&gt;", "&lt;em&gt;If you only ever buy one .NET book, make it this one&lt;/em&gt;", "AWESOME * 10 = MUST HAVE;" and my personal favorite: "&lt;em&gt;Passionate About Quality?&lt;/em&gt;"&amp;nbsp; These reviews give you a good idea of the level of community acceptance that the framework design guidelines have.&amp;nbsp; One reviewer even said "I would pay $5 per page for this book, and have found it to be, by far, the most outstandingly useful technical book I've read."&amp;nbsp; This book covers in detail many of the aspects (and often times more) that have been covered in the videos.&amp;nbsp; In fact, the videos are actually on the DVD that comes with the book.&lt;/p&gt; &lt;p&gt;The book is also not simply a set of laws.&amp;nbsp; Throughout the book Microsoft architects and major Microsoft community leaders like Jeffery Richter make comments on various aspects of the framework.&amp;nbsp; Sometimes they explain why a rule is stated in a certain way and other times they emphasis how crucially important a rule is.&amp;nbsp; A few of the comments in the book explain problems in the .NET framework stemming from the fact that the guidelines were still in development (people used to say C# looked like Java-- well, many people used Java's nearly obfuscated coding standard!)&amp;nbsp; At one point in the book one of the authors explains a usability study for .NET streamed and right-out admitted what most of us already know: .NET streaming is extremely non-intuitive!&lt;/p&gt; &lt;p&gt;Many times I hear people say that the success of the .NET framework comes from it's extremely efficient garage collection model, it's flexible common &lt;strong&gt;language &lt;/strong&gt;runtime (in contrast to Java's &lt;strong&gt;platform &lt;/strong&gt;runtime) and it's powerful JIT model.&amp;nbsp; All those things are crucial, but ease of use is even more at the heart of .NET.&amp;nbsp; Abstraction in framework design can be defined as the increasing of the semantic value or usability of any entity and it's at this point where we can see .NET far outshine Java and PHP.&amp;nbsp; I've all but forgotten how to work with pointers, but it's when I forgot my coding standard that I'll start to become obsolete.&amp;nbsp; It's been said that the success of Windows was driven by the very open nature of the Win16/Win32 API.&amp;nbsp; Similarly, I highly suspect that it's the the beautiful abstraction with extremely high usability that explains .NET's sheer success.&amp;nbsp; There's only so much marketing can do; at some point a product has to stand on it's own (even then, Programmers can see though marketing!).&amp;nbsp; This beautiful abstraction and extremely high usability if course due to the existence and enforcement of the FDG.&lt;/p&gt; &lt;p&gt;To be clear, when I talk about FDG, I'm not simply talking about FXCop rules.&amp;nbsp; I typically break the .NET framework rules down into three levels: CLS-compliance, FXCop compliance, FDG compliance, and the iDesign standard.&amp;nbsp; If you do not strictly enforce CLS-compliance, then you may very well be completely stuck in the next version of .NET.&amp;nbsp; Who knows how non-Microsoft compilers will become.&amp;nbsp; FXCop will catch problems in your CLS-compliance and it will also catch many of the FDG violations as well.&amp;nbsp; The FDG rules, however, also cover various aspects of security and performance that only a human can check.&amp;nbsp; Lastly, when people often mention the FDG, many times what they really mean is the &lt;a href="http://idesign.net/idesign/DesktopDefault.aspx"&gt;iDesign standard&lt;/a&gt;, edited by Microsoft Software Legend &lt;a href="http://idesign.net/idesign/DesktopDefault.aspx?tabindex=3&amp;amp;tabid=5"&gt;Juval Lowy&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;In fact, I often use the terms "Framework Design Guidelines" and iDesign standard interchangeably.&amp;nbsp; They aren't the same thing, but in some contexts it's acceptable to mix them.&amp;nbsp; Whereas the FDG is primarily for the public interface of a framework, the iDesign standard covers both the public and internal.&amp;nbsp; The term "iDesign standard" may not be familiar to all, but what represents is.&amp;nbsp; It's been the .NET coding defacto standard since 2003.&amp;nbsp; In fact, when you crack open any APress, Wrox, or Sam Publishing book, you will probably be looking at code following the iDesign standard.&amp;nbsp; Further, the default settings for Visual Studio is the iDesign code layout.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Every .NET developer knows it and just about everyone follows it.&amp;nbsp; Some may think the iDesign standard is optional and since it covers private code and in a sense it is optional, but, to be sure, if you are following the FDG rules and the iDesign standard, you have immediately chopped the learning curve of your system by an enormous factor.&amp;nbsp; Also, if you ever go public with your application (i.e. go open source), you will need to make sure you follow the FDG standard (which includes CLS and FXCop compliance) and the iDesign standard.&amp;nbsp; Otherwise, your system will probably have virtually no acceptance.&lt;/p&gt; &lt;p&gt;In closing, I should mention that &lt;a href="http://blogs.msdn.com/kcwalina/"&gt;Krzysztof Cwalina&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/brada/"&gt;Brad Abrams&lt;/a&gt; are releasing the &lt;a href="http://www.amazon.com/gp/product/0321545613?ie=UTF8&amp;amp;tag=httpwwwnetfxh-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321545613"&gt;2nd edition&lt;/a&gt; of their famous book, due September 29, 2008.&amp;nbsp; You can, of course, &lt;a href="http://www.amazon.com/gp/product/0321545613?ie=UTF8&amp;amp;tag=httpwwwnetfxh-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321545613"&gt;pre-order on Amazon&lt;/a&gt;.&amp;nbsp; You can be sure that I will!&lt;/p&gt; &lt;h5&gt;Links&lt;/h5&gt; &lt;ul class="simple-list"&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/kcwalina/archive/2008/01/08/FrameworkEngineering.aspx"&gt;Framework Engineering: Architecting, Designing, and Developing Reusable Libraries&lt;/a&gt; Video  &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/netframework/aa497250.aspx"&gt;Framework Design Lectures&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0321246756?ie=UTF8&amp;amp;tag=httpwwwnetfxh-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321246756"&gt;Framework Design Guidelines Book&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0321545613?ie=UTF8&amp;amp;tag=httpwwwnetfxh-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321545613"&gt;Framework Design Guidelines 2nd Edition Pre-order&lt;/a&gt;  &lt;li&gt;&lt;a href="http://idesign.net/idesign/DesktopDefault.aspx"&gt;iDesign Coding Standard&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/FXHarmonics?a=ufh2LR"&gt;&lt;img src="http://feeds.feedburner.com/~a/FXHarmonics?i=ufh2LR" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=7oFPN7D"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=7oFPN7D" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=fQpIC3D"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=fQpIC3D" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=0unZlnd"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=0unZlnd" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FXHarmonics/~4/222730050" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/FXHarmonics/~3/220170368/DojrNET-Dojo-RPC-Library-NET-20"&gt;Dojr.NET (Dojo RPC Library .NET 2.0)&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Saturday, January 19, 2008&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/FXHarmonics/" target="_blank"&gt;NetFX Harmonics&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;In my &lt;a href="http://www.netfxharmonics.com/2008/01/Dojo-Client-Side-Web-Development-Framework"&gt;overview of Dojo&lt;/a&gt;, I mentioned that Dojo provides a nice service abstraction layer in the form of &lt;a href="http://dojotoolkit.org/book/dojo-book-0-9/part-3-programmatic-dijit-and-dojo/ajax-transports/remote-procedure-call-rpc"&gt;dojo.rpc&lt;/a&gt;.&amp;nbsp; This is an absolutely astounding feature, yet it's so simple.&amp;nbsp; Instead of making all kinds of functions and setting up and &lt;a href="http://dojotoolkit.org/book/dojo-book-0-9/part-3-programmatic-dijit-and-dojo/ajax-transports/hello-ajax-world"&gt;XHR object&lt;/a&gt;, Dojo allows you to call server methods using a very simplified syntax.&amp;nbsp; The model should be familiar to anyone who has worked with SOAP services.&amp;nbsp; In these types of services, you are given a scheme and, depending on what client you are using, you can create a client-side proxy for all interaction with the service.&amp;nbsp; This is how the dojo.rpc feature works.&amp;nbsp; When you want to access a service, give Dojo the appropriate service metadata it needs to create a proxy and just call your service functions on the proxy.&lt;/p&gt; &lt;h5&gt;Using dojo.rpc&lt;/h5&gt; &lt;p&gt;In Dojo, this schema is called a Simple Method Description (SMD) and looks something like this.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;d = {
  &lt;span style="color: #a31515"&gt;'methods'&lt;/span&gt;:
    [
      {
        &lt;span style="color: #a31515"&gt;'name'&lt;/span&gt;:&lt;span style="color: #a31515"&gt;'getServerTime'&lt;/span&gt;,
        &lt;span style="color: #a31515"&gt;'parameters'&lt;/span&gt;:[
          {&lt;span style="color: #a31515"&gt;'name'&lt;/span&gt;:&lt;span style="color: #a31515"&gt;'format'&lt;/span&gt;}
        ]
      },
      {
        &lt;span style="color: #a31515"&gt;'name'&lt;/span&gt;:&lt;span style="color: #a31515"&gt;'getServerTimeStamp'&lt;/span&gt;,
        &lt;span style="color: #a31515"&gt;'parameters' &lt;/span&gt;:[
        ]
      }
    ],
    &lt;span style="color: #a31515"&gt;'serviceType'&lt;/span&gt;:&lt;span style="color: #a31515"&gt;'JSON-RPC'&lt;/span&gt;,
    &lt;span style="color: #a31515"&gt;'serviceURL'&lt;/span&gt;:&lt;span style="color: #a31515"&gt;'/json/time/'
&lt;/span&gt;}&lt;/pre&gt;
&lt;p&gt;With this SMD data, you create a proxy by getting and instance of the dojo.rpc.JsonService object setting the SMD in the constructor, like this:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;timeProxy = &lt;span style="color: blue"&gt;new &lt;/span&gt;dojo.rpc.JsonService(d);&lt;/pre&gt;
&lt;p&gt;From here you can call methods on the proxy and set a callback:&lt;/p&gt;&lt;pre class="code"&gt;timeProxy.getServerTimeStamp( ).addCallback(&lt;span style="color: blue"&gt;function&lt;/span&gt;(r) { alert(r); });&lt;/pre&gt;
&lt;p&gt;Upon execution, this line will call the getServerTimeStamp method described in the SMD and route the output through the anonymous function set in the addCallback function.&amp;nbsp; If you would like, however, you can defer the callback by calling the service now and explicitly releasing the callback later.&amp;nbsp; In the following example, the first line calls the server immediately and the second releases the callback.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;deferred = timeProxy.getServerTimeStamp( );

deferred.addCallback(&lt;span style="color: blue"&gt;function&lt;/span&gt;(r) { alert(r); });&lt;/pre&gt;
&lt;p&gt;This is great, but what about the server?&amp;nbsp; As it turns out, Dojo, sends JSON to the service.&amp;nbsp; You can see this for yourself by taking at keep at the Request.InputStream stream in ASP.NET:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;StreamReader &lt;/span&gt;reader = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StreamReader&lt;/span&gt;(Request.InputStream);
&lt;span style="color: #2b91af"&gt;String &lt;/span&gt;data = reader.ReadToEnd( );
&lt;/pre&gt;
&lt;p&gt;Below is the data that was in the stream.&amp;nbsp; As you can see, this is extremely simple.&lt;/p&gt;&lt;pre class="code"&gt;{\"params\": [], \"method\": \"getServerTimeStamp\", \"id\": 1}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;h5&gt;Providing Server Functionality&lt;/h5&gt;
&lt;p&gt;Since we are working in .NET, we have at our disposal many mechanisms that can help us deal with various formats, some of which that can really help simplify life.&amp;nbsp; As I explained in my &lt;a href="http://www.netfxharmonics.com/2007/05/XmlHttp-Service-Interop-Part-3-XML-Serialization"&gt;XmlHttp Service Interop Series&lt;/a&gt;, providing communication between two different platforms isn't at all difficult, provided that you understand the wire format in between them.&amp;nbsp; In part 3 of that same series, I explained how you could use XML serialization to quickly and powerfully interop with any XML service, including semi-standard a SOAP service.&amp;nbsp; Furthermore, you aren't limited to XML.&amp;nbsp; Provided the right serializer, you can do the same with any wire format.&amp;nbsp; For our purposes here, we need a JSON serializer.&amp;nbsp; One of my favorites is the &lt;a href="http://james.newtonking.com/pages/json-net.aspx"&gt;Json.NET&lt;/a&gt; framework.&amp;nbsp; However, to keep things simple and to help us focus more on the task at hand, I'm going to use the .NET 3.5 &lt;a href="http://msdn2.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer.aspx"&gt;DataContractJsonSerializer&lt;/a&gt; object.&amp;nbsp; If you are working in a .NET 2.0 environment with a tyrannical boss who despises productivity, you should check out &lt;a href="http://james.newtonking.com/pages/json-net.aspx"&gt;Json.NET&lt;/a&gt; (or get a new job).&lt;/p&gt;
&lt;p&gt;To begin our interop, the first thing we need is a type that will represent this JSON message in the .NET world.&amp;nbsp; Based on what we saw in the ASP.NET Input Stream, this should be easy enough to build:&lt;/p&gt;&lt;pre class="code"&gt;[&lt;span style="color: #2b91af"&gt;DataContract&lt;/span&gt;]
&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DojoMessage
&lt;/span&gt;{
    [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;"params"&lt;/span&gt;)]
    &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;String&lt;/span&gt;[] Params;

    [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;"method"&lt;/span&gt;)]
    &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;String &lt;/span&gt;Method;

    [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;"id"&lt;/span&gt;)]
    &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Int32 &lt;/span&gt;Id = 0;
}&lt;/pre&gt;
&lt;p&gt;Having that class in place, we can now deserialize ASP.NET's InputStream into an instance of this class using out DataContractJsonSerializer:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;DataContractJsonSerializer &lt;/span&gt;s = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DataContractJsonSerializer&lt;/span&gt;(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;DojoMessage&lt;/span&gt;));
&lt;span style="color: #2b91af"&gt;DojoMessage &lt;/span&gt;o = (&lt;span style="color: #2b91af"&gt;DojoMessage&lt;/span&gt;)s.ReadObject(stream);&lt;/pre&gt;
&lt;p&gt;That's it.&amp;nbsp; Now you have a strongly typed object where you can access the method and parameter information as you need.&amp;nbsp; From here's it shouldn't be too hard for anyone to use this information to figure out what to do on the server.&amp;nbsp; After all the logic is in place, the only thing we have left to do is to return the data, which isn't really that big deal at all.&amp;nbsp; The return data is basically plain text, but you can definitely send JSON back if you like.&amp;nbsp; If you would like to use JSON, you can even the DataContractJsonSerializer to serialize an object to the ASP.NET Request.OutputStream object:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;Object &lt;/span&gt;r = GetSomething(o);
s.WriteObject(context.Response.OutputStream, r);
&lt;/pre&gt;
&lt;p&gt;What about a more high-level approach that will allow me to simply write my core functionality without messing with mechanics?&amp;nbsp; Anyone using ASP.NET AJAX has this already in both their ASMX and WCF/JSON abstraction, but I wanted this functionality for Dojo (and for direct AJAX access).&amp;nbsp; My requirements were that I wanted to be able to define an attributed service, register it and move on.&amp;nbsp; Therefore, I build a Dojo RPC .NET 2.0 library called Dojr.NET (short for Dojo RPC, of course).&amp;nbsp; Dojr is probably the worst project name I've come up with to date, but it saves me from potential legal stuff from the Dojo Foundation.&lt;/p&gt;
&lt;h5&gt;Using Dojr.NET&lt;/h5&gt;
&lt;p&gt;To use Dojr.NET, create a class that inherits from DojoRpcServiceBase and apply attribute DojoOperationAttribute on each publicly exposed method.&amp;nbsp; Be sure to also set the dojo.rpc operation name in it's constructor, this is the name the Dojo client will see.&amp;nbsp; Since .NET uses PascalCased methods and JavaScript uses camelCased function, this is required.&amp;nbsp; Here is a complete sample class:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;namespace &lt;/span&gt;NetFX.Web
{
    &lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;CalculatorService &lt;/span&gt;: &lt;span style="color: #2b91af"&gt;DojoRpcServiceBase
    &lt;/span&gt;{
        [&lt;span style="color: #2b91af"&gt;DojoOperation&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"add"&lt;/span&gt;)]
        &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Int32 &lt;/span&gt;Add(&lt;span style="color: #2b91af"&gt;Int32 &lt;/span&gt;n1, &lt;span style="color: #2b91af"&gt;Int32 &lt;/span&gt;n2) {
            &lt;span style="color: blue"&gt;return &lt;/span&gt;n1 + n2;
        }

        [&lt;span style="color: #2b91af"&gt;DojoOperation&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"subtract"&lt;/span&gt;)]
        &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Int32 &lt;/span&gt;Subtract(&lt;span style="color: #2b91af"&gt;Int32 &lt;/span&gt;n1, &lt;span style="color: #2b91af"&gt;Int32 &lt;/span&gt;n2) {
            &lt;span style="color: blue"&gt;return &lt;/span&gt;n1 - n2;
        }
    }
}&lt;/pre&gt;
&lt;p&gt;After this, all you have to do is register the class as an HttpHandler in your web.config file.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add &lt;/span&gt;&lt;span style="color: red"&gt;verb&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;*&lt;/span&gt;" &lt;span style="color: red"&gt;path&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;*/json/time/*&lt;/span&gt;" &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;NetFX.Web.TimeService&lt;/span&gt;" &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;At this point our Dojr.NET service is up and running, but how do we call it?&amp;nbsp; Actually, the same way you always do with dojo.rpc; nothing changes.&amp;nbsp; Believe it or not, this is a complete functional example:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;calcProxy = newdojo.rpc.JsonService(&lt;span style="color: #a31515"&gt;'json/calc/?smd'&lt;/span&gt;);
calcProxy.add(2, 3).addCallback(&lt;span style="color: blue"&gt;function&lt;/span&gt;(r) { alert(r); });&lt;/pre&gt;
&lt;h5&gt;Automatic Service Method Description&lt;/h5&gt;
&lt;p&gt;But, how did the proxy obtain the required dojo.rpc metadata?&amp;nbsp; If you look closely at the address given to the proxy you will notice that it's suffixed with ?smd.&amp;nbsp; When a Dojr.NET service is suffixed with ?smd, it will automatically generate and return the service metadata.&amp;nbsp; This is similar to putting ?wsdl at the end of an ASMX URI.&lt;/p&gt;
&lt;p&gt;Take a look at the metadata that's being automatically generated on the server via the ?smd suffix:&lt;/p&gt;&lt;pre class="code"&gt;{
  &lt;span style="color: #a31515"&gt;"methods"&lt;/span&gt;:[
    {
      &lt;span style="color: #a31515"&gt;"name"&lt;/span&gt;:&lt;span style="color: #a31515"&gt;"add"&lt;/span&gt;,
      &lt;span style="color: #a31515"&gt;"parameters"&lt;/span&gt;:[
        {&lt;span style="color: #a31515"&gt;"name"&lt;/span&gt;:&lt;span style="color: #a31515"&gt;"n1"&lt;/span&gt;},
        {&lt;span style="color: #a31515"&gt;"name"&lt;/span&gt;:&lt;span style="color: #a31515"&gt;"n2"&lt;/span&gt;}
      ]
    },
    {
      &lt;span style="color: #a31515"&gt;"name"&lt;/span&gt;:&lt;span style="color: #a31515"&gt;"subtract"&lt;/span&gt;,
      &lt;span style="color: #a31515"&gt;"parameters"&lt;/span&gt;:[
        {&lt;span style="color: #a31515"&gt;"name"&lt;/span&gt;:&lt;span style="color: #a31515"&gt;"n1"&lt;/span&gt;},
        {&lt;span style="color: #a31515"&gt;"name"&lt;/span&gt;:&lt;span style="color: #a31515"&gt;"n2"&lt;/span&gt;}
      ]
    }
  ],
  &lt;span style="color: #a31515"&gt;"serviceType"&lt;/span&gt;:&lt;span style="color: #a31515"&gt;"JSON-RPC"&lt;/span&gt;,
  &lt;span style="color: #a31515"&gt;"serviceURL"&lt;/span&gt;:&lt;span style="color: #a31515"&gt;"http://localhost:3135/Dojo/json/calc/"
&lt;/span&gt;}&lt;/pre&gt;
&lt;p&gt;As you can see, Dojr.NET provides all the metadata required.&amp;nbsp; Literally all you have to do is inherit from DojoRpcServiceBase, apply the DojoOperationAttribute, and register the class to ASP.NET.&amp;nbsp; Everything else will be done for you. 
&lt;h4&gt;Links&lt;/h4&gt;
&lt;ul&gt;
&lt;li class="code-base"&gt;&lt;a href="http://svn.netfxharmonics.com/DojrDotNet/trunk/"&gt;Dojr.NET Subversion Repository&lt;/a&gt; 
&lt;li class="code-base"&gt;&lt;a href="http://viewer.netfxharmonics.com/DojrDotNet/trunk/"&gt;Dojr.NET in the Subversion Viewer&lt;/a&gt; 
&lt;li class="article"&gt;&lt;a href="http://www.netfxharmonics.com/2008/01/Dojo-Client-Side-Web-Development-Framework"&gt;NetFX Harmonics Dojo Overview&lt;/a&gt; 
&lt;li class="download"&gt;&lt;a href="http://dojotoolkit.org/"&gt;Dojo Download&lt;/a&gt; 
&lt;li class="download"&gt;&lt;a href="http://www.netfxharmonics.com/2007/05/XmlHttp-Service-Interop-Part-3-XML-Serialization"&gt;XmlService Interop Series&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/FXHarmonics?a=xFA08M"&gt;&lt;img src="http://feeds.feedburner.com/~a/FXHarmonics?i=xFA08M" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=DDaP0CD"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=DDaP0CD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=b3Tz9YD"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=b3Tz9YD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/FXHarmonics?a=r8jC7Wd"&gt;&lt;img src="http://feeds.feedburner.com/~f/FXHarmonics?i=r8jC7Wd" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FXHarmonics/~4/220170368" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="accentbar"&gt;
&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;NEWS FEED&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/h3&gt; &lt;br /&gt;&lt;b&gt;DevServer Announcement and Overview&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released" class="externalLink"&gt;http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
As a Training Tool
&lt;/h3&gt; &lt;br /&gt;NetFXHarmonics DevServer is built on .NET 3.5 using WPF, WCF, and LINQ.  DevServer could be used as a training tool to help teach WPF binding, WCF communication, and LINQ collection transformation and querying.  See the &amp;quot;As a Training Tool&amp;quot; in the &amp;quot;DevServer Announcement and Overview&amp;quot; blog entry for more detailed information how using DevServer as a training tool.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Screenshot
&lt;/h3&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=DevServer&amp;amp;DownloadId=31627" alt="OriginalDevServerThumb.png" /&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>quantum00</author><pubDate>Sun, 06 Apr 2008 01:25:22 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080406012522A</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/DevServer/Wiki/View.aspx?title=Home&amp;version=9</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;NetFXHarmonics DevServer is a web server hosting environment built on WPF and WCF technologies that allows multiple instances of Cassini-like web servers to run in parallel.  DevServer also includes tracing capabilities for monitoring requests and responses, request filtering, automatic ViewState and ControlState parsing, visually enhanced HTTP status codes, IP binding modes for both local-only as well as remote access, and easy to use XML configuration.
&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
NetFXHarmonics Blog
&lt;/h3&gt; &lt;br /&gt;&lt;b&gt;DevServer Announcement and Overview&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released" class="externalLink"&gt;http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
As a Training Tool
&lt;/h3&gt; &lt;br /&gt;NetFXHarmonics DevServer is built on .NET 3.5 using WPF, WCF, and LINQ.  DevServer could be used as a training tool to help teach WPF binding, WCF communication, and LINQ collection transformation and querying.  See the &amp;quot;As a Training Tool&amp;quot; in the &amp;quot;DevServer Announcement and Overview&amp;quot; blog entry for more detailed information how using DevServer as a training tool.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Screenshot
&lt;/h3&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=DevServer&amp;amp;DownloadId=31627" alt="OriginalDevServerThumb.png" /&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>quantum00</author><pubDate>Sun, 06 Apr 2008 01:24:36 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080406012436A</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/DevServer/Wiki/View.aspx?title=Home&amp;version=8</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;NetFXHarmonics DevServer is a web server hosting environment built on WPF and WCF technologies that allows multiple instances of Cassini-like web servers to run in parallel.  DevServer also includes tracing capabilities for monitoring requests and responses, request filtering, automatic ViewState and ControlState parsing, visually enhanced HTTP status codes, IP binding modes for both local-only as well as remote access, and easy to use XML configuration.
&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
NetFXHarmonics Blog
&lt;/h3&gt; &lt;br /&gt;&lt;b&gt;DevServer Announcement and Overview&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released" class="externalLink"&gt;http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
As a Training Tool
&lt;/h3&gt; &lt;br /&gt;NetFXHarmonics DevServer is built on .NET 3.5 using WPF, WCF, and LINQ.  DevServer could be used as a training tool to help teach WPF binding, WCF communication, and LINQ collection transformation and querying.  See the &amp;quot;As a Training Tool&amp;quot; in the &amp;quot;DevServer Announcement and Overview&amp;quot; blog entry for more detailed information how using DevServer as a training tool.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Screenshot
&lt;/h3&gt; &lt;br /&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Screenshot | OriginalDevServerThumb]&lt;br /&gt;
&lt;/div&gt;</description><author>quantum00</author><pubDate>Sun, 06 Apr 2008 01:23:31 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080406012331A</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/DevServer/Wiki/View.aspx?title=Home&amp;version=7</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;NetFXHarmonics DevServer is a web server hosting environment built on WPF and WCF technologies that allows multiple instances of Cassini-like web servers to run in parallel.  DevServer also includes tracing capabilities for monitoring requests and responses, request filtering, automatic ViewState and ControlState parsing, visually enhanced HTTP status codes, IP binding modes for both local-only as well as remote access, and easy to use XML configuration.
&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
NetFXHarmonics Blog
&lt;/h3&gt; &lt;br /&gt;&lt;b&gt;DevServer Announcement and Overview&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released" class="externalLink"&gt;http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
As a Training Tool
&lt;/h3&gt; &lt;br /&gt;NetFXHarmonics DevServer is built on .NET 3.5 using WPF, WCF, and LINQ.  DevServer could be used as a training tool to help teach WPF binding, WCF communication, and LINQ collection transformation and querying.  See the &amp;quot;As a Training Tool&amp;quot; in the &amp;quot;DevServer Announcement and Overview&amp;quot; blog entry for more detailed information how using DevServer as a training tool.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Screenshot
&lt;/h3&gt; &lt;br /&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Screenshot | image_thumb.png]&lt;br /&gt;
&lt;/div&gt;</description><author>quantum00</author><pubDate>Sun, 06 Apr 2008 01:22:09 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080406012209A</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/DevServer/Wiki/View.aspx?title=Home&amp;version=6</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;NetFXHarmonics DevServer is a web server hosting environment built on WPF and WCF technologies that allows multiple instances of Cassini-like web servers to run in parallel.  DevServer also includes tracing capabilities for monitoring requests and responses, request filtering, automatic ViewState and ControlState parsing, visually enhanced HTTP status codes, IP binding modes for both local-only as well as remote access, and easy to use XML configuration.
&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
NetFXHarmonics Blog
&lt;/h3&gt; &lt;br /&gt;&lt;b&gt;DevServer Announcement and Overview&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released" class="externalLink"&gt;http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
As a Training Tool
&lt;/h3&gt; &lt;br /&gt;NetFXHarmonics DevServer is built on .NET 3.5 using WPF, WCF, and LINQ.  DevServer could be used as a training tool to help teach WPF binding, WCF communication, and LINQ collection transformation and querying.  See the &amp;quot;As a Training Tool&amp;quot; in the &amp;quot;DevServer Announcement and Overview&amp;quot; blog entry for more detailed information how using DevServer as a training tool.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Screenshot
&lt;/h3&gt; &lt;br /&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:image_thumb.png | Screenshot]&lt;br /&gt;
&lt;/div&gt;</description><author>quantum00</author><pubDate>Sun, 06 Apr 2008 01:21:09 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080406012109A</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/DevServer/Wiki/View.aspx?title=Home&amp;version=5</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;NetFXHarmonics DevServer is a web server hosting environment built on WPF and WCF technologies that allows multiple instances of Cassini-like web servers to run in parallel.  DevServer also includes tracing capabilities for monitoring requests and responses, request filtering, automatic ViewState and ControlState parsing, visually enhanced HTTP status codes, IP binding modes for both local-only as well as remote access, and easy to use XML configuration.
&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
NetFXHarmonics Blog
&lt;/h3&gt; &lt;br /&gt;&lt;b&gt;DevServer Announcement and Overview&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released" class="externalLink"&gt;http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
As a Training Tool
&lt;/h3&gt; &lt;br /&gt;NetFXHarmonics DevServer is built on .NET 3.5 using WPF, WCF, and LINQ.  DevServer could be used as a training tool to help teach WPF binding, WCF communication, and LINQ collection transformation and querying.  See the &amp;quot;As a Training Tool&amp;quot; in the &amp;quot;DevServer Announcement and Overview&amp;quot; blog entry for more detailed information how using DevServer as a training tool.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Screen Shot
&lt;/h3&gt; &lt;br /&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:http://www.netfxharmonics.com/Images/WindowsLiveWriter/NetFXHarmonicsDevServerReleased_F35B/image_thumb.png]&lt;br /&gt;
&lt;/div&gt;</description><author>quantum00</author><pubDate>Sun, 06 Apr 2008 01:19:47 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080406011947A</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/DevServer/Wiki/View.aspx?title=Home&amp;version=4</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;NetFXHarmonics DevServer is a web server hosting environment built on WPF and WCF technologies that allows multiple instances of Cassini-like web servers to run in parallel.  DevServer also includes tracing capabilities for monitoring requests and responses, request filtering, automatic ViewState and ControlState parsing, visually enhanced HTTP status codes, IP binding modes for both local-only as well as remote access, and easy to use XML configuration.
&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
NetFXHarmonics Blog
&lt;/h3&gt; &lt;br /&gt;&lt;b&gt;DevServer Announcement and Overview&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released" class="externalLink"&gt;http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
As a Training Tool
&lt;/h3&gt; &lt;br /&gt;NetFXHarmonics DevServer is built on .NET 3.5 using WPF, WCF, and LINQ.  DevServer could be used as a training tool to help teach WPF binding, WCF communication, and LINQ collection transformation and querying.  See the &amp;quot;As a Training Tool&amp;quot; in the &amp;quot;DevServer Announcement and Overview&amp;quot; blog entry for more detailed information how using DevServer as a training tool.&lt;br /&gt;
&lt;/div&gt;</description><author>quantum00</author><pubDate>Sun, 06 Apr 2008 01:16:25 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080406011625A</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/DevServer/Wiki/View.aspx?title=Home&amp;version=3</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;NetFXHarmonics DevServer is a web server hosting environment built on WPF and WCF technologies that allows multiple instances of Cassini-like web servers to run in parallel.  DevServer also includes tracing capabilities for monitoring requests and responses, request filtering, automatic ViewState and ControlState parsing, visually enhanced HTTP status codes, IP binding modes for both local-only as well as remote access, and easy to use XML configuration.
&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
NetFXHarmonics Blog
&lt;/h3&gt; &lt;br /&gt;&lt;b&gt;DevServer Announcement and Overview&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released" class="externalLink"&gt;http://www.netfxharmonics.com/2008/04/NetFXHarmonics-DevServer-Released&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>quantum00</author><pubDate>Sun, 06 Apr 2008 01:08:24 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080406010824A</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/DevServer/Wiki/View.aspx?title=Home&amp;version=2</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;NetFXHarmonics DevServer is a web server hosting environment built on WPF and WCF technologies that allows multiple instances of Cassini-like web servers to run in parallel.  DevServer also includes tracing capabilities for monitoring both requests and responses, automatic ViewState and ControlState parsing, visually enhanced HTTP status codes, IP binding modes for both local-only as well as remote access, and easy to use XML configuration.
&lt;br /&gt;
&lt;/div&gt;</description><author>quantum00</author><pubDate>Mon, 24 Mar 2008 23:14:21 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080324111421P</guid></item></channel></rss>