<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Pratidhwani</title><link>http://dotnetjunkies.com/WebLog/ramdash/default.aspx</link><description>Echo from the Tech Sphere</description><dc:language>en-US</dc:language><generator>CommunityServer 1.0 (Build: 1.0.1.50214)</generator><item><title>Create a Virtual Directory and Edit its Properties in IIS using C#</title><link>http://dotnetjunkies.com/WebLog/ramdash/archive/2004/08/11/21735.aspx</link><pubDate>Wed, 11 Aug 2004 15:47:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:21735</guid><dc:creator>rpdash</dc:creator><slash:comments>5</slash:comments><comments>http://dotnetjunkies.com/WebLog/ramdash/comments/21735.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/ramdash/commentrss.aspx?PostID=21735</wfw:commentRss><description>&lt;P&gt;&lt;SPAN&gt;Back when I was working at Qwest Communications (Summer of ’02 precisely), I was given the task to create a virtual directory for reports on every server at my hand. The path was local to each computer and all the authentication requirements were identical. I could as well have gone to IIS Administrative console on each machine but I thought to take a shot at C#.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;First, I’d to dig thro the bitmask values for the properties of a virtual directory on the IIS server. I’d to look no further than the following Microsoft documentation online (&lt;A href="http://www.microsoft.com/windows2000/en/server/iis/default.asp?url=/windows2000/en/server/iis/htm/asp/apro1cms.htm"&gt;http://www.microsoft.com/windows2000/en/server/iis/default.asp?url=/windows2000/en/server/iis/htm/asp/apro1cms.htm&lt;/A&gt; ). Based on my requirements I created an XML config (WebSettings.Config) file which looks as follows:
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;U&gt;&lt;SPAN&gt;WebSettings.Config
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/U&gt;&lt;/B&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;xml&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;version&lt;/SPAN&gt;&lt;SPAN&gt;="1.0"&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;encoding&lt;/SPAN&gt;&lt;SPAN&gt;="utf-8"&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;?&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;WebSettings&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;-- Directory to be set for virtual folder --&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;ActualDirectory&lt;/SPAN&gt;&lt;SPAN&gt;&gt;&lt;/SPAN&gt;E:\logs\imaedi\REPORTS&lt;SPAN&gt;&lt;SPAN&gt;ActualDirectory&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;ServerName&lt;/SPAN&gt;&lt;SPAN&gt;&gt;&lt;/SPAN&gt;localhost&lt;SPAN&gt;&lt;SPAN&gt;ServerName&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;IISRootPath&lt;/SPAN&gt;&lt;SPAN&gt;&gt;&lt;/SPAN&gt;IIS://&lt;SPAN&gt;&lt;SPAN&gt;IISRootPath&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;VirtualDirectorySchemaName&lt;/SPAN&gt;&lt;SPAN&gt;&gt;&lt;/SPAN&gt;IIsWebVirtualDir&lt;SPAN&gt;&lt;SPAN&gt;VirtualDirectorySchemaName&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;WebServicePath&lt;/SPAN&gt;&lt;SPAN&gt;&gt;&lt;/SPAN&gt;/W3SVC/1&lt;SPAN&gt;&lt;SPAN&gt;WebServicePath&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;ActiveDirectoryRootPath&lt;/SPAN&gt;&lt;SPAN&gt;&gt;&lt;/SPAN&gt;Root&lt;SPAN&gt;&lt;SPAN&gt;ActiveDirectoryRootPath&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;VirtualDirectoryName&lt;/SPAN&gt;&lt;SPAN&gt;&gt;&lt;/SPAN&gt;DRBINTRFCRPRTS&lt;SPAN&gt;&lt;SPAN&gt;VirtualDirectoryName&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;--
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;Authentication Bitmask Values
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Constant&lt;SPAN&gt;          &lt;/SPAN&gt;Value&lt;SPAN&gt;       &lt;/SPAN&gt;Description 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_AUTH_ANONYMOUS&lt;SPAN&gt; &lt;/SPAN&gt;0x00000001&lt;SPAN&gt;  &lt;/SPAN&gt;Anonymous authentication available. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_AUTH_BASIC&lt;SPAN&gt;     &lt;/SPAN&gt;0x00000002&lt;SPAN&gt;  &lt;/SPAN&gt;Basic authentication available. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_AUTH_NT&lt;SPAN&gt;        &lt;/SPAN&gt;0x00000004&lt;SPAN&gt;  &lt;/SPAN&gt;Windows authentication schemes available. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;--&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;AuthFlagValue&lt;/SPAN&gt;&lt;SPAN&gt;&gt;&lt;/SPAN&gt;0x00000001&lt;SPAN&gt;&lt;SPAN&gt;AuthFlagValue&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;DefaultLogonDomain&lt;/SPAN&gt;&lt;SPAN&gt;&gt;&lt;/SPAN&gt;YourCorporatePDC&lt;SPAN&gt;&lt;SPAN&gt;DefaultLogonDomain&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;--
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;Access Bitmask Values
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Constant&lt;SPAN&gt;          &lt;/SPAN&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;Value&lt;SPAN&gt;       &lt;/SPAN&gt;Description 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_ACCESS_READ&lt;SPAN&gt;    &lt;/SPAN&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;0x00000001&lt;SPAN&gt;  &lt;/SPAN&gt;Allow read access. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_ACCESS_WRITE&lt;SPAN&gt;   &lt;/SPAN&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;0x00000002&lt;SPAN&gt;  &lt;/SPAN&gt;Allow write access. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_ACCESS_EXECUTE&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;0x00000004&lt;SPAN&gt;  &lt;/SPAN&gt;Allow file execution (includes script permission). 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_ACCESS_SOURCE&lt;SPAN&gt;  &lt;/SPAN&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;0x00000010&lt;SPAN&gt;  &lt;/SPAN&gt;Allow source access. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_ACCESS_SCRIPT&lt;SPAN&gt;  &lt;/SPAN&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;0x00000200&lt;SPAN&gt;  &lt;/SPAN&gt;Allow script execution. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_ACCESS_NO_REMOTE_WRITE&lt;SPAN&gt;     &lt;/SPAN&gt;0x00000400&lt;SPAN&gt;  &lt;/SPAN&gt;Local write access only. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_ACCESS_NO_REMOTE_READ&lt;SPAN&gt;      &lt;/SPAN&gt;0x00001000&lt;SPAN&gt;  &lt;/SPAN&gt;Local read access only. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_ACCESS_NO_REMOTE_EXECUTE&lt;SPAN&gt;   &lt;/SPAN&gt;0x00002000&lt;SPAN&gt;  &lt;/SPAN&gt;Local execution only. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_ACCESS_NO_REMOTE_SCRIPT&lt;SPAN&gt;    &lt;/SPAN&gt;0x00004000&lt;SPAN&gt;  &lt;/SPAN&gt;Local host access only. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;--&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;AccessFlagValue&lt;/SPAN&gt;&lt;SPAN&gt;&gt;&lt;/SPAN&gt;0x00000205&lt;SPAN&gt;&lt;SPAN&gt;AccessFlagValue&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;--
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;SSL Bitmask Values
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Constant&lt;SPAN&gt;                &lt;/SPAN&gt;Value&lt;SPAN&gt;       &lt;/SPAN&gt;Description 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_ACCESS_SSL&lt;SPAN&gt;           &lt;/SPAN&gt;0x00000008&lt;SPAN&gt;  &lt;/SPAN&gt;SSL permissions required. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_ACCESS_NEGO_CERT&lt;SPAN&gt;     &lt;/SPAN&gt;0x00000020&lt;SPAN&gt;  &lt;/SPAN&gt;Client certificate optional. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_ACCESS_REQUIRE_CERT&lt;SPAN&gt;  &lt;/SPAN&gt;0x00000040&lt;SPAN&gt;  &lt;/SPAN&gt;Client certificate required. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_ACCESS_MAP_CERT&lt;SPAN&gt;      &lt;/SPAN&gt;0x00000080&lt;SPAN&gt;  &lt;/SPAN&gt;Server will map client certificate to Windows account. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_ACCESS_SSL128&lt;SPAN&gt;        &lt;/SPAN&gt;0x00000100&lt;SPAN&gt;  &lt;/SPAN&gt;SSL permissions with 128-bit key required. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;--&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;AccessSSLFlagValue&lt;/SPAN&gt;&lt;SPAN&gt;&gt;&lt;/SPAN&gt;0x00000000&lt;SPAN&gt;&lt;SPAN&gt;AccessSSLFlagValue&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;DefaultDocument&lt;/SPAN&gt;&lt;SPAN&gt;&gt;&lt;/SPAN&gt;default.asp&lt;SPAN&gt;&lt;SPAN&gt;DefaultDocument&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;--&lt;SPAN&gt;  &lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;Directory Browsing Bitmask Values
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Constant&lt;SPAN&gt;                &lt;/SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;Value&lt;SPAN&gt;       &lt;/SPAN&gt;Description 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_DIRBROW_SHOW_DATE&lt;SPAN&gt;    &lt;/SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;0x00000002&lt;SPAN&gt;  &lt;/SPAN&gt;Show date. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_DIRBROW_SHOW_TIME&lt;SPAN&gt;    &lt;/SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;0x00000004&lt;SPAN&gt;  &lt;/SPAN&gt;Show time. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_DIRBROW_SHOW_SIZE&lt;SPAN&gt;    &lt;/SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;0x00000008&lt;SPAN&gt;  &lt;/SPAN&gt;Show file size. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_DIRBROW_SHOW_EXTENSION&lt;SPAN&gt;     &lt;/SPAN&gt;0x00000010&lt;SPAN&gt;  &lt;/SPAN&gt;Show file name extension. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_DIRBROW_LONG_DATE&lt;SPAN&gt;          &lt;/SPAN&gt;0x00000020&lt;SPAN&gt;  &lt;/SPAN&gt;Show full date. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_DIRBROW_LOADDEFAULT&lt;SPAN&gt;        &lt;/SPAN&gt;0x40000000&lt;SPAN&gt;  &lt;/SPAN&gt;Load default page, if it exists. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;MD_DIRBROW_ENABLED&lt;SPAN&gt;            &lt;/SPAN&gt;0x80000000&lt;SPAN&gt;  &lt;/SPAN&gt;Enable directory browsing. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;--&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;DirBrowseFlagValue&lt;/SPAN&gt;&lt;SPAN&gt;&gt;&lt;/SPAN&gt;0xC000003E&lt;SPAN&gt;&lt;SPAN&gt;DirBrowseFlagValue&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;--
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;For details of these properties and their bit mask values visit
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;http://www.microsoft.com/windows2000/en/server/iis/default.asp?url=/windows2000/en/server/iis/htm/asp/apro1cms.htm
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;--&lt;/SPAN&gt;&lt;SPAN&gt;&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;WebSettings&lt;/SPAN&gt;&lt;SPAN&gt;&gt;&lt;/SPAN&gt;&lt;SPAN&gt; 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;The beauty of bitmask values is that you can add them to have your own custom requirements. For example, if I want to have both Anonymous authentication (bitmask: 0x00000001) and Integrated Windows authentication (bitmask: 0x00000004), I can set the AuthFlagValue to 0x00000005. Similarly when I am setting AccessFlagValue to 0x00000205, I am allowing script execution (bitmask: 0x00000200), file execution (bitmask: 0x00000004) and read access (bitmask: 0x00000001). Quite neat. Huh? 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;The next task was to have a class that can hold the values read from the config file. There are several ways to do this but it is out of the scope of the present discussion. In the meanwhile, you may look at the following skeleton and have your own constructor implementation to populate from the config file.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;U&gt;&lt;SPAN&gt;WebSettings.cs
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/U&gt;&lt;/B&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;using&lt;/SPAN&gt;&lt;SPAN&gt; System;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;using&lt;/SPAN&gt;&lt;SPAN&gt; System.IO;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;using&lt;/SPAN&gt;&lt;SPAN&gt; System.Xml;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;using&lt;/SPAN&gt;&lt;SPAN&gt; System.Globalization;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;namespace&lt;/SPAN&gt;&lt;SPAN&gt; WebHosting {
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;class&lt;/SPAN&gt; WebSettings {
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;// Private&lt;SPAN&gt;  &lt;/SPAN&gt;variables defined
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;//
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;string&lt;/SPAN&gt; actualDirectory = &lt;SPAN&gt;null&lt;/SPAN&gt;;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;string&lt;/SPAN&gt; serverName = &lt;SPAN&gt;null&lt;/SPAN&gt;;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;string&lt;/SPAN&gt; iisRootPath = &lt;SPAN&gt;null&lt;/SPAN&gt;;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;string&lt;/SPAN&gt; virtualDirectorySchemaName = &lt;SPAN&gt;null&lt;/SPAN&gt;;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;string&lt;/SPAN&gt; webServicePath = &lt;SPAN&gt;null&lt;/SPAN&gt;;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;string&lt;/SPAN&gt; activeDirectoryRootPath = &lt;SPAN&gt;null&lt;/SPAN&gt;;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;string&lt;/SPAN&gt; virtualDirectoryName = &lt;SPAN&gt;null&lt;/SPAN&gt;;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;int&lt;/SPAN&gt; authFlagValue = 0;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;string&lt;/SPAN&gt; defaultLogonDomain = &lt;SPAN&gt;null&lt;/SPAN&gt;;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;int&lt;/SPAN&gt; accessFlagValue = 0;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;int&lt;/SPAN&gt; accessSSLFlagValue = 0;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;string&lt;/SPAN&gt; defaultDocument = &lt;SPAN&gt;null&lt;/SPAN&gt;;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;int&lt;/SPAN&gt; dirBrowseFlagValue = 0;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; WebSettings() {
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;// Populate from the Xml Config File
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;//
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;The last and the most important task was to tell the IIS somehow about our intentions. “Active Directory” came to the rescue here. .NET provides a System.DirectoryServices namespace which gives us a way to control Active Directory objects. As Microsoft puts “&lt;I&gt;The &lt;B&gt;System.DirectoryServices&lt;/B&gt; namespace provides easy access to Active Directory from managed code. The namespace contains two component classes, DirectoryEntry and DirectorySearcher, which use the Active Directory Services Interfaces (ADSI) technology&lt;/I&gt;.”
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;So I had the HostWeb.cs file, which contained the entry point of the console application. When run, it looks for the virtual directory and if not found, creates one. Then it sets the properties specified in the config file in terms of the bitmask values and commits the changes. If in future, you need to change some of the properties, you can change it in the config file and rerun the application to apply the new values.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;U&gt;&lt;SPAN&gt;HostWeb.cs
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/U&gt;&lt;/B&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;using&lt;/SPAN&gt;&lt;SPAN&gt; System;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;using&lt;/SPAN&gt;&lt;SPAN&gt; System.IO;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;using&lt;/SPAN&gt;&lt;SPAN&gt; System.DirectoryServices;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;namespace&lt;/SPAN&gt;&lt;SPAN&gt; WebHosting {
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt;&lt;SPAN&gt;public&lt;/SPAN&gt; &lt;SPAN&gt;class&lt;/SPAN&gt; HostWeb {
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;[STAThread]
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;static&lt;/SPAN&gt; &lt;SPAN&gt;void&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;Main&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;SPAN&gt;string&lt;/SPAN&gt;[] args) {
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;   &lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;WebSettings ws = &lt;SPAN&gt;null&lt;/SPAN&gt;;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;                  &lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt;try&lt;/SPAN&gt;&lt;SPAN&gt; {
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;     &lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;ws = &lt;SPAN&gt;new&lt;/SPAN&gt; WebSettings();
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt;catch&lt;/SPAN&gt;&lt;SPAN&gt; (Exception e) {
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;// Your exception handling
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;return&lt;/SPAN&gt;&lt;SPAN&gt;;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;// Create web service
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;//
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;try&lt;/SPAN&gt;&lt;SPAN&gt; {
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;createVirtualDirectory(ws);
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;catch&lt;/SPAN&gt;&lt;SPAN&gt; (Exception e) {
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;// Your exception handling
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;return&lt;/SPAN&gt;&lt;SPAN&gt;;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;static&lt;/SPAN&gt; &lt;SPAN&gt;void&lt;/SPAN&gt; createVirtualDirectory (WebSettings ws) { 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;DirectoryEntry iisWebService = &lt;SPAN&gt;null&lt;/SPAN&gt;;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;DirectoryEntry webServiceRoot = &lt;SPAN&gt;null&lt;/SPAN&gt;;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;DirectoryEntry virDir = &lt;SPAN&gt;null&lt;/SPAN&gt;;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;try&lt;/SPAN&gt;&lt;SPAN&gt; {
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;iisWebService = &lt;SPAN&gt;new&lt;/SPAN&gt; DirectoryEntry(ws.iisRootPath + ws.serverName + ws.webServicePath);
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;webServiceRoot = iisWebService.Children.Find(ws.activeDirectoryRootPath, ws.virtualDirectorySchemaName); 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;catch&lt;/SPAN&gt;&lt;SPAN&gt; (Exception e) {
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;throw&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;new&lt;/SPAN&gt; Exception("Could not connect to " + ws.serverName + " or its child " + ws.activeDirectoryRootPath + " in schema " + ws.virtualDirectorySchemaName, e);
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;}&lt;SPAN&gt;                 &lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;// Find the virtual directory, if not found, create it
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;//
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;try&lt;/SPAN&gt;&lt;SPAN&gt; {
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;virDir = webServiceRoot.Children.Find(ws.virtualDirectoryName, ws.virtualDirectorySchemaName);
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;catch&lt;/SPAN&gt;&lt;SPAN&gt; (System.IO.DirectoryNotFoundException) {
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;virDir = webServiceRoot.Children.Add(ws.virtualDirectoryName, ws.virtualDirectorySchemaName);
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;virDir.CommitChanges();
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;catch&lt;/SPAN&gt;&lt;SPAN&gt; (Exception e) {
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;Console.WriteLine(e.ToString());
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;return&lt;/SPAN&gt;&lt;SPAN&gt;;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;// Set Access depending on bit mask values
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;//
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (virDir != &lt;SPAN&gt;null&lt;/SPAN&gt;) {
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;try&lt;/SPAN&gt;&lt;SPAN&gt; {&lt;SPAN&gt;     &lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;// Authentication
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;//
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;virDir.Properties["AuthFlags"].Value = ws.authFlagValue;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;virDir.Properties["DefaultLogonDomain"].Value = ws.defaultLogonDomain;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;// Access Type
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;//
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;virDir.Properties["AccessFlags"].Value = ws.accessFlagValue;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;// Set SSL
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;//
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;virDir.Properties["AccessSSLFlags"].Value = ws.accessSSLFlagValue;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;// Default Path and Page to be displayed
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;//
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;virDir.Properties["Path"].Value = ws.actualDirectory;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;virDir.Properties["DefaultDoc"].Value = ws.defaultDocument;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;// Directory Browsing
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;//
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;virDir.Properties["DirBrowseFlags"].Value = ws.dirBrowseFlagValue;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;// Commit Changes
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;//
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;virDir.CommitChanges();
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;webServiceRoot.CommitChanges();
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;iisWebService.CommitChanges();
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;catch&lt;/SPAN&gt;&lt;SPAN&gt; (Exception e) {
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;Console.WriteLine(e.ToString());
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;          &lt;/SPAN&gt;throw&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;new&lt;/SPAN&gt; Exception("Virtual Directory " + ws.virtualDirectoryName + " can not be created or updated", e);
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;DIV&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN&gt;Summary&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN&gt;: In this article, we learned how to create a virtual directory in IIS server from .NET environment using ADSI technology. We used classes from System.DirectoryServices namespace and used the Microsoft documentation to set the properties of the virtual directory in terms of bitmask values.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN&gt;N.B.&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN&gt;: All the code above was fully tested in .NET 1.0 environment. If you find any difficulty running the above code, kindly set a note to the author and he’ll correct the code with all the due appreciation to the sender.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Ram Dash is a ASP.NET, C# developer and can be reached at “ram underscore dash at fastmail dot fm”. If you wish to reprint this article, a note with the link to the author would suffice.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=21735" width="1" height="1"&gt;</description></item><item><title>Unified Search Engine</title><link>http://dotnetjunkies.com/WebLog/ramdash/archive/2004/08/11/21733.aspx</link><pubDate>Wed, 11 Aug 2004 15:44:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:21733</guid><dc:creator>rpdash</dc:creator><slash:comments>4</slash:comments><comments>http://dotnetjunkies.com/WebLog/ramdash/comments/21733.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/ramdash/commentrss.aspx?PostID=21733</wfw:commentRss><description>&lt;P&gt;&lt;B&gt;&lt;SPAN&gt;Quick and Dirty method to Combine MS Search Service, Indexing Service and SQL Server to provide a unified search engine for your ASP.NET website
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/B&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Recently I was developing a site for a company and as usual they needed me to write a search engine. They had the contents in .aspx pages, not a problem, but they also had forums whose contents were collated in a database table, in a column to be precise. They wanted me to display the results from these two sources through a common search engine. Since I had little time to write a search engine of my own, I put the power of MS Search Service, Indexing Service and SQL Server together to do the task for me. There is a lot of scope for enhancement but here is how you can implement a very basic yet powerful search engine of your own.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN&gt;STEP I: Create a Web Catalog in Indexing Service
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/B&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;By default, the indexing service has two catalogs, one for the file system (&lt;I&gt;System&lt;/I&gt;) and one for the default web site (&lt;I&gt;Web&lt;/I&gt;).
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;If &lt;I&gt;Web&lt;/I&gt; catalog is not present, you can easily create one.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;1. Open &lt;I&gt;Control Panel&lt;/I&gt; --&gt; &lt;I&gt;Administrative Tools&lt;/I&gt; --&gt; &lt;I&gt;Computer Management&lt;/I&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;2. Scroll down to &lt;I&gt;Computer Management&lt;/I&gt; --&gt; &lt;I&gt;Services and Applications&lt;/I&gt; --&gt; &lt;I&gt;Indexing Service&lt;/I&gt; in the MMC
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;3. Right click &lt;I&gt;Indexing Service&lt;/I&gt; and choose &lt;I&gt;New&lt;/I&gt; --&gt; &lt;I&gt;Catalog&lt;/I&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;4. In the name field give &lt;I&gt;Web&lt;/I&gt; and choose &lt;I&gt;C:\Inetpub&lt;/I&gt; as the location
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;5. Right click the newly created catalog, choose &lt;I&gt;Properties&lt;/I&gt;. Click on the &lt;I&gt;Tracking&lt;/I&gt; tab of the properties window. Select "&lt;I&gt;Default Web Site&lt;/I&gt;" as the WWW server.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;6. Restart &lt;I&gt;Indexing Service&lt;/I&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;7. Go to &lt;I&gt;Computer Management&lt;/I&gt; --&gt; &lt;I&gt;Services and Applications&lt;/I&gt; --&gt; &lt;I&gt;Services&lt;/I&gt; and configure &lt;I&gt;Indexing Service&lt;/I&gt; as &lt;I&gt;Automatic&lt;/I&gt; if it is &lt;I&gt;Manual&lt;/I&gt; or &lt;I&gt;Disabled&lt;/I&gt;.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN&gt;STEP II: Optimize ASPX and ASCX files for full-text search
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/B&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;By default, the *.aspx and *.ascx file types are treated as text files which are not optimized for searching by the Indexing Service. To optimize searching for these two file types copy the following into a new .reg file and run it in your computer. &lt;B&gt;The customary warning&lt;/B&gt;: Editing registry incorrectly may prohibit your computer to run properly. Edit the registry at your own risk. I may not be held responsible for the damage you do to your computer by incorrectly following the steps below.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;   &lt;/SPAN&gt;REGEDIT4
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;   &lt;/SPAN&gt;[HKEY_CLASSES_ROOT\.aspx\PersistentHandler]
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;   &lt;/SPAN&gt;@="{eec97550-47a9-11cf-b952-00aa0051fe20}"
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;   &lt;/SPAN&gt;[HKEY_CLASSES_ROOT\.ascx\PersistentHandler]
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;   &lt;/SPAN&gt;@="{eec97550-47a9-11cf-b952-00aa0051fe20}"
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;You must have &lt;I&gt;Index files with Unknown Extensions&lt;/I&gt; enabled. To enable this, right click on &lt;I&gt;Indexing Service&lt;/I&gt;, choose &lt;I&gt;Properties&lt;/I&gt; and click on &lt;I&gt;Generation&lt;/I&gt; tab on the window. Check &lt;I&gt;Index files with Unknown Extensions&lt;/I&gt; checkbox. Restart the computer, stop &lt;I&gt;Indexing Service&lt;/I&gt;, delete all the contents of the &lt;I&gt;catalog.wci&lt;/I&gt; folder (&lt;B&gt;not the folder itself&lt;/B&gt;) corresponding to your catalog (in this case &lt;I&gt;C:\Inetpub\catalog.wci&lt;/I&gt;), start the &lt;I&gt;Indexing Service&lt;/I&gt; and allow it to rebuild the catalog.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN&gt;STEP III: Using Full-Text Searches directly in ASP.NET Applications
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/B&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;This is not actually a step but a side step where you can take a pause for a moment and test whether your newly created catalog is returning some results. If you don’t have a database to worry about, then this might be your last step unless you want to link the &lt;I&gt;Indexing Service&lt;/I&gt; with &lt;I&gt;SQL Server&lt;/I&gt;.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Indexing service exposes itself via the OLEDB provider MSIDXS. You can take the full advantage of the server in your ASP.NET application via ADO.NET. If&lt;SPAN&gt;  &lt;/SPAN&gt;you have a TextBox (TextBox1), a Button (Button1) and a DataGrid (DataGrid1) on your web form and the &lt;I&gt;Web&lt;/I&gt; catalog in place, this might as well be the content of your button click handler:
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;using System.Data;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;using System.Data.OleDb;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;…….
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;…….
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;private void Button1_Click(object sender, EventArgs e)
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;{
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;string strCatalog = "Web";
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;string strQuery = "Select Filename, Rank, VPath from SCOPE() where FREETEXT('" + TextBox1.Text + "')";
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;string connString = "Provider=MSIDXS.1;Integrated Security .='';Data Source='" + strCatalog + "'";
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;OleDbConnection Connection = new OleDbConnection(connString);
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;Connection.Open();
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;OleDbDataAdapter da = new OleDbDataAdapter(strQuery, Connection);
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;DataSet ds = new DataSet();
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;da.Fill(ds);
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;Connection.Close();
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;DataView source= new DataView(ds.Tables[0]);
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;DataGrid1.DataSource = source;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;DataGrid1.DataBind();
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN&gt;STEP IV: Link Indexing Service with SQL Server
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/B&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;The next step is to link the &lt;I&gt;Indexing Service &lt;/I&gt;with your &lt;I&gt;SQL Server&lt;/I&gt;. Open &lt;I&gt;Query Analyzer&lt;/I&gt; or your favourite SQL script editor. Run the following script. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;EXEC
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;sp_addlinkedserver FTIndexWeb, 'Index Server', 'MSIDXS', 'Web'
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;GO&lt;/SPAN&gt;&lt;SPAN&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;where &lt;I&gt;FTIndexWeb&lt;/I&gt; is the chosen linked server name, and &lt;I&gt;Web&lt;/I&gt; is the catalog name you created in STEP I.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN&gt;STEP V: Querying Indexing Service via SQL Server
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/B&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Let's modify the previous query and run it in SQL server. Run the following query in &lt;I&gt;Query Analyzer&lt;/I&gt;.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;SELECT Q.FileName, Q.Rank, Q.VPath 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;FROM OpenQuery(
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;FTIndexWeb,
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;'Select Filename, Rank, VPath 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;from SCOPE() 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;where FREETEXT(''&lt;/SPAN&gt;&lt;SPAN&gt;Calcutta&lt;/SPAN&gt;&lt;SPAN&gt;'') 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;ORDER BY Rank DESC'
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;              &lt;/SPAN&gt;) AS Q&lt;/SPAN&gt;&lt;SPAN&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Replace &lt;I&gt;FTIndexWeb&lt;/I&gt; with whatever linked server name you chose in step IV and &lt;/SPAN&gt;&lt;I&gt;&lt;SPAN&gt;Calcutta&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt; with your search keyword(s).
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN&gt;STEP VI: Enabling a table/column in SQL Server for full-text searches
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/B&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Open &lt;I&gt;Enterprise Manager&lt;/I&gt;. Browse to &lt;I&gt;Console Root&lt;/I&gt;--&gt; &lt;I&gt;Microsoft SQL Servers&lt;/I&gt; --&gt;  --&gt;  --&gt; &lt;I&gt;Databases&lt;/I&gt; --&gt;  --&gt; &lt;I&gt;Tables&lt;/I&gt;. Check two things before you proceed.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;1. The table where you want full-text searching enabled, must have some unique constraint. If a primary key or a unique constraint is not present, create an "ID" column and apply a unique constraint.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;2. &lt;I&gt;Microsoft Search Service&lt;/I&gt; (mssearch.exe) must have been enabled and running in your computer. If not, browse to &lt;I&gt;Computer Management&lt;/I&gt; --&gt; &lt;I&gt;Services and Applications&lt;/I&gt; --&gt; &lt;I&gt;Services&lt;/I&gt; in &lt;I&gt;Computer Management MMC&lt;/I&gt; and configure &lt;I&gt;Microsoft Search Service&lt;/I&gt; as Automatic and start the service.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;On the &lt;I&gt;Enterprise Manager MMC&lt;/I&gt;, right click on your table and choose &lt;I&gt;Full-Text Index Table&lt;/I&gt; --&gt; &lt;I&gt;Define Full-Text Indexing on a table&lt;/I&gt;. If the option is grayed out, check #2 above.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Click &lt;I&gt;Next&lt;/I&gt; on the popped up wizard .Choose the unique index and click &lt;I&gt;Next&lt;/I&gt;. Choose the columns where you want indexing enabled. Click &lt;I&gt;Next&lt;/I&gt;. Give the catalog a name and specify a physical location to store the catalog. Click &lt;I&gt;Next&lt;/I&gt;. If you want the control over how and when the catalog is filled (full or incremental) click on &lt;I&gt;New Catalog Schedule&lt;/I&gt;. After configuring it, come back to &lt;I&gt;Full-Text Indexing Wizard&lt;/I&gt; and click &lt;I&gt;Next&lt;/I&gt;. Click &lt;I&gt;Finish&lt;/I&gt;. The wizard takes a minute or two to setup the catalog.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN&gt;STEP VII: Querying Full-Text Catalog in SQL Server
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/B&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Let’s test the newly created catalog in &lt;I&gt;SQL Server&lt;/I&gt;. Run the following query.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;SELECT FT_TBL.subject, KEY_TBL.RANK, FT_TBL.topicid
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;FROM forums_topics AS FT_TBL,
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;CONTAINSTABLE ( forums_topics
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;                &lt;/SPAN&gt;,&lt;SPAN&gt;   &lt;/SPAN&gt;message
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;                &lt;/SPAN&gt;, '"&lt;/SPAN&gt;&lt;SPAN&gt;Calcutta&lt;/SPAN&gt;&lt;SPAN&gt;"' )
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;AS KEY_TBL
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;WHERE FT_TBL.topicid = KEY_TBL.[KEY]
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;ORDER BY KEY_TBL.RANK DESC
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;&lt;SPAN&gt;Forums_Topics&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt; is the table name and &lt;I&gt;Message&lt;/I&gt; is the column name on which full-text catalog is built. Replace &lt;/SPAN&gt;&lt;I&gt;&lt;SPAN&gt;Calcutta&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt; with your search keyword(s).
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN&gt;STEP VIII: Combining the results
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/B&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;The steps to combine the results would be to
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;1. Create a temporary table
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;2. Insert the results of the first query
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;3. Insert the results of the second query
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;4. Query the temp table
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;5. Drop the temp table
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;We need a stored procedure for this and here it is:
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;CREATE PROCEDURE sp_Accounts_SearchSite
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;@FreeText varchar (255)
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;AS
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;SET NOCOUNT ON
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;CREATE TABLE #tempresults(
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;ID int IDENTITY,
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;FileNames varchar (255),
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Rank int,
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;VPath varchar(255))
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;DECLARE @sql nvarchar(1000)
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;SET @sql = N'INSERT INTO #tempresults(FileNames, Rank, VPath) ' + CHAR(13) +
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;N'SELECT Q.FileName As FileNames, Q.Rank As Rank, Q.VPath As VPath ' + CHAR(13) +
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;N'FROM OpenQuery(FTIndexWeb, ''Select Filename, Rank, VPath from SCOPE() where FREETEXT(''''' + @FreeText + ''''')'' ) AS Q'
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;EXECUTE sp_executesql @sql
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;SET @SQL = N'INSERT INTO #tempresults(FileNames, Rank, VPath) ' + CHAR(13) +
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;N'SELECT FT_TBL.subject As FileNames, KEY_TBL.RANK As Rank, FT_TBL.topicid As VPath ' + CHAR(13) +
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;N'FROM forums_topics AS FT_TBL, ' + CHAR(13) +
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;N'CONTAINSTABLE ( forums_topics ' + CHAR(13) +
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;N', message' + CHAR(13) +
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;N', ''"' + @FreeText + '"'' ) ' + CHAR(13) +
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;N'AS KEY_TBL' + CHAR(13) +
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;N'WHERE FT_TBL.topicid = KEY_TBL.[KEY] '
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;EXECUTE sp_executesql @sql
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;SELECT FileNames, Rank, VPath from #tempresults ORDER BY Rank DESC
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;DROP TABLE #tempresults
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;SET NOCOUNT OFF
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;GO
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN&gt;STEP IX: Modify your .NET Application
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/B&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;The rest is a piece of cake. Your Button click handler should now look like this:
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;using System.Data;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;using System.Data.SqlClient; // Bye Bye OleDb
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;…….
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;…….
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;private void Button1_Click(object sender, EventArgs e)
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;{
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;string connString = @"server=****;database=****;uid=****;pwd=****;";
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;string storedProcName = "sp_Accounts_SearchSite";
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;SqlConnection Connection = new SqlConnection(connString);
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;Connection.Open();
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;SqlCommand command = new SqlCommand( storedProcName, Connection );
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;command.CommandType = CommandType.StoredProcedure;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;command.Parameters.Add("@FreeText", TextBox1.Text);
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;SqlDataAdapter sqlDA = new SqlDataAdapter();
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;sqlDA.SelectCommand = command;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;DataSet dataSet = new DataSet();
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;sqlDA.Fill( dataSet, "mySearchResults" );
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;Connection.Close();
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;DataView source = new DataView(dataSet.Tables[0]);
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;DataGrid1.DataSource = source;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;      &lt;/SPAN&gt;DataGrid1.DataBind();
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;}
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;The grid will show results from your file system as well as from your database tables. With everything indexed, the result is lightening fast for hundreds of results if not millions.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Many of you might think that there remains a lot to be told. But didn’t I say it was quick and dirty? No pun intended. To learn more about how to compose your own queries for full-text searches, visit the MSDN website at &lt;A href="http://msdn.microsoft.com/"&gt;http://msdn.microsoft.com&lt;/A&gt;. With little logic of your own, you can have a nice search engine which would query different sources differently based on your own requirements. For example, you can redefine the scope (Deep Copy Traversal, Swallow Copy Traversal ring a bell?) and can do regular expression searches. You are the one to set your own limit.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;DIV&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Ram Dash is a ASP.NET, C# developer and can be reached at “ram underscore dash at fastmail dot fm”. If you wish to reprint this article, a note with the link to the author would suffice.
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=21733" width="1" height="1"&gt;</description></item></channel></rss>