<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.iis.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:cs="http://blogs.iis.net/"><channel><title>Search results matching tag 'IIS Topics'</title><link>http://blogs.iis.net/search/SearchResults.aspx?o=DateDescending&amp;tag=IIS+Topics&amp;orTags=0</link><description>Search results matching tag 'IIS Topics'</description><dc:language>en-US</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Using URL Rewrite with Web Site Testing</title><link>http://blogs.iis.net/robert_mcmurray/archive/2009/10/13/using-url-rewrite-with-web-site-testing.aspx</link><pubDate>Tue, 13 Oct 2009 22:49:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3456699</guid><dc:creator>Anonymous</dc:creator><cs:applicationKey>robert_mcmurray</cs:applicationKey><description>&lt;P&gt;Recently I ran into an interesting situation when I was rolling out a new web-based application. I had tested it on my development server, and because it was a rather complex application I wanted to test it on my production server before making it live. I had already set up a placeholder web site with a home page that announced the new site as "Coming Soon," and I had some of the supporting infrastructure configured for the placeholder site: database connections, permissions, FTP bindings, etc.&lt;/P&gt;
&lt;P&gt;In order to test the new site, I could have set up a temporary web site by duplicating the placeholder web site, running my tests, and then deleting the temporary site after I was comfortable that everything was working in production. Or I could simply remove the placeholder web site and replace it with the temporary web site once the testing phase was over. I didn't like either of those ideas, so I came up with much easier solution using URL Rewrite. Here are the details:&lt;/P&gt;
&lt;P&gt;First, I added an additional host header binding to the placeholder web site with a temporary name that only I knew about. Since I use a wildcard A record for my DNS, I can add any additional prefixes to my domain name without registering those as CNAME records in DNS. (This makes the temporary name more difficult to discover.) For example, if I created an A record for "*.example.com," then I could use "temp.example.com" without any changes to DNS.&lt;/P&gt;
&lt;P&gt;Second, I added a URL Rewrite rule that checked all inbound requests by using the following logic:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;If the request was for "temp.example.com", then URL Rewrite would allow regular access the web site.&lt;/LI&gt;
&lt;LI&gt;If the request was for any other domain name and any web page other than "ComingSoon.htm", then URL Rewrite would redirect those requests to "/ComingSoon.htm".&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Here's what the URL Rewrite rule looked like in my web.config file:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; COLOR: black" id=codeSnippet&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;system.webServer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;  &lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;rewrite&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;rules&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;      &lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;clear&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;/&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;      &lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;rule&lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;name&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="Temporary Redirect"
         &lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;patternSyntax&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="Wildcard"
         &lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;stopProcessing&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="true"&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;        &lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;match&lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;url&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="ComingSoon.htm"
         &lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;negate&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="true"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;/&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;        &lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;conditions&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;          &lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;add&lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;input&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="{HTTP_HOST}"
           &lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;negate&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="true"
           &lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;pattern&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="temp.example.com"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;/&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;        &lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;conditions&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;        &lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;action&lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;type&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="Redirect"
         &lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;url&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="/ComingSoon.htm"
          &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;appendQueryString&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="false"
         &lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;redirectType&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="Found"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;/&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;      &lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;rule&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;rules&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;  &lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;rewrite&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;system.webServer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;This allowed me to test the web site on my production server by using a temporary domain name that no one else knew about, and sending every other HTTP request to the "Coming Soon" announcement page. After a few days of putting the web site through some test passes, all that I needed to do was to remove the URL Rewrite rule and the site was officially live.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9906874" width="1" height="1"&gt;</description></item><item><title>Creating a Microsoft Access Provider for IIS Database Manager</title><link>http://blogs.iis.net/robert_mcmurray/archive/2009/09/25/creating-a-microsoft-access-provider-for-iis-database-manager.aspx</link><pubDate>Fri, 25 Sep 2009 22:22:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3426214</guid><dc:creator>Anonymous</dc:creator><cs:applicationKey>robert_mcmurray</cs:applicationKey><description>&lt;P&gt;Following up on my &lt;A href="http://blogs.msdn.com/robert_mcmurray/archive/2009/09/24/database-manager-api-topics-on-msdn.aspx" target=_blank mce_href="http://blogs.msdn.com/robert_mcmurray/archive/2009/09/24/database-manager-api-topics-on-msdn.aspx"&gt;last blog post&lt;/A&gt; about the API set for the &lt;A href="http://www.iis.net/extensions/DatabaseManager" target=_blank mce_href="http://www.iis.net/extensions/DatabaseManager"&gt;IIS Database Manager&lt;/A&gt;, I have something of a secret to let you in on - you can use the code samples in several of those API documents to create a fully functional provider for Microsoft Access databases. I would never use an Access database in a production environment, but having an Access provider has had some great benefits for me from a test perspective. I often use Access databases for test projects, and using the IIS Database Manager to manage the Access databases on my test systems means that I don't need to install Microsoft Access on any of my test servers.&lt;/P&gt;
&lt;P&gt;That being said, as I was writing the API documentation I needed to create something of value to test my code samples. Since the Database Manager feature team was already creating database providers for SQL Server and MySQL, it seemed to me like Microsoft Access was the only other readily-accessible database that I could use for my samples. I mentioned in my last post that Saad Ladki was the Program Manager for Database Manager; Saad had started work on an Access provider at one point, but he abandoned the provider as his schedule grew tighter, so I took over that project so I could use it for the API samples.&lt;/P&gt;
&lt;P&gt;With that in mind, here's what you need to do to create a Microsoft Access provider for the IIS Database Manager:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Create a new class project named "AccessDatabase" in Visual Studio&lt;/LI&gt;
&lt;LI&gt;Add project references for: 
&lt;UL&gt;
&lt;LI&gt;System.Configuration&lt;/LI&gt;
&lt;LI&gt;Microsoft.Web.Management.DatabaseManager&lt;BR&gt;&lt;B&gt;Note&lt;/B&gt;: This may require adding a reference path for your project, such as "C:\Windows\assembly\GAC_MSIL\Microsoft.Web.Management.DatabaseManager\1.0.1.0__31bf3856ad364e35", where "C:" is your operating system drive.&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;Open the class in the editor, remove the existing code, and insert the following empty class:&lt;PRE style="BACKGROUND-COLOR: #ffffff; COLOR: black"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System;
&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.Collections;
&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.Collections.Generic;
&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.Configuration.Provider;
&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.Data;
&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.Data.Common;
&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.Diagnostics;
&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.IO;
&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.Linq;
&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.Text;
&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.Reflection;
&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.Data.OleDb;
&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; Microsoft.Web.Management.DatabaseManager;

&lt;SPAN style="COLOR: #0000ff"&gt;namespace&lt;/SPAN&gt; AccessDatabase
{
    &lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2992ad"&gt;AccessProvider&lt;/SPAN&gt; :
        &lt;SPAN style="COLOR: #2992ad"&gt;DatabaseProvider&lt;/SPAN&gt;,
        &lt;SPAN style="COLOR: #2992ad"&gt;IDbTableManager&lt;/SPAN&gt;,
        &lt;SPAN style="COLOR: #2992ad"&gt;IDbTableDataManager&lt;/SPAN&gt;,
        &lt;SPAN style="COLOR: #2992ad"&gt;IDbViewManager&lt;/SPAN&gt;,
        &lt;SPAN style="COLOR: #2992ad"&gt;IDbBackupManager&lt;/SPAN&gt;,
        &lt;SPAN style="COLOR: #2992ad"&gt;IDbRestoreManager&lt;/SPAN&gt;
    {

    }
}&lt;/PRE&gt;&lt;/LI&gt;
&lt;LI&gt;Copy the code samples from the following MSDN topics into the class; note that some of the utility methods in the code samples will be duplicated so you'll have to remove the duplicate methods: 
&lt;UL&gt;
&lt;LI&gt;&lt;U&gt;DatabaseProvider&lt;/U&gt; 
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.databaseprovider.connectionstringarguments.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.databaseprovider.connectionstringarguments.aspx"&gt;ConnectionStringArguments Property&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.databaseprovider.calculateconnectionstring.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.databaseprovider.calculateconnectionstring.aspx"&gt;CalculateConnectionString Method&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee255810.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee255810.aspx"&gt;ExecuteQuery Method&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.databaseprovider.testconnection.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.databaseprovider.testconnection.aspx"&gt;TestConnection Method&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.databaseprovider.getdatabasehostname.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.databaseprovider.getdatabasehostname.aspx"&gt;GetDatabaseHostName Method&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.databaseprovider.getservertypes.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.databaseprovider.getservertypes.aspx"&gt;GetServerTypes Method&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.databaseprovider.getdatabaseinfo.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.databaseprovider.getdatabaseinfo.aspx"&gt;GetDatabaseInfo Method&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.databaseprovider.verifydependencies.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.databaseprovider.verifydependencies.aspx"&gt;VerifyDependencies Method&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;U&gt;IDbTableManager&lt;/U&gt; 
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtablemanager.createtable.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtablemanager.createtable.aspx"&gt;CreateTable Method&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtablemanager.droptable.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtablemanager.droptable.aspx"&gt;DropTable Method&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtablemanager.edittable.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtablemanager.edittable.aspx"&gt;EditTable Method&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtablemanager.getprimarykey.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtablemanager.getprimarykey.aspx"&gt;GetPrimaryKey Method&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtablemanager.gettableinfo.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtablemanager.gettableinfo.aspx"&gt;GetTableInfo Method&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtablemanager.gettables.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtablemanager.gettables.aspx"&gt;GetTables Method&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;U&gt;IDbTableDataManager&lt;/U&gt; 
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtabledatamanager.deleterow.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtabledatamanager.deleterow.aspx"&gt;DeleteRow Method&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtabledatamanager.editrow.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtabledatamanager.editrow.aspx"&gt;EditRow Method&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtabledatamanager.getdata.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtabledatamanager.getdata.aspx"&gt;GetData Method&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtabledatamanager.insertrow.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbtabledatamanager.insertrow.aspx"&gt;InsertRow Method&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;U&gt;IDbViewManager&lt;/U&gt; 
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbviewmanager.createview.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbviewmanager.createview.aspx"&gt;CreateView Method&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbviewmanager.dropview.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbviewmanager.dropview.aspx"&gt;DropView Method&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbviewmanager.editview.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbviewmanager.editview.aspx"&gt;EditView Method&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbviewmanager.getviews.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbviewmanager.getviews.aspx"&gt;GetViews Method&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;U&gt;IDbBackupManager&lt;/U&gt; 
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbbackupmanager.createbackup.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbbackupmanager.createbackup.aspx"&gt;CreateBackup Method&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;U&gt;IDbRestoreManager&lt;/U&gt; 
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbrestoremanager.restorebackup.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.idbrestoremanager.restorebackup.aspx"&gt;RestoreBackup Method&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;Save, compile, sign, and GAC the provider. For more information about using the Gacutil.exe tool, see the following topic on Microsoft the MSDN Web site: 
&lt;BLOCKQUOTE&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ex0ss12c(VS.80).aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ex0ss12c(VS.80).aspx"&gt;Global Assembly Cache Tool (Gacutil.exe)&lt;/A&gt;&lt;/BLOCKQUOTE&gt;&lt;/LI&gt;
&lt;LI&gt;Follow the instructions in the &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.aspx"&gt;Microsoft.Web.Management.DatabaseManager Namespace&lt;/A&gt; topic to add the following entry to your administration.config file, which will register the provider for IIS Manager:&lt;PRE style="BACKGROUND-COLOR: #ffffff; COLOR: black"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;provider&lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;name&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="Access Provider"
  &lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;providerName&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="System.Data.OleDb"
  &lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;type&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="AccessDatabase.AccessProvider,AccessDatabase,Version=1.0.0.0,Culture=neutral,PublicKeyToken=426f62526f636b73"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;
   &lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;databaseBackup&lt;/SPAN&gt;
      &lt;SPAN style="COLOR: #ff0000"&gt;backupEnabled&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="true"&lt;/SPAN&gt;
      &lt;SPAN style="COLOR: #ff0000"&gt;restoreEnabled&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="true"&lt;/SPAN&gt;
      &lt;SPAN style="COLOR: #ff0000"&gt;backupPath&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="C:\backups"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;/&amp;gt;&lt;/SPAN&gt;
&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;provider&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;B&gt;Note&lt;/B&gt;: You will need to update the PublicKeyToken with the public key token from your assembly.&lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;Add an OLEDB connection string for your Access database; the following web.config sample shows what that might look like:&lt;PRE style="BACKGROUND-COLOR: #ffffff; COLOR: black"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;configuration&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;connectionStrings&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;add&lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;name&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="Northwind"&lt;/SPAN&gt;
      &lt;SPAN style="COLOR: #ff0000"&gt;providerName&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="System.Data.OleDb"&lt;/SPAN&gt;
      &lt;SPAN style="COLOR: #ff0000"&gt;connectionString&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\inetpub\wwwroot\App_Data\Northwind.mdb;"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;/&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;connectionStrings&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;configuration&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;B&gt;Note&lt;/B&gt;: Since the code samples were all written using OLEDB, not ODBC, you will need to make sure that you use an OLEDB connection string like my example.&lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;Open the IIS Manager and open the Database Manager for the site where you added the connection string. You should now be able to manage the tables and views for your Access database, as well as backing up and restoring your database.&lt;/LI&gt;&lt;/UL&gt;
&lt;H3&gt;Additional Notes&lt;/H3&gt;
&lt;H4&gt;Creating Database Backups&lt;/H4&gt;
&lt;P&gt;Even though I wrote my provider to implement backing up and restoring databases, this functionality is purely optional - you could easily remove the &lt;SPAN style="COLOR: #2992ad"&gt;IDbBackupManager&lt;/SPAN&gt; and &lt;SPAN style="COLOR: #2992ad"&gt;IDbRestoreManager&lt;/SPAN&gt; implementations from the class and remove the &lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;databaseBackup&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt; element from administration.config.&lt;/P&gt;
&lt;H4&gt;OLEDB Errors When Saving JOIN/ORDER BY Views (Queries)&lt;/H4&gt;
&lt;P&gt;Unfortunately, there is one unexpected OLEDB problem with Microsoft Access databases that I ran into that I could not work around. When you attempt to save a view (query) that contains both &lt;CODE style="COLOR: #0000ff"&gt;JOIN&lt;/CODE&gt; statements and &lt;CODE style="COLOR: #0000ff"&gt;ORDER BY&lt;/CODE&gt; statements, you will receive an error that states "Only simple SELECT queries are allowed in VIEWS."&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;IMG src="http://y7b40a.blu.livefilestore.com/y1pjFQ4CUsjEl2QqYKBlpvHBm0umh-Sr24a2Z-GifS8O97pPE7nqXznC_8Bdz1q_4L6ZE_YPl4uaEIs3kR33m8LuBDiFfbvMoln/SimpleSelectQueries.jpg" width=338 height=145 mce_src="http://y7b40a.blu.livefilestore.com/y1pjFQ4CUsjEl2QqYKBlpvHBm0umh-Sr24a2Z-GifS8O97pPE7nqXznC_8Bdz1q_4L6ZE_YPl4uaEIs3kR33m8LuBDiFfbvMoln/SimpleSelectQueries.jpg"&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;As long as the SQL code is syntactically correct you can execute the query, but you cannot save it. If a query that contains both &lt;CODE style="COLOR: #0000ff"&gt;JOIN&lt;/CODE&gt; statements and &lt;CODE style="COLOR: #0000ff"&gt;ORDER BY&lt;/CODE&gt; statements has already been created in Microsoft Access, you can open it and make changes, but you will not be able to save those changes back to the database.&lt;/P&gt;
&lt;P&gt;For example, the following SQL code will cause the error to occur:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; COLOR: black"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;SELECT&lt;/SPAN&gt; Categories.CategoryName, Products.ProductName
&lt;SPAN style="COLOR: #0000ff"&gt;FROM&lt;/SPAN&gt; Products &lt;SPAN style="COLOR: #0000ff"&gt;INNER&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;JOIN&lt;/SPAN&gt; Categories &lt;SPAN style="COLOR: #0000ff"&gt;ON&lt;/SPAN&gt; Products.CategoryID = Categories.CategoryID
&lt;SPAN style="COLOR: #0000ff"&gt;ORDER&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;BY&lt;/SPAN&gt; Categories.CategoryName, Products.ProductName;&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;While the following code will not cause the error:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; COLOR: black"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;SELECT&lt;/SPAN&gt; Categories.CategoryName, Products.ProductName
&lt;SPAN style="COLOR: #0000ff"&gt;FROM&lt;/SPAN&gt; Products &lt;SPAN style="COLOR: #0000ff"&gt;INNER&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;JOIN&lt;/SPAN&gt; Categories &lt;SPAN style="COLOR: #0000ff"&gt;ON&lt;/SPAN&gt; Products.CategoryID = Categories.CategoryID;&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Even though the SQL code is syntactically correct and will execute without any problems, the error occurs at the OLEDB layer when the provider executes the &lt;CODE style="COLOR: #0000ff"&gt;CREATE VIEW&lt;/CODE&gt; statement to save the view to the database. This appears to be an unfortunate and irresolvable OLEDB limitation when you are using an Access database. When you are faced with such a situation, you will need to open the database in Microsoft Access to save the query.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9899735" width="1" height="1"&gt;</description></item><item><title>Database Manager API Topics on MSDN</title><link>http://blogs.iis.net/robert_mcmurray/archive/2009/09/24/database-manager-api-topics-on-msdn.aspx</link><pubDate>Thu, 24 Sep 2009 18:16:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3424104</guid><dc:creator>Anonymous</dc:creator><cs:applicationKey>robert_mcmurray</cs:applicationKey><description>&lt;P&gt;Today Microsoft released version 1.0 of the &lt;A href="http://www.iis.net/extensions/DatabaseManager" target=_blank mce_href="http://www.iis.net/extensions/DatabaseManager"&gt;IIS Database Manager&lt;/A&gt;, which enables you to manage local and remote SQL Server or MySQL databases through the IIS Manager. I cannot stress enough how this module has rapidly become one of my favorite extensions for IIS Manager. There are many times when I need to access the data in one of my databases where opening the database management tool would be inconvenient or impossible. (For example, when I am working remotely, or when I don't have the database management tools installed.) In these situations, the Database Manager has been worth its weight in gold.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://kcqorw.blu.livefilestore.com/y1p3SKuJU-n7sGoMIdJtUXyKBtJ9WL-5bXR3digSGCObRXLo5Hi3rmeiGNscNL3Jnl4dwQDaDKAxEFwd3ThxFAOQFQDjUkfgjGp/Database_Manager_UI.jpg" target=_blank mce_href="http://kcqorw.blu.livefilestore.com/y1p3SKuJU-n7sGoMIdJtUXyKBtJ9WL-5bXR3digSGCObRXLo5Hi3rmeiGNscNL3Jnl4dwQDaDKAxEFwd3ThxFAOQFQDjUkfgjGp/Database_Manager_UI.jpg"&gt;&lt;IMG src="http://kcqorw.blu.livefilestore.com/y1pEMF4wLCYxxLX4u0uUdhLLSn5KIsJkFFgbhxtMHceCBRSOZku4LGMO-lI3hnB3aPxwO7qHgyVpNtu1rcNZEi-vp8-ihWb4dhg/DatabaseManager_small.jpg" width=640 height=467 mce_src="http://kcqorw.blu.livefilestore.com/y1pEMF4wLCYxxLX4u0uUdhLLSn5KIsJkFFgbhxtMHceCBRSOZku4LGMO-lI3hnB3aPxwO7qHgyVpNtu1rcNZEi-vp8-ihWb4dhg/DatabaseManager_small.jpg"&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Another great feature of the IIS Database Manager is that it is extensible, like every other part of IIS these days, meaning that you can create your own database providers. Following up on that thought, in addition to all of the walkthroughs and blog posts that I've been writing about FTP and WebDAV over the past several months, I've also been working on documenting the API set for the &lt;A href="http://www.iis.net/extensions/DatabaseManager" target=_blank mce_href="http://www.iis.net/extensions/DatabaseManager"&gt;IIS Database Manager&lt;/A&gt;, and all of those topics have been published on the MSDN Web site under the following URL:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.aspx" mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.databasemanager.aspx"&gt;Microsoft.Web.Management.DatabaseManager Namespace&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I would be remiss if I didn't give credit where it's due, so my special thanks go to:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;B&gt;The Database Manager Feature Team&lt;/B&gt; - the entire team did some great work: 
&lt;UL&gt;
&lt;LI&gt;Saad, &lt;A href="http://blogs.iis.net/bdela/" target=_blank mce_href="http://blogs.iis.net/bdela/"&gt;Brian&lt;/A&gt;, &lt;A href="http://blogs.iis.net/rlucero/" target=_blank mce_href="http://blogs.iis.net/rlucero/"&gt;Bob&lt;/A&gt;, Tim, Andrew, Nitasha, Richard, &lt;A href="http://blogs.msdn.com/carlosag/" target=_blank mce_href="http://blogs.msdn.com/carlosag/"&gt;Carlos&lt;/A&gt;, Madhur, &lt;A href="http://blogs.iis.net/nazim/" target=_blank mce_href="http://blogs.iis.net/nazim/"&gt;Nazim&lt;/A&gt;, Ivan, Crystal, Faith, Diana, Pete, Rich, Raul&lt;/LI&gt;
&lt;LI&gt;That being said, there are two people that I'd like to call our for their additional assistance: 
&lt;UL&gt;
&lt;LI&gt;&lt;B&gt;Saad Ladki&lt;/B&gt; - Saad was the Program Manager for the Database Manager. I have to give credit where it's due and say that my job would have been a lot harder if Saad hadn't done the initial research for some of my code samples.&lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;&lt;A href="http://blogs.iis.net/bdela/" mce_href="http://blogs.iis.net/bdela/"&gt;Brian Delahunty&lt;/A&gt;&lt;/B&gt; - Brian was my principal contact on the feature team whenever I needed help or backed myself into a corner. Brian was very accommodating when I suggested changes, and he always had great explanations when something needed clarification.&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;&lt;A href="http://www.microsoft.com/mspress/" mce_href="http://www.microsoft.com/mspress/"&gt;Microsoft Press&lt;/A&gt;&lt;/B&gt; - I know that it seems like a gratuitous plug, but I spent dozens of hours going through my "&lt;A href="http://www.microsoft.com/mspress/books/2520.aspx" mce_href="http://www.microsoft.com/mspress/books/2520.aspx"&gt;Microsoft® OLE DB 2.0 Programmer's Reference and Data Access SDK&lt;/A&gt;" book looking up the various parts of the OLEDB schema. That book was simply indispensable while I was writing my API samples.&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9899083" width="1" height="1"&gt;</description></item><item><title>eWeek Reviews for IIS 7.5 and FTP 7.5</title><link>http://blogs.iis.net/robert_mcmurray/archive/2009/09/23/eweek-reviews-for-iis-7-5-and-ftp-7-5.aspx</link><pubDate>Wed, 23 Sep 2009 22:45:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3422081</guid><dc:creator>Anonymous</dc:creator><cs:applicationKey>robert_mcmurray</cs:applicationKey><description>&lt;P&gt;One of my coworkers, Vijay Sen, just forwarded the following eWeek review of IIS 7.5 to me:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://www.eweek.com/c/a/Windows/REVIEW-Microsoft-IIS-75-Improves-Management-Deployment-Options-822018/" target=_blank mce_href="http://www.eweek.com/c/a/Windows/REVIEW-Microsoft-IIS-75-Improves-Management-Deployment-Options-822018/"&gt;http://www.eweek.com/c/a/Windows/REVIEW-Microsoft-IIS-75-Improves-Management-Deployment-Options-822018/&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The review was written by &lt;A href="http://www.eweek.com/cp/bio/Jim-Rapoza/" target=_blank mce_href="http://www.eweek.com/cp/bio/Jim-Rapoza/"&gt;Jim Rapoza&lt;/A&gt;, and he said some great things about IIS 7.5, which ships with both Windows Server 2008 R2 and Windows 7 client. But what really made my day was the following things that he said about FTP 7.5:&lt;/P&gt;
&lt;BLOCKQUOTE style="BACKGROUND-COLOR: #eeeeee; COLOR: #000000"&gt;
&lt;P&gt;&lt;EM&gt;Another welcome change in IIS 7.5 is the elevation of FTP as a full-fledged part of the server. In previous versions, setup and management of an FTP server in IIS were done pretty much separately from Web server management. In IIS 7.5, FTP administration is fully integrated into the IIS Management Console.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;I found this to be a very good implementation of FTP, making it possible to quickly set up secure FTP servers and tie them to my Websites. Especially nice was the ability to easily use virtual host names for the FTP sites. All in all, the FTP implementation in IIS 7.5 is one of the best I’ve seen, even when compared with dedicated FTP server products.&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;It’s great to see all of our hard work being recognized!&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/regular_smile.gif"&gt;&lt;/P&gt;
&lt;P&gt;My thanks once again to everyone on the FTP and IIS feature teams that helped make this version of the FTP service: &lt;A href="http://blogs.iis.net/jaroslad/" mce_href="http://blogs.iis.net/jaroslad/"&gt;Jaroslav&lt;/A&gt;, Emily, &lt;A href="http://blogs.msdn.com/danielvl/" mce_href="http://blogs.msdn.com/danielvl/"&gt;Daniel&lt;/A&gt;, Umer, &lt;A href="http://blogs.iis.net/suDt/" mce_href="http://blogs.iis.net/suDt/"&gt;Suditi&lt;/A&gt;, Ciprian, Jeong, &lt;A href="http://blogs.iis.net/davcox/" mce_href="http://blogs.iis.net/davcox/"&gt;Dave&lt;/A&gt;, Andrew, &lt;A href="http://blogs.msdn.com/carlosag/" mce_href="http://blogs.msdn.com/carlosag/"&gt;Carlos&lt;/A&gt;, &lt;A href="http://blogs.iis.net/bdela/" mce_href="http://blogs.iis.net/bdela/"&gt;Brian&lt;/A&gt;, &lt;A href="http://blogs.iis.net/wadeh/" mce_href="http://blogs.iis.net/wadeh/"&gt;Wade&lt;/A&gt;, Ulad, &lt;A href="http://blogs.iis.net/nazim/" mce_href="http://blogs.iis.net/nazim/"&gt;Nazim&lt;/A&gt;, Reagan, Claudia, Rick, Tim, &lt;A href="http://blogs.iis.net/TobinTitus/" mce_href="http://blogs.iis.net/TobinTitus/"&gt;Tobin&lt;/A&gt;, Kern, Jenny, Nitasha, Venkat, Vijay. (I hope that I didn't leave anyone out!)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9898705" width="1" height="1"&gt;</description></item><item><title>FTP 7.5 Extensibility and Visual Studio Express Editions</title><link>http://blogs.iis.net/robert_mcmurray/archive/2009/09/17/ftp-7-5-extensibility-and-visual-studio-express-editions.aspx</link><pubDate>Thu, 17 Sep 2009 18:19:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3411791</guid><dc:creator>Anonymous</dc:creator><cs:applicationKey>robert_mcmurray</cs:applicationKey><description>&lt;P&gt;In earlier blog posts I have mentioned that I written the several walkthroughs to help developers get started writing providers for the FTP 7.5 service, all of which available on Microsoft's &lt;A href="http://learn.iis.net/" target=_blank mce_href="http://learn.iis.net/"&gt;learn.iis.net&lt;/A&gt; Web site under the "&lt;A href="http://learn.iis.net/page.aspx/590/developing-for-ftp-75/" target=_blank mce_href="http://learn.iis.net/page.aspx/590/developing-for-ftp-75/"&gt;Developing for FTP 7.5&lt;/A&gt;" section. In each of these walkthroughs I wrote the steps as if you were using Visual Studio 2008.&lt;/P&gt;
&lt;P&gt;Following up on that, I received a great question yesterday from a customer, Paul Dowdle, who wondered if it was possible to write an extensibility provider for the FTP 7.5 service using one of the Visual Studio Express Editions. By way of coincidence, I used to install Visual C# Express Edition on my laptop when I was traveling around the world to speak at events like &lt;A href="http://www.msteched.com/" target=_blank mce_href="http://www.msteched.com/"&gt;TechEd&lt;/A&gt;. I usually did this because the Express Edition took up less hard drive space than a full installation of Visual Studio, and I was only writing code in C# on my laptop.&lt;/P&gt;
&lt;P&gt;To answer Paul's question, the short answer is - yes, you can use Visual Studio Express Editions to develop custom providers for the FTP 7.5 service, with perhaps a few small changes from my walkthroughs.&lt;/P&gt;
&lt;P&gt;For example, if you look at my "&lt;A href="http://learn.iis.net/page.aspx/598/how-to-use-managed-code-c-to-create-a-simple-ftp-authentication-provider/" target=_blank&gt;How to Use Managed Code (C#) to Create a Simple FTP Authentication Provider&lt;/A&gt;" walkthrough, in the section that is titled "Step 1: Set up the Project Environment", there is an optional step 6 for adding a custom build event to register the DLL automatically in the Global Assembly Cache (GAC) on your development computer.&lt;/P&gt;
&lt;P&gt;When I installed Microsoft Visual C# 2008 Express Edition on a new computer, I didn't have the "%VS90COMNTOOLS%" environment variable or the "vsvars32.bat" file, so I had to update the custom build event to the following:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;net stop ftpsvc
"%ProgramFiles%\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe" /if "$(TargetPath)"
net start ftpsvc&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Once I made that change, the rest of the walkthrough worked as written.&lt;/P&gt;
&lt;P&gt;So, to reiterate my earlier statement - you can use Visual Studio Express Editions to develop custom providers for the FTP 7.5 service. My thanks to Paul for the great question!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9896442" width="1" height="1"&gt;</description></item><item><title>Hiding your FTP Server Type and Preventing Unauthorized Access</title><link>http://blogs.iis.net/robert_mcmurray/archive/2009/09/10/hiding-your-ftp-server-type-and-preventing-unauthorized-access.aspx</link><pubDate>Thu, 10 Sep 2009 20:05:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3398717</guid><dc:creator>Anonymous</dc:creator><cs:applicationKey>robert_mcmurray</cs:applicationKey><description>&lt;P&gt;As evidenced by my &lt;A href="http://learn.iis.net/page.aspx/673/how-to-use-managed-code-c-to-create-an-ftp-authentication-provider-with-dynamic-ip-restrictions" target=_blank mce_href="http://learn.iis.net/page.aspx/673/how-to-use-managed-code-c-to-create-an-ftp-authentication-provider-with-dynamic-ip-restrictions"&gt;How to Use Managed Code (C#) to Create an FTP Authentication Provider with Dynamic IP Restrictions&lt;/A&gt; walkthrough and my other FTP authentication extensibility walkthroughs, I spend a lot of time trying to find ways to prevent unauthorized access to my FTP server while still allowing valid users to have easy access to their site content. Today's blog discusses several of the ideas that I like to use on my FTP servers.&lt;/P&gt;
&lt;H4&gt;Preventing Unauthorized Access&lt;/H4&gt;
&lt;P&gt;To start things off, I globally disable FTP Basic Authentication on my server and I only use custom authentication providers. Since my FTP users do not have actual accounts on my server or my domain, that helps prevent access to my physical server. It was for this reason that I wrote the authentication provider that I discuss in my &lt;A href="http://learn.iis.net/page.aspx/669/how-to-use-managed-code-c-to-create-an-ftp-authentication-provider-using-an-xml-database/" target=_blank mce_href="http://learn.iis.net/page.aspx/669/how-to-use-managed-code-c-to-create-an-ftp-authentication-provider-using-an-xml-database/"&gt;How to Use Managed Code (C#) to Create an FTP Authentication Provider using an XML Database&lt;/A&gt; walkthrough; I can hand out accounts with FTP access for sites that are hosted on my servers, but those accounts are stored in an XML file and not in the security accounts database on my server or my domain.&lt;/P&gt;
&lt;P&gt;But there are other ways to help secure your FTP server. For example, I wrote an earlier blog post about &lt;A href="http://blogs.msdn.com/robert_mcmurray/archive/2008/12/17/ftp-clients-part-3-creating-a-global-listener-ftp-site.aspx" target=_blank mce_href="http://blogs.msdn.com/robert_mcmurray/archive/2008/12/17/ftp-clients-part-3-creating-a-global-listener-ftp-site.aspx"&gt;Creating a Global Listener FTP Site&lt;/A&gt;. On my servers I like to create a global listener site and disable all of the built-in authentication methods.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://y7b40a.blu.livefilestore.com/y1po9uDXUnvLNqdZK2dEzQWsLqaXG7inoFz_H881H8J--X-hwo41dWJ3_eHb50XzagqsV_RP9VLJiSFaDgHhAod6i0EICF7SzL2/global%20listener%20site.jpg" target=_blank mce_href="http://y7b40a.blu.livefilestore.com/y1po9uDXUnvLNqdZK2dEzQWsLqaXG7inoFz_H881H8J--X-hwo41dWJ3_eHb50XzagqsV_RP9VLJiSFaDgHhAod6i0EICF7SzL2/global%20listener%20site.jpg"&gt;&lt;IMG border=3 src="http://y7b40a.blu.livefilestore.com/y1po9uDXUnvLNqdZK2dEzQWsLqaXG7inoFz_H881H8J--X-hwo41dWJ3_eHb50XzagqsV_RP9VLJiSFaDgHhAod6i0EICF7SzL2/global%20listener%20site.jpg" width="50%" height="50%" mce_src="http://y7b40a.blu.livefilestore.com/y1po9uDXUnvLNqdZK2dEzQWsLqaXG7inoFz_H881H8J--X-hwo41dWJ3_eHb50XzagqsV_RP9VLJiSFaDgHhAod6i0EICF7SzL2/global%20listener%20site.jpg"&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Once that has been completed I add the custom authentication provider from my &lt;A href="http://learn.iis.net/page.aspx/673/how-to-use-managed-code-c-to-create-an-ftp-authentication-provider-with-dynamic-ip-restrictions" target=_blank mce_href="http://learn.iis.net/page.aspx/673/how-to-use-managed-code-c-to-create-an-ftp-authentication-provider-with-dynamic-ip-restrictions"&gt;How to Use Managed Code (C#) to Create an FTP Authentication Provider with Dynamic IP Restrictions&lt;/A&gt; walkthrough, but I don't create any accounts in the database - I just want to log and block the IP addresses of would-be attackers that are attempting to brute force their way into my server. Configuring the authentication options is accomplished through the &lt;B&gt;FTP Authentication&lt;/B&gt; feature in IIS Manager.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://y7b40a.blu.livefilestore.com/y1pnRv7mOVfWdg6rqBSthl45xDuJRnaqxFGxoknchIvknjoE68WE45N0Zte2euTZx2x-MmrZFCz5qtcASgMgOVM2Q/custom%20authentication.jpg" target=_blank mce_href="http://y7b40a.blu.livefilestore.com/y1pnRv7mOVfWdg6rqBSthl45xDuJRnaqxFGxoknchIvknjoE68WE45N0Zte2euTZx2x-MmrZFCz5qtcASgMgOVM2Q/custom%20authentication.jpg"&gt;&lt;IMG border=3 src="http://y7b40a.blu.livefilestore.com/y1pnRv7mOVfWdg6rqBSthl45xDuJRnaqxFGxoknchIvknjoE68WE45N0Zte2euTZx2x-MmrZFCz5qtcASgMgOVM2Q/custom%20authentication.jpg" width="50%" height="50%" mce_src="http://y7b40a.blu.livefilestore.com/y1pnRv7mOVfWdg6rqBSthl45xDuJRnaqxFGxoknchIvknjoE68WE45N0Zte2euTZx2x-MmrZFCz5qtcASgMgOVM2Q/custom%20authentication.jpg"&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Ever since I wrote and deployed my dynamic IP address restriction authentication provider, it has faithfully blocked dozens of would-be attackers.&lt;/P&gt;
&lt;H4&gt;Hiding your FTP Server Type&lt;/H4&gt;
&lt;P&gt;The next approach that I take is "Security through Obscurity", where I hide the easily recognizable signatures that identify my FTP server. The first step is to suppress the default banner and add a custom FTP banner. This is accomplished through the &lt;B&gt;FTP Messages&lt;/B&gt; feature in IIS Manager.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://y7b40a.blu.livefilestore.com/y1pkwDMrU610dFt0Ug2OZmoqQJtBHCvs7dpjxkg-5UGYdkKDuoaQ0RUwwriheMaJfsjw37mKU0-86yebF1hhmCNbA/messages.jpg" target=_blank mce_href="http://y7b40a.blu.livefilestore.com/y1pkwDMrU610dFt0Ug2OZmoqQJtBHCvs7dpjxkg-5UGYdkKDuoaQ0RUwwriheMaJfsjw37mKU0-86yebF1hhmCNbA/messages.jpg"&gt;&lt;IMG border=3 src="http://y7b40a.blu.livefilestore.com/y1pkwDMrU610dFt0Ug2OZmoqQJtBHCvs7dpjxkg-5UGYdkKDuoaQ0RUwwriheMaJfsjw37mKU0-86yebF1hhmCNbA/messages.jpg" width="50%" height="50%" mce_src="http://y7b40a.blu.livefilestore.com/y1pkwDMrU610dFt0Ug2OZmoqQJtBHCvs7dpjxkg-5UGYdkKDuoaQ0RUwwriheMaJfsjw37mKU0-86yebF1hhmCNbA/messages.jpg"&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Next, switch your directory listing style to Unix format. All FTP clients that I have tested understand this format, but it hides the fact that your server can do MS-DOS listings. Configuring your directory listing style is accomplished through the &lt;B&gt;FTP Directory Browsing &lt;/B&gt;feature in IIS Manager.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://y7b40a.blu.livefilestore.com/y1pF7d1kpsjM9VBLgUc2GuWw_Ukko9FUQU_JtdKrKgDFaiD-tTp3UoVfgsyNfltgAADqmM-m7JjlkL64edKdU09iQ/directory%20browsing.jpg" target=_blank mce_href="http://y7b40a.blu.livefilestore.com/y1pF7d1kpsjM9VBLgUc2GuWw_Ukko9FUQU_JtdKrKgDFaiD-tTp3UoVfgsyNfltgAADqmM-m7JjlkL64edKdU09iQ/directory%20browsing.jpg"&gt;&lt;IMG border=3 src="http://y7b40a.blu.livefilestore.com/y1pF7d1kpsjM9VBLgUc2GuWw_Ukko9FUQU_JtdKrKgDFaiD-tTp3UoVfgsyNfltgAADqmM-m7JjlkL64edKdU09iQ/directory%20browsing.jpg" width="50%" height="50%" mce_src="http://y7b40a.blu.livefilestore.com/y1pF7d1kpsjM9VBLgUc2GuWw_Ukko9FUQU_JtdKrKgDFaiD-tTp3UoVfgsyNfltgAADqmM-m7JjlkL64edKdU09iQ/directory%20browsing.jpg"&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;After implementing these changes, it might now resemble the following example FTP session when you log in with FTP:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;TABLE style="BACKGROUND-COLOR: #000000; COLOR: #ffffff"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;PRE&gt;CMD&amp;gt;ftp localhost

Connected to DESKTOP.domain.local.
220 Welcome to my server!
User (DESKTOP.domain.local:(none)): foobar
331 Password required for foobar.
Password:
230 User logged in.
ftp&amp;gt; dir
200 EPRT command successful.
125 Data connection already open; Transfer starting.
drwxrwxrwx   1 owner    group               0 Jan 22 11:45 App_Code
drwxrwxrwx   1 owner    group               0 Sep 10 10:32 App_Data
drwxrwxrwx   1 owner    group               0 Aug 17 13:35 bin
-rwxrwxrwx   1 owner    group             689 May  8  2008 iisstart.htm
-rwxrwxrwx   1 owner    group            2714 Jan 22 11:54 web.config
-rwxrwxrwx   1 owner    group          184946 May  8  2008 welcome.png
226 Transfer complete.
ftp: 418 bytes received in 0.02Seconds 83.00Kbytes/sec.
ftp&amp;gt; bye
221 Goodbye.

CMD&amp;gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The last step that I take is to block the FTP infrastructure commands &lt;B&gt;SYST&lt;/B&gt; and &lt;B&gt;FEAT&lt;/B&gt; on the global listener FTP site. These commands respectively display your operating system and list of FTP features. Blocking these commands helps to further obfuscate your server type from attackers.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Note&lt;/B&gt;: It is important that you block these two commands only on your global listener FTP site and not on your other FTP sites, because some FTP clients may depend on these commands in order to interact properly with your other FTP sites. That said, if you are working with a small set of FTP clients and none of them seem to have a problem with suppressing the &lt;B&gt;SYST&lt;/B&gt; command, you could probably suppress that globally. Most clients that I have tested seem to have no problem with that, especially if you are using Unix directory listings.&lt;/P&gt;
&lt;P&gt;In any event, you block the &lt;B&gt;SYST&lt;/B&gt; and &lt;B&gt;FEAT&lt;/B&gt; commands through the &lt;B&gt;FTP Request Filtering &lt;/B&gt;feature in IIS Manager.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://y7b40a.blu.livefilestore.com/y1pyRKiOzDCI1bIKmYbXQPEMbdt80pRsnwJ-mw83yyp9UUtFP3Li67R3egteQT6MDhD1JCF8ofHxKt8IWLZ0ZruBA/request%20filtering.jpg" target=_blank mce_href="http://y7b40a.blu.livefilestore.com/y1pyRKiOzDCI1bIKmYbXQPEMbdt80pRsnwJ-mw83yyp9UUtFP3Li67R3egteQT6MDhD1JCF8ofHxKt8IWLZ0ZruBA/request%20filtering.jpg"&gt;&lt;IMG border=3 src="http://y7b40a.blu.livefilestore.com/y1pyRKiOzDCI1bIKmYbXQPEMbdt80pRsnwJ-mw83yyp9UUtFP3Li67R3egteQT6MDhD1JCF8ofHxKt8IWLZ0ZruBA/request%20filtering.jpg" width="50%" height="50%" mce_src="http://y7b40a.blu.livefilestore.com/y1pyRKiOzDCI1bIKmYbXQPEMbdt80pRsnwJ-mw83yyp9UUtFP3Li67R3egteQT6MDhD1JCF8ofHxKt8IWLZ0ZruBA/request%20filtering.jpg"&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Now when you log in with FTP and attempt to use the &lt;B&gt;SYST&lt;/B&gt; and &lt;B&gt;FEAT&lt;/B&gt; commands, it should look like the following example FTP session:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;TABLE style="BACKGROUND-COLOR: #000000; COLOR: #ffffff" id=table1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;PRE&gt;CMD&amp;gt;ftp localhost

Connected to DESKTOP.domain.local.
220 Welcome to my server!
User (DESKTOP.domain.local:(none)): foobar
331 Password required for foobar.
Password:
230 User logged in.
ftp&amp;gt; quote SYST
500 'SYST': command not allowed.
ftp&amp;gt; quote FEAT
500 'FEAT': command not allowed.
ftp&amp;gt; bye
221 Goodbye.

CMD&amp;gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BLOCKQUOTE&gt;
&lt;H4&gt;Summary&lt;/H4&gt;
&lt;P&gt;The steps in this blog are certainly not all-inclusive, and I keep coming up with other ideas as time goes on, but following these steps should help to prevent unauthorized access to your FTP service. All of the normal warnings about using strong passwords, changing your passwords often, using SSL whenever you can, and keeping your hotfixes up-to-date will always apply.&lt;/P&gt;
&lt;P&gt;But that being said, one of the ways that I keep finding new things to block is by simply watching my FTP log files to see what attackers are trying to do. By using some of the techniques that I discuss in my &lt;A href="http://blogs.msdn.com/robert_mcmurray/archive/2009/06/11/using-logparser-with-ftp-7-x-sessions.aspx" target=_blank mce_href="http://blogs.msdn.com/robert_mcmurray/archive/2009/06/11/using-logparser-with-ftp-7-x-sessions.aspx"&gt;Using LogParser with FTP 7.x Sessions&lt;/A&gt; blog, you can monitor your FTP log files in order to analyze what would-be attackers are trying to do.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9893855" width="1" height="1"&gt;</description></item><item><title>The End of Metabase Corruption (R.I.P.)</title><link>http://blogs.iis.net/robert_mcmurray/archive/2009/08/22/the-end-of-metabase-corruption-r-i-p.aspx</link><pubDate>Sat, 22 Aug 2009 07:28:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3362751</guid><dc:creator>Anonymous</dc:creator><cs:applicationKey>robert_mcmurray</cs:applicationKey><description>&lt;P&gt;Even though IIS 7 with its new XML-based configuration settings has been around for a while, I was going through some old directories on one of my computers the other day and I stumbled across an image that I had labeled "Metabase Corruption." I have kept that image around for the past decade or so because it's one of the few actual examples of metabase corruption that I have actually verified, although there have definitely been more cases than just the ones that I have seen. But I thought that it might make for a good blog entry to explain the origins of the term "Metabase Corruption" and what that means to you if you're using a version of IIS that is earlier than IIS 7.&lt;/P&gt;
&lt;H4&gt;A brief history of the IIS metabase and metabase editors&lt;/H4&gt;
&lt;P&gt;Many years ago I was working in the Microsoft Product Support Services (PSS) group, where I provided support for enterprise-level customers that were using IIS versions 1.0 through 6.0. The early versions of IIS, (versions 1.0 through 3.0), stored all of their settings in the registry. This was fine for that period of time, but it didn't scale well and for several other reasons it was cumbersome to deal with. Just to bring back some nightmares, here's an image of the IIS 3.0 manager:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/photos/robert_mcmurray/images/9530997/original.aspx" target=_blank mce_href="http://blogs.msdn.com/photos/robert_mcmurray/images/9530997/original.aspx"&gt;&lt;IMG alt="IIS 3.0 Manager" src="http://blogs.msdn.com/photos/robert_mcmurray/images/9530997/500x265.aspx" mce_src="http://blogs.msdn.com/photos/robert_mcmurray/images/9530997/500x265.aspx"&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;When IIS 4.0 was released, it introduced the "metabase," which was a proprietary database that stored all of the metadata for IIS, and all of that information was physically stored in a file that was named metabase.bin. The metabase scaled considerably better than the registry, but it introduced several other problems. The biggest problem was that the metabase was something of a "black box" for end users - all of your settings were stored in the metabase, and the only way to get to those settings was through the IIS Manager or by using unsupported command-line tools. The next big problem was that the metabase wasn't portable - you couldn't copy the metabase from one computer to another. (If you tried you would quickly realize that you just killed IIS.) When the IIS 4.0 Resource Kit was released it introduced MetaEdit 1.0, which was an editor for the metabase that looked like RegEdit, but it crashed so often that it really wasn't useful.&lt;/P&gt;
&lt;P&gt;During the Windows 2000 timeframe I took over the MetaEdit code base and I created MetaEdit 2.0, which was released with the Windows 2000 Resource Kit. I fixed all of the stability problems from MetaEdit 1.0 and I added export/import functionality so that users could copy sections of the metabase between servers. Actually, I wrote MetaEdit before Microsoft stopped adding Easter Eggs to software, so there's a small Easter Egg in the Help::About for MetaEdit that you can find by holding down Shift-Ctrl-Alt and double-clicking the icon - you first see a photo of Bill Gates and then you see a photo of me from the days when I had longer hair...&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;IMG src="http://y7b40a.blu.livefilestore.com/y1pf2cuhrhPrw3keEIlIgRIt4p_cjoEEgioFb5VwJeO8yOEgsWtnxcH857pJSvkPkAdHwDwELFI4VeymXmrXof8BQ/MetaEdit22.jpg" mce_src="http://y7b40a.blu.livefilestore.com/y1pf2cuhrhPrw3keEIlIgRIt4p_cjoEEgioFb5VwJeO8yOEgsWtnxcH857pJSvkPkAdHwDwELFI4VeymXmrXof8BQ/MetaEdit22.jpg"&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I released a couple of patches to MetaEdit over the years, and the last version that I released is version 2.2, which you can download through the following URL:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://support.microsoft.com/kb/301386" target=_blank mce_href="http://support.microsoft.com/kb/301386"&gt;How To Install MetaEdit 2.2 on Windows NT 4.0 or Windows 2000&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;When Windows Server 2003 was in development, XML had risen within the development community as a great way to store your data, so the IIS team decided to switch from the metabase.bin format to metabase.xml. This allowed for editing the metabase using any XML editor, even Windows Notepad, and IIS added native export and import functionality, so you could migrate settings from one computer to another by using IIS Manager.&lt;/P&gt;
&lt;P&gt;It was sometime during the Windows 2003 timeframe that I was working on MetaEdit 3.0 when I heard that someone else was working on Metabase Explorer, and the early versions of Metabase Explorer that I was able to test were really cool, so I ceased work on MetaEdit in favor of Metabase Explorer, which was eventually released with the IIS 6.0 Resource Kit Tools. You can download the IIS 6.0 Resource Kit Tools through the following URL:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=56fc92ee-a71a-4c73-b628-ade629c89499" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=56fc92ee-a71a-4c73-b628-ade629c89499"&gt;Internet Information Services (IIS) 6.0 Resource Kit Tools&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;B&gt;Note&lt;/B&gt;: MetaEdit should only be used on Windows NT 4.0 with IIS 4.0 or Windows 2000 with IIS 5.0. For IIS 6.0 you should only use Metabase Explorer. (And yes - you can blame me for the totally useless dialog that you get when you try to use MetaEdit with IIS 6.0. Sorry about that. &lt;IMG src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/regular_smile.gif" mce_src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/regular_smile.gif"&gt;)&lt;/P&gt;
&lt;H4&gt;What's all this about metabase corruption?&lt;/H4&gt;
&lt;P&gt;It was shortly after the release of IIS 4.0 that I first heard the term "Metabase Corruption" being used. People were using the term "Metabase Corruption" as a catch-all phrase for "I don't what's broken but reinstalling IIS fixed the problem so it must have been a problem with the metabase." Everyone's general opinion seemed to be that if you couldn't find the problem and you can't look at the metabase, then it must be corruption in the metabase if you can't resolve the issue without reinstalling IIS. To me, this seemed like a cop-out for good troubleshooting, and since I was a technical lead in PSS around the time that IIS 5.0 was being released I would generally refuse to accept anyone's claim when they said that they had a customer with "Metabase Corruption." Instead, I would require them to troubleshoot the problem further, and in nearly 100% of those situations the problem was &lt;B&gt;&lt;I&gt;not&lt;/I&gt;&lt;/B&gt; caused by the metabase but by some other problem that could be rectified &lt;I&gt;without&lt;/I&gt; reinstalling IIS.&lt;/P&gt;
&lt;P&gt;Here's a case in point - several years ago I worked on an issue that some of the folks that supported SharePoint Portal Server 2001 on IIS 5.0 were seeing. They first described the problem to me as "IIS was losing settings." What they were actually seeing was that they would make changes in IIS Manager and apply them, but when they would close and reopen IIS Manager they saw that all their settings were gone. They claimed that this was "Metabase Corruption," and because of this they would often make the customer reinstall IIS completely. Needless to say I made them quite angry by stating that "Metabase Corruption" is almost never actual corruption, and that they were wasting the customer's time by making them reinstall IIS. Even though reinstalling IIS made the problem go away, it didn't actually fix the problem and it only hid the actual cause at the customer's expense.&lt;/P&gt;
&lt;P&gt;Since I knew a little more than they did about how the metabase worked, I could theorize reasons why that behavior might occur and I asked them to contact me when they had a customer with this problem again. The next time they saw this problem I asked them to follow these steps:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Stop IIS by using "iisreset /stop" from a command-line&lt;/LI&gt;
&lt;LI&gt;Start just the IISADMIN service by using "net start IISADMIN" from a command-line&lt;/LI&gt;
&lt;LI&gt;Open the IIS Manager, make their changes, then close the IIS Manager&lt;/LI&gt;
&lt;LI&gt;Restart IIS by using "iisreset /restart" from a command-line&lt;/LI&gt;
&lt;LI&gt;Open IIS Manager and verify their settings&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;In 100% of the cases this enabled them to work around the issue, but that was only part of the solution. I theorized that something was causing IIS to crash before the metabase changes were flushed to disk, but the Windows service recovery settings were instructing the server to restart IIS whenever it crashed so it seemed to the customer like nothing had crashed at all. With this in mind, I had them check the Windows System Log in the Event Viewer, and it listed several errors indicating that the IISADMIN service had terminated unexpectedly, which confirmed my suspicions. After some additional troubleshooting I discovered that SharePoint Portal Server 2001 was setting several illegal values in the metabase, and sooner or later that would cause IIS 5.0 to crash. (SharePoint has long since fixed that problem.)&lt;/P&gt;
&lt;H4&gt;Does metabase corruption actually happen? If so, what can I do about it?&lt;/H4&gt;
&lt;P&gt;Sadly - yes it does. It doesn't happen as often as some people seem to think that it does, but it is certainly possible. The metabase is simply a file, and file corruption can occur for any number of reasons. In the early days of IIS 5.0 on the Windows 2000 beta I discovered (quite by accident) how I could overwrite one specific value in the metabase and crash IIS so badly that IIS couldn't even be uninstalled. (Don't worry - that problem has long since been fixed.) I have also seen metabase corruption due to hardware failures, like a drive controller that is going bad and the problem is manifesting itself slowly over time.&lt;/P&gt;
&lt;P&gt;That being said, there are several methods to check if you actually have metabase corruption:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The first and easiest thing to check is - does IIS start and all of your web sites seem to work?&lt;/LI&gt;
&lt;LI&gt;Can you open up the IIS Manager and see all of your sites?&lt;/LI&gt;
&lt;LI&gt;Can you enumerate the metabase without errors using MetaEdit, Metabase Explorer, or "adsutil.vbs enum_all w3svc" from a command line?&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;If the answer to any or all of these questions is yes - then chances are good that you do not have metabase corruption, and whatever problem you have is due to misconfiguration or some other issue.&lt;/P&gt;
&lt;P&gt;The best way that I can think of to prevent metabase corruption is to avoid using a variety of tools to constantly read and write to the metabase outside of normal IIS operations. I have written scripts that perform literally thousands of metabase operations under a nominal load in a lab environment for testing purposes and never had a problem, but a server under heavy load with thousands of read/write operations per minute could theoretically run into problems if left to run like that for an indefinite length of time. But theoretically the same may be true for any file under heavy read/write load for an indefinite length of time.&lt;/P&gt;
&lt;H4&gt;Protecting against metabase corruption&lt;/H4&gt;
&lt;P&gt;The best thing that you can do to prevent against metabase corruption is &lt;B&gt;&lt;I&gt;backup the metabase regularly&lt;/I&gt;&lt;/B&gt;!!! I cannot count the number of times where having a good backup of the metabase saved me from a myriad of issues. Fortunately, there are several KB articles that describe backing up the metabase:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://support.microsoft.com/kb/300672" target=_blank mce_href="http://support.microsoft.com/kb/300672"&gt;KB 300672: How to create a metabase backup in IIS 5&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://support.microsoft.com/kb/324277" target=_blank mce_href="http://support.microsoft.com/kb/324277"&gt;KB 324277: How To Create a Metabase Backup by Using IIS 6.0 in Windows Server 2003&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://support.microsoft.com/kb/234429" target=_blank mce_href="http://support.microsoft.com/kb/234429"&gt;KB 234429: How to manually restore the metabase when no proper backup exists or when the MMC does not start&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://support.microsoft.com/kb/302888" mce_href="http://support.microsoft.com/kb/302888"&gt;KB 302888: How To Schedule Metabase Backups Using WSH&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The last KB article in the above list is based on a script that I wrote for one of my IIS 5.0 on Windows 2000 servers many years ago that I continue to use on any servers that run IIS 6.0 on Windows Server 2003.&lt;/P&gt;
&lt;H4&gt;Does IIS 7 have metabase corruption?&lt;/H4&gt;
&lt;P&gt;The quick answer to this is "no", but that answer is a little misleading since IIS 7 doesn't have a metabase!&lt;/P&gt;
&lt;P&gt;In IIS 7 we rolled out a brand new XML-based configuration store, and the bulk of your IIS settings are stored in a file named applicationHost.config, which greatly resembles the web.config configuration paradigm that was established with the .NET framework. That being said, applicationHost.config is just another file, and even though its syntax is much easier to understand and manually edit, any file can theoretically become corrupted, so you should always make sure that you backup your applicationHost.config file as well.&lt;/P&gt;
&lt;P&gt;With this in mind I wrote the following blog post some time ago where I discuss creating a script to automate backing up your IIS 7 configuration settings:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/robert_mcmurray/archive/2008/03/08/automating-iis-7-backups.aspx" target=_blank mce_href="http://blogs.msdn.com/robert_mcmurray/archive/2008/03/08/automating-iis-7-backups.aspx"&gt;Automating IIS 7 Backups&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;(&lt;B&gt;Note&lt;/B&gt;: I also wrote &lt;A href="http://blogs.msdn.com/robert_mcmurray/archive/2009/07/27/a-little-scripting-saved-my-day.aspx" target=_blank mce_href="http://blogs.msdn.com/robert_mcmurray/archive/2009/07/27/a-little-scripting-saved-my-day.aspx"&gt;another blog post&lt;/A&gt; recently about how the script in that blog post saved my day when something did get corrupted on one of my servers.)&lt;/P&gt;
&lt;H4&gt;Parting thoughts&lt;/H4&gt;
&lt;P&gt;I started out this blog post by describing an image that I found on one of my computers where actual metabase corruption had occurred, so I thought that a nice way to close out this blog post would be to show you the actual image:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;IMG src="http://y7b40a.blu.livefilestore.com/y1p8jpY-8nxRp2_6XkjOvo1sOd0SsYtpeL55cAbq3JFGWjWlalXTY9KxMYMDepiitDuHIn0fMwX9Q3VPbOxwC2oLAleYsFd8BAZ/Metabase%20Corruption.jpg" mce_src="http://y7b40a.blu.livefilestore.com/y1p8jpY-8nxRp2_6XkjOvo1sOd0SsYtpeL55cAbq3JFGWjWlalXTY9KxMYMDepiitDuHIn0fMwX9Q3VPbOxwC2oLAleYsFd8BAZ/Metabase%20Corruption.jpg"&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;It's been almost ten years now, so I don't remember the root cause anymore, but I remember what it looked like. I had a mixture of sites that were working and others that were not, and when I opened the metabase in MetaEdit I noticed that scattered throughout the metabase were hundreds of values that shouldn't be there or values that did not make sense. MetaEdit was trying its best to show all of the data, but you'll notice in the highlighted areas of the image that several of the values had bad data in them.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9880070" width="1" height="1"&gt;</description></item><item><title>A Little Scripting Saved My Day (;-])</title><link>http://blogs.iis.net/robert_mcmurray/archive/2009/07/27/a-little-scripting-saved-my-day.aspx</link><pubDate>Mon, 27 Jul 2009 18:55:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3315373</guid><dc:creator>Anonymous</dc:creator><cs:applicationKey>robert_mcmurray</cs:applicationKey><description>&lt;P&gt;I have mentioned in previous blog posts that I tend to write many of my blog posts and walkthroughs for &lt;A href="http://www.iis.net/" target=_blank mce_href="http://www.iis.net/"&gt;IIS.NET&lt;/A&gt; based on code that I’ve written for myself, and today’s blog post is the story of how one of my samples saved my rear over this past weekend.&lt;/P&gt;
&lt;P&gt;One of the servers that I manage is used to host web sites for several friends of mine. (It’s their hobby to have a web site and it’s my hobby to host it for them.) Anyway, sometime on Sunday someone let me know that one of my sites didn’t seem to be behaving correctly, so I browsed it with Internet Explorer and saw that I was getting an HTTP 503 error. I’ve seen this error when an application pool goes offline for some reason, so I didn’t panic – yet – because I knew that the web site was in a separate application pool. With that in mind, I browsed to a web site that is in a different application pool. Same thing – HTTP 503 error. This was beginning to concern me.&lt;/P&gt;
&lt;P&gt;I logged into the web server and ran iisreset from a command-line – this threw the following error - and now I was really starting to become agitated:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;TABLE class="" style="BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #000000" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" style="COLOR: #ffffff"&gt;
&lt;P style="COLOR: #ffffff"&gt;&lt;TT&gt;CMD&amp;gt;iisreset&lt;BR&gt;&lt;BR&gt;Attempting stop...&lt;BR&gt;Internet services successfully stopped&lt;BR&gt;Attempting start...&lt;BR&gt;Restart attempt failed.&lt;BR&gt;The IIS Admin Service or the World Wide Web Publishing Service, or a service dependent on them failed to start. The service, or dependent services, may had an error during its startup or may be disabled.&lt;BR&gt;&lt;BR&gt;CMD&amp;gt;&lt;/TT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I knew that the cause of the error should be in the Windows Event Viewer, so I opened the System log in Event Viewer and saw the following error:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;TABLE class="" style="BORDER-COLLAPSE: collapse" cellSpacing=1 cellPadding=2 width="100%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH class="" vAlign=top noWrap align=left&gt;Log Name:&lt;/TH&gt;
&lt;TD class="" vAlign=top align=left&gt;System&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="" vAlign=top noWrap align=left&gt;Source:&lt;/TH&gt;
&lt;TD class="" vAlign=top align=left&gt;Microsoft-Windows-WAS&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="" vAlign=top noWrap align=left&gt;Date:&lt;/TH&gt;
&lt;TD class="" vAlign=top align=left&gt;7/26/2009 10:59:52 AM&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="" vAlign=top noWrap align=left&gt;Event ID:&lt;/TH&gt;
&lt;TD class="" vAlign=top align=left&gt;5172&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="" vAlign=top noWrap align=left&gt;Task Category:&lt;/TH&gt;
&lt;TD class="" vAlign=top align=left&gt;None&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="" vAlign=top noWrap align=left&gt;Level:&lt;/TH&gt;
&lt;TD class="" vAlign=top align=left&gt;Error&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="" vAlign=top noWrap align=left&gt;Keywords:&lt;/TH&gt;
&lt;TD class="" vAlign=top align=left&gt;Classic&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="" vAlign=top noWrap align=left&gt;User:&lt;/TH&gt;
&lt;TD class="" vAlign=top align=left&gt;N/A&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="" vAlign=top noWrap align=left&gt;Computer:&lt;/TH&gt;
&lt;TD class="" vAlign=top align=left&gt;MYSERVER&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="" vAlign=top noWrap align=left&gt;Description:&lt;/TH&gt;
&lt;TD class="" vAlign=top align=left&gt;The Windows Process Activation Service encountered an error trying to read configuration data from file '\\?\C:\Windows\system32\inetsrv\config\applicationHost.config', line number '308'. The error message is: 'Configuration file is not well-formed XML'. The data field contains the error number.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="" vAlign=top noWrap align=left colSpan=2&gt;Event Xml:&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top align=left colSpan=2&gt;
&lt;P style="COLOR: black; BACKGROUND-COLOR: #ffffff"&gt;&lt;TT&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Event&lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;xmlns&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="http://schemas.microsoft.com/win/2004/08/events/event"&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;System&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Provider&lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="Microsoft-Windows-WAS"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt; Guid&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="{4E616D65-6F6E-6D65-6973-526F62657274}"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt; EventSourceName&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="WAS"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;/&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;EventID&lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;Qualifiers&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="49152"&amp;gt;&lt;/SPAN&gt;5172&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;EventID&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Version&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;0&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Version&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Level&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;2&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Level&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Task&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;0&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Task&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Opcode&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;0&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Opcode&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Keywords&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;0x80000000000000&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Keywords&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;TimeCreated&lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;SystemTime&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="2009-07-26T17:59:52.000Z"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;/&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;EventRecordID&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;32807&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;EventRecordID&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Correlation&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;/&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Execution&lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;ProcessID&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="0"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;ThreadID&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="0"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;/&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Channel&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;System&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Channel&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Computer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;MYSERVER&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Computer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Security&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;/&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;System&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;EventData&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Data&lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="File"&amp;gt;&lt;/SPAN&gt;\\?\C:\Windows\system32\inetsrv\config\applicationHost.config&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Data&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Data&lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="LineNumber"&amp;gt;&lt;/SPAN&gt;308&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Data&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Data&lt;/SPAN&gt; &lt;SPAN style="COLOR: #ff0000"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;="Error"&amp;gt;&lt;/SPAN&gt;Configuration file is not well-formed XML&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Data&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Binary&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;0D000780&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Binary&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;EventData&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Event&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/TT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Now that I was armed with the file name and line number of the failure in my configuration settings, I was able to go straight to the source of the problem. (I love IIS 7's descriptive error messages - don't you?) Once I opened the file and jumped to the correct location, I saw several lines of unintelligible garbage. For reasons that are still unknown to me – my applicationHost.config file had become corrupted and IIS was dead in the water until I fixed the problem. I looked through the file and removed most of the garbage and saved the edited file&amp;nbsp;to IIS – this got the web sites working, but only partially. Some necessary settings had obviously been removed while I was clearing all of out the unintelligible garbage, and it might take me a long time to discover what those settings were.&lt;/P&gt;
&lt;P&gt;The next thing that I did was to take a look in my two readily-accessible backup drives; I have two external hard drives that keep a backup of the web server - one hard drive is directly plugged into the web server via a USB cable, and the other hard drive is plugged into a physically separate server that rotates drives with off-site storage on a monthly basis. The problem is, my weekly backups had just run, so the copy in each backup location had been overwritten with the corrupted version. (I’m going to have to rethink my backup strategy after this – but that’s another story.) The backup copy in my off-site storage location should be intact, but that copy would be a few weeks old so I would be missing some settings, and I would have to drive an hour or so round-trip in order to pick up the drive. This wasn’t an ideal solution – but it was definitely a feasible strategy.&lt;/P&gt;
&lt;P&gt;It was at this point that I remembered that I had written following blog post some time ago:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Automating IIS 7 Backups&lt;/STRONG&gt; &lt;BR&gt;&lt;A title=http://blogs.msdn.com/robert_mcmurray/archive/2008/03/08/automating-iis-7-backups.aspx href="http://blogs.msdn.com/robert_mcmurray/archive/2008/03/08/automating-iis-7-backups.aspx" target=_blank mce_href="http://blogs.msdn.com/robert_mcmurray/archive/2008/03/08/automating-iis-7-backups.aspx"&gt;http://blogs.msdn.com/robert_mcmurray/archive/2008/03/08/automating-iis-7-backups.aspx&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I wrote the script in that blog post for the server that I was currently managing, and because of this preventative measure I had dozens of backups going back several weeks to choose from. So I was able to quickly find a copy with no corruption and I restored that copy to my IIS config directory. At this point all of my web sites came online with all of their functionality. Having fixed the major issues, I used WinDiff to verify any settings that might have been changed between the restored copy and the corrupted copy.&lt;/P&gt;
&lt;P&gt;So in conclusion, this story had a happy ending, and it left me with a few lessons learned:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;You can never have too many backups &lt;/LI&gt;
&lt;LI&gt;I need to rethink how I roll out my backup strategy with regard to using external hard drives &lt;/LI&gt;
&lt;LI&gt;Writing cool scripts to automate your backups can save your rear end &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;That sums it up for today’s post. ;-]&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9850238" width="1" height="1"&gt;</description></item><item><title>Using Apple's WebDavFS for Mac OS X with WebDAV on IIS 7</title><link>http://blogs.iis.net/robert_mcmurray/archive/2009/07/01/using-apple-s-webdavfs-for-mac-os-x-with-webdav-on-iis-7.aspx</link><pubDate>Thu, 02 Jul 2009 02:19:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3270354</guid><dc:creator>Anonymous</dc:creator><cs:applicationKey>robert_mcmurray</cs:applicationKey><description>&lt;P&gt;Today's blog post needs to have a disclaimer right up front - I freely admit I'm not a Mac OS X expert, so I may not have everything 100% correct in this post. But I've seen a lot of questions on &lt;A href="http://forums.iis.net/" target=_blank&gt;forums.iis.net&lt;/A&gt; that discuss using IIS WebDAV with Mac OS X, so I thought that I'd share a few of the things that I've noticed. Just the same, if I were writing a formal walkthrough I would have said something like, "&lt;I&gt;Microsoft is not responsible for the behavior of Apple's Mac family of products. The information that is provided in this topic is provided to assist Mac OS X users connect to IIS using WebDAV.&lt;/I&gt;" &lt;IMG src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/wink_smile.gif"&gt;&lt;/P&gt;
&lt;P&gt;All that being said, here are the prerequisites for getting your environment together:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Your server needs to be running Windows Vista, Windows Server 2008, or Windows 7.&lt;/LI&gt;
&lt;LI&gt;Your server needs to have Internet Information Services 7 and the WebDAV module installed. (&lt;B&gt;Note&lt;/B&gt;: See the &lt;A href="http://go.microsoft.com/fwlink/?LinkId=105146" target=_blank mce_href="http://go.microsoft.com/fwlink/?LinkId=105146"&gt;Installing and Configuring WebDAV on IIS 7.0&lt;/A&gt; topic for more information.)&lt;/LI&gt;
&lt;LI&gt;For best results, your Mac client needs to be running OS X version 10.4 or later.&lt;/LI&gt;&lt;/UL&gt;
&lt;H3&gt;Connecting to a WebDAV server using Mac OS X&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;In Mac OS X, open &lt;B&gt;Finder&lt;/B&gt;.&lt;/LI&gt;
&lt;LI&gt;Choose &lt;B&gt;Go&lt;/B&gt;, then &lt;B&gt;Connect To Server&lt;/B&gt;.&lt;/LI&gt;
&lt;LI&gt;Enter the URL of the WebDAV server in &lt;B&gt;Server Address&lt;/B&gt;. For example: 
&lt;BLOCKQUOTE&gt;&lt;I&gt;http://www.example.com/path/&lt;/I&gt;&lt;/BLOCKQUOTE&gt;&lt;/LI&gt;
&lt;LI&gt;Click &lt;B&gt;Connect&lt;/B&gt;.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;For more information, please see the following help topics that are available on Apple's Web site:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://docs.info.apple.com/article.html?path=Mac/10.4/en/mh1050.html" target=_blank&gt;Mac OS X 10.4 Help: Connecting to a WebDAV server&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://docs.info.apple.com/article.html?path=Mac/10.5/en/8160.html" target=_blank&gt;Mac OS X 10.5 Help: Connecting to a WebDAV server&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;H3&gt;Troubleshooting WebDAV connections using Mac OS X&lt;/H3&gt;
&lt;P&gt;These are some of the issues that I've seen:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;WebDavFS connections are read-only if WebDAV LOCKs are disabled on the server. Because of this: 
&lt;UL&gt;
&lt;LI&gt;If you are using WebDAV 7.0 on IIS 7 you will not be able write files to the server; this is because WebDAV locks were not available in this release.&lt;/LI&gt;
&lt;LI&gt;If you are using WebDAV 7.5 on IIS 7 you will need to enable locks before you can write files to the server; this is because WebDAV locks are disabled by default. (&lt;B&gt;Note&lt;/B&gt;: See the &lt;A href="http://learn.iis.net/page.aspx/596/how-to-use-webdav-locks/" target=_blank&gt;How to Use WebDAV Locks&lt;/A&gt; topic for more information.)&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;WebDavFS connections attempt to create files that may be blocked by IIS: 
&lt;UL&gt;
&lt;LI&gt;"&lt;I&gt;Desktop Services Store&lt;/I&gt;" (.DS_Store) files. (See &lt;A href="http://en.wikipedia.org/wiki/.DS_Store" target=_blank&gt;http://en.wikipedia.org/wiki/.DS_Store&lt;/A&gt; for a description.)&lt;/LI&gt;
&lt;LI&gt;"&lt;I&gt;Resource Fork&lt;/I&gt;" (e.g. "._filename.ext") files. (See &lt;A href="http://en.wikipedia.org/wiki/Resource_fork" target=_blank&gt;http://en.wikipedia.org/wiki/Resource_fork&lt;/A&gt; for a description.)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Allowing unknown MIME types for WebDAV requests should allow these file types, and that setting is located under &lt;B&gt;Web Settings&lt;/B&gt; action for the &lt;B&gt;WebDAV Authoring Rules&lt;/B&gt; feature of IIS Manager.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://bxtqig.blu.livefilestore.com/y1pPrNDkYWHbqzLrclDaaMqC1dlPhS2et-S5L2CPeoBoX77rY2LXMY8Royxui0oJtJddhYcPIW6nxii6ACKKG_EtA/Allow%20Unknown%20MIME%20Types.jpg"&gt;&lt;/P&gt;
&lt;P&gt;For more information, see the following topics that are available on Apple's Web site:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://support.apple.com/kb/HT1629" target=_blank&gt;Mac OS X 10.4: How to prevent .DS_Store file creation over network connections&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://support.apple.com/kb/TA24245" target=_blank&gt;Mac OS X 10.4: Windows Server 2003 IIS Web Server fails GET call on .DS_Store and ._ files&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;H4&gt;In Closing...&lt;/H4&gt;
&lt;P&gt;I have to reiterate that I'm not a Mac OS X expert, so this list is probably not all-inclusive, but it's helped to resolve some of the issues that I've seen.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9812594" width="1" height="1"&gt;</description></item><item><title>FTP Clients - Part 6: Core FTP LE</title><link>http://blogs.iis.net/robert_mcmurray/archive/2009/05/01/ftp-clients-part-6-core-ftp-le.aspx</link><pubDate>Fri, 01 May 2009 23:10:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3134347</guid><dc:creator>Anonymous</dc:creator><cs:applicationKey>robert_mcmurray</cs:applicationKey><description>&lt;P&gt;For this installment in my series about FTP Clients, I'd like to take a look at the Core FTP client. For this blog post I used Core FTP Lite Edition (LE) version 1.3c (build 1447) and version 2.1 (build 1603), although all of my screen shots are from version 2.1. Core FTP is available from the following URL:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://www.coreftp.com/"&gt;http://www.coreftp.com/&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;At the time of this blog post, Core FTP provides the LE for free and charges a small fee for a professional version.&lt;/P&gt;
&lt;P&gt;Like most graphical FTP clients, the Core FTP LE user interface is pretty easy to use and rather straight-forward - you have separate windows for your local and remote files/folders, as well as a logging window that lists the FTP commands that are sent and the FTP server's responses:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://yy3flw.blu.livefilestore.com/y1p2oc7h-AOjpqzlSt1vktdR94GTRDsAW6Rsn5qr_KB3PiZ6Q5vUZs6HF4k-0cu4sxGO_vKbJAgqd1iVO06mAD_9me3Oji5bAZt/CoreFtp1.jpg" target=_blank&gt;&lt;IMG height=450 src="http://yy3flw.blu.livefilestore.com/y1p2oc7h-AOjpqzlSt1vktdR94GTRDsAW6RaK-UHQqTUNxQo4FQRGtRc9cGSSg0QRquMKy_5OXuNrERrfOQ_eaD0Uko5Q6McK-P/CoreFtp1.jpg" width=600 border=2&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Core FTP LE has a great Site Manager feature, which allows you to store commonly-used connections to FTP sites:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://yy3flw.blu.livefilestore.com/y1pq2PaChNVilw0Jz5PYR1rVWF2k1DFxqLRlAKrsQmXqJilox5eGyeuW0ihixQAzXTGNGWYh45ZGnHdAuPp4Tb7AQ/CoreFtp2.jpg" target=_blank&gt;&lt;IMG height=450 src="http://yy3flw.blu.livefilestore.com/y1pq2PaChNVilw0Jz5PYR1rVeBMAtm_0LLHWQArcz_XQwQfcaF9aOynPbZMsr69A7vjN0zWjerkexHAOT9zvpYWXg/CoreFtp2.jpg" width=477 border=2&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Clicking on the &lt;B&gt;Advanced&lt;/B&gt; button gives you a great deal of additional configuration settings, and I'll say more about that later:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://yy3flw.blu.livefilestore.com/y1pPv2A5QUnG1_QvuDOPwhf-sbkEtAlWkLNNBJO6kSys4bvwxOxg1_xRYhhiN8cSPkKWVEH5xp6WFZa8b_cL_jmNg/CoreFtp3.jpg" target=_blank&gt;&lt;IMG height=406 src="http://yy3flw.blu.livefilestore.com/y1pPv2A5QUnG1_QvuDOPwhf-kYLxppBGQ8bpcs4KjenUFEar9LftdcgP31fGhlUbgWsd2LI__0Olk6bS43pt9MNCA/CoreFtp3.jpg" width=548 border=2&gt;&lt;/A&gt;&lt;/P&gt;
&lt;H4&gt;Command-Line Support&lt;/H4&gt;
&lt;P&gt;This is one of my favorite Core FTP LE features: &lt;I&gt;command-line support&lt;/I&gt;. Yes - I'm a geek - and I like being able to script things and run batch jobs to automate whatever I can, so command-line support is always a plus for me. That said, the interface for the Core FTP LE command-line client is not an interactive experience like you get with the built-in Windows FTP.EXE or &lt;A href="http://blogs.msdn.com/robert_mcmurray/archive/2009/01/06/ftp-clients-part-5-moveit-freely-command-line-secure-ftp-client.aspx" target=_blank&gt;MOVEit Freely&lt;/A&gt; command-line clients. The Core FTP LE command-line client is provided as via the Corecmd.exe file that is installed in the main the Core FTP LE application directory, and is used for a single FTP operation like GET or PUT - although you can pass the name of a script file to execute several commands before/after logging in or before/after a file transfer.&lt;/P&gt;
&lt;P&gt;So my final judgment is that the Core FTP LE client doesn't have great command-line support, but it's still really nice to have.&lt;/P&gt;
&lt;H3&gt;Using FTP over SSL (FTPS)&lt;/H3&gt;
&lt;P&gt;The Core FTP LE client supports both &lt;A href="http://blogs.msdn.com/robert_mcmurray/archive/2008/11/10/ftp-clients-part-2-explicit-ftps-versus-implicit-ftps.aspx" target=_blank&gt;Implicit and Explicit FTPS&lt;/A&gt;, so the choice is up to you which method to use. When creating a connection to a server, Core FTP LE has three FTP options that you can use with FTP7:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;AUTH SSL&lt;/LI&gt;
&lt;LI&gt;AUTH TLS&lt;/LI&gt;
&lt;LI&gt;FTPS (SSL DIRECT)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;It's important to choose this option correctly, otherwise you will run into problems when trying access a site using FTPS. If you'll recall from my "&lt;A href="http://blogs.msdn.com/robert_mcmurray/archive/2008/11/10/ftp-clients-part-2-explicit-ftps-versus-implicit-ftps.aspx" target=_blank&gt;FTP Clients - Part 2: Explicit FTPS versus Implicit FTPS&lt;/A&gt;" and my other FTP client blog posts, Explicit FTPS allows the client to initiate SSL/TLS whenever it wants, but for most FTP clients that will be when logging in to your FTP site, and in that regard it may almost seem like Implicit FTPS, but behind the scenes the FTP client and server are communicating differently.&lt;/P&gt;
&lt;P&gt;In the case of FTP7, the following rules apply:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;If you enable FTPS in FTP7 and you assign the FTP site to port 990, you are using &lt;B&gt;Implicit FTPS&lt;/B&gt; - Core FTP LE refers to this as &lt;B&gt;FTPS (SSL DIRECT)&lt;/B&gt;. (&lt;B&gt;Note&lt;/B&gt;: make sure that you configure your FTP client to connect on port 990.)&lt;/LI&gt;
&lt;LI&gt;If you enable FTPS in FTP7 and you assign the FTP site to any port other than port 990, you are using &lt;B&gt;Explicit FTPS&lt;/B&gt; - Core FTP LE allows you to configure your connection to use &lt;B&gt;AUTH SSL&lt;/B&gt; or &lt;B&gt;AUTH TLS&lt;/B&gt; for the explicit connection.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The type of FTPS is specified on the &lt;B&gt;Connection&lt;/B&gt; drop-down menu:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://yy3flw.blu.livefilestore.com/y1pUvSuPf1uY9MJ8RPaS6U1W2QYsG27D0CbzTqW3QX6jbeYxA65nhAl747sox7p-4ox5tBO8ibEszKuPOjGXi_3bQ/CoreFtp4.jpg" target=_blank&gt;&lt;IMG height=450 src="http://yy3flw.blu.livefilestore.com/y1pUvSuPf1uY9MJ8RPaS6U1W09ILkzYYQ8Rs5TfmRZqgBvKzbh_gyjolTvIEHHOymmitGxOilImoYRzXpbNrBm3ww/CoreFtp4.jpg" width=477 border=2&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Once you have chosen an FTPS connection, the Core FTP LE client offers you additional options where you can customize which parts of the session will be encrypted:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://yy3flw.blu.livefilestore.com/y1pAhNYDZTTgG8K15iSBkTQyp911vG01D5LvxSdbCdu2Zw25Im5-DWAFJ4EYiymHYrFp4BlrhVadAS0_M_uMATvSg/CoreFtp5.jpg" target=_blank&gt;&lt;IMG height=450 src="http://yy3flw.blu.livefilestore.com/y1pAhNYDZTTgG8K15iSBkTQyrGMAiOyvcydU-q_Z2cncnRYROF9VZFFyfR7SzXoiIIjs0Wq-tS4SugYkS6tdnEjvA/CoreFtp5.jpg" width=477 border=2&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;You can combine the Core FTP SSL options with the advanced SSL policies for your FTP7 sites to customize your security level:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://yy3flw.blu.livefilestore.com/y1p4fBz3NYQ9ZfH5EgsjrFj8Y4hifzio778a9VYJfgFsTki-Bu53pLj-szre0yeec7RAuN6ASxmNIw3_vigaakrdg/CoreFtp6.jpg" target=_blank&gt;&lt;IMG height=360 src="http://yy3flw.blu.livefilestore.com/y1p4fBz3NYQ9ZfH5EgsjrFj8eaVXCOL3_wXo4o7ik3JjafNTfBUTkUmaMD6uzGrAHkPFUihfeTCYguCvyFLieanUQ/CoreFtp6.jpg" width=600 border=2&gt;&lt;/A&gt;&lt;/P&gt;
&lt;H3&gt;Using FTP Virtual Hosts&lt;/H3&gt;
&lt;P&gt;Because Core FTP LE's site manager allows you to specify the virtual host name as part of the user credentials, Core FTP LE works great with FTP7's virtual host names. All that you need to do is use the "ftp.example.com|username" syntax when specifying your username, and when you connect to the FTP7 server it will route your requests to the correct FTP virtual host site.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://yy3flw.blu.livefilestore.com/y1pSmbFAU_qjHH-5_6usShQZuUoAlHEml39LuGDeFcfpzHQVkwCgmVCmeOAaU9C569wYf1sCLwd8lc1ifS4oBBxDA/CoreFtp7.jpg" target=_blank&gt;&lt;IMG height=450 src="http://yy3flw.blu.livefilestore.com/y1p-tl22lkzVwbPUwLLUHrBrUbw8ZYv8u9LIdlZ05nA34NIN43H-5EqnhYhKoCwCX_TNRzUAs6w4PAlzyQR2X-P0w/CoreFtp7.jpg" width=477 border=2&gt;&lt;/A&gt;&lt;/P&gt;
&lt;H3&gt;Using True FTP Hosts&lt;/H3&gt;
&lt;P&gt;A really great feature of Core FTP LE is the ability to send pre-login commands, and since this feature allows you to enter custom commands you can specify the actual FTP HOST command as part of your login:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://yy3flw.blu.livefilestore.com/y1pgEnNmRPYRbGCD1pc5bs8G3gArhk8uhHHW23L0dFGseCxnPSLOHu39PBKSvgxXmT4sheZGIcPq4wU9tcJ_atFuA/CoreFtp8.jpg" target=_blank&gt;&lt;IMG height=406 src="http://yy3flw.blu.livefilestore.com/y1pgEnNmRPYRbGCD1pc5bs8G9TB5x7v5ORRPmg1A-kcRnDQycwKhcflCWyaF6uuo7Ger0mFRzLWNldPHQBTw36G6w/CoreFtp8.jpg" width=548 border=2&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;This is a tremendous feature if you're hosting multiple FTP sites on the same IP address, and gives Core FTP LE some of the best support for true FTP HOSTs.&lt;/P&gt;
&lt;H3&gt;Scorecard for Core FTP LE&lt;/H3&gt;
&lt;P&gt;That wraps it up for our quick round-trip for some of Core FTP LE's features, and here's the scorecard results:&lt;/P&gt;
&lt;TABLE class="" width=500 border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH class="" noWrap&gt;Client Name&lt;/TH&gt;
&lt;TH class="" noWrap width=75&gt;Directory&lt;BR&gt;Browsing&lt;/TH&gt;
&lt;TH class="" noWrap width=75&gt;&lt;A href="http://go.microsoft.com/fwlink/?LinkId=89117" mce_href="http://go.microsoft.com/fwlink/?LinkId=89117"&gt;Explicit&lt;BR&gt;FTPS&lt;/A&gt;&lt;/TH&gt;
&lt;TH class="" noWrap width=75&gt;&lt;A href="http://go.microsoft.com/fwlink/?LinkId=89117" mce_href="http://go.microsoft.com/fwlink/?LinkId=89117"&gt;Implicit&lt;BR&gt;FTPS&lt;/A&gt;&lt;/TH&gt;
&lt;TH class="" noWrap width=75&gt;&lt;A href="http://go.microsoft.com/fwlink/?LinkId=89119" mce_href="http://go.microsoft.com/fwlink/?LinkId=89119"&gt;Virtual&lt;BR&gt;Hosts&lt;/A&gt;&lt;/TH&gt;
&lt;TH class="" noWrap width=75&gt;&lt;A href="http://go.microsoft.com/fwlink/?LinkId=89119" mce_href="http://go.microsoft.com/fwlink/?LinkId=89119"&gt;True&lt;BR&gt;HOSTs&lt;/A&gt;&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top noWrap align=left&gt;Core FTP LE 1.3&lt;/TD&gt;
&lt;TD class="" noWrap align=middle width=75&gt;Rich&lt;/TD&gt;
&lt;TD class="" noWrap align=middle width=75&gt;Y&lt;/TD&gt;
&lt;TD class="" noWrap align=middle width=75&gt;Y&lt;/TD&gt;
&lt;TD class="" noWrap align=middle width=75&gt;Y&lt;/TD&gt;
&lt;TD class="" noWrap align=middle width=75&gt;Y &lt;SUP&gt;1&lt;/SUP&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top noWrap align=left&gt;Core FTP LE 2.1&lt;/TD&gt;
&lt;TD class="" noWrap align=middle width=75&gt;Rich&lt;/TD&gt;
&lt;TD class="" noWrap align=middle width=75&gt;Y&lt;/TD&gt;
&lt;TD class="" noWrap align=middle width=75&gt;Y&lt;/TD&gt;
&lt;TD class="" noWrap align=middle width=75&gt;Y&lt;/TD&gt;
&lt;TD class="" noWrap align=middle width=75&gt;Y &lt;SUP&gt;1&lt;/SUP&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top align=left colSpan=6&gt;&lt;SUP&gt;1&lt;/SUP&gt; As noted earlier, true FTP HOSTs are available in Site Manager using pre-login commands.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;B&gt;Note&lt;/B&gt;: Keeping with my standard disclaimer, there are a great number of additional features that Core FTP LE provides - and I just focused on the topic areas that apply to FTP7.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9583119" width="1" height="1"&gt;</description></item></channel></rss>