To change the configuration of an IIS server, you set properties in the IIS metabase, or add new nodes to a collection. A collection can apply to a Web service, a Web site, a virtual directory, and so on.
The following example shows you how to use the C# programming language to set a simple property in the IIS metabase.
To keep this code example concise, it does not include code access security (CAS) parameters or parameter checking. For more information, see Code Access Security and Validating User Input to Avoid Attacks. Additionally, you can instantiate your System.DirectoryServices.DirectoryEntry object with an authentication parameter.
Imports System Imports System.IO Imports System.DirectoryServices Imports System.Reflection Imports System.Runtime.InteropServices Imports System.Collections Module Program Sub Main(ByVal args() As String) ... End Sub ... End Module
using System; using System.IO; using System.DirectoryServices; using System.Reflection; using System.Runtime.InteropServices; using System.Collections; namespace System_DirectoryServices_DirectoryEntry_ConfigIIS { class Program { static void Main(string[] args) { ... SetSingleProperty("IIS://Localhost/W3SVC/555", "ServerBindings", ":8080:"); ... } ... static void SetSingleProperty(string metabasePath, string propertyName, object newValue) { // metabasePath is of the form "IIS://<servername>/<path>" // for example "IIS://localhost/W3SVC/1" // propertyName is of the form "<propertyName>", for example "ServerBindings" // value is of the form "<intStringOrBool>", for example, ":80:" Console.WriteLine("\nSetting single property at {0}/{1} to {2} ({3}):", metabasePath, propertyName, newValue, newValue.GetType().ToString()); try { DirectoryEntry path = new DirectoryEntry(metabasePath); PropertyValueCollection propValues = path.Properties[propertyName]; string oldType = propValues.Value.GetType().ToString(); string newType = newValue.GetType().ToString(); Console.WriteLine(" Old value of {0} is {1} ({2})", propertyName, propValues.Value, oldType); if (newType == oldType) { path.Properties[propertyName][0] = newValue; path.CommitChanges(); Console.WriteLine("Done"); } else Console.WriteLine(" Failed in SetSingleProperty; type of new value does not match property"); } catch (Exception ex) { if ("HRESULT 0x80005006" == ex.Message) Console.WriteLine(" Property {0} does not exist at {1}", propertyName, metabasePath); else Console.WriteLine("Failed in SetSingleProperty with the following exception: \n{0}", ex.Message); } } ... } }
The following example shows you how to use the C# programming language to add a new virtual directory called "MyVDir" in the default Web site. The Add() function is used in other examples in this section to create a Web site and an application pool.
This example requires Windows XP Professional Service Pack 2 or Windows Server 2003 Service Pack 1.
Note:
|
|---|
|
System.DirectoryServices can be used to get and set String and DWORD properties in the IIS metabase, and invoke most methods. However, you cannot add new nodes to a collection unless you are using Windows XP Professional with Service Pack 2 or Windows Server 2003 with Service Pack 1. |
To keep this code example concise, it does not include code access security (CAS) parameters or parameter checking. For more information, see Code Access Security and Validating User Input to Avoid Attacks. Additionally, you can instantiate your System.DirectoryServices.DirectoryEntry object with an authentication parameter.
Imports System Imports System.IO Imports System.DirectoryServices Imports System.Reflection Imports System.Runtime.InteropServices Imports System.Collections Module Program Sub Main(ByVal args() As String) ... CreateVDir("IIS://Localhost/W3SVC/1/Root", "MyVDir", "D:\Inetpub\Wwwroot") ... End Sub ... Sub CreateVDir(ByVal strMetabasePath As String, ByVal strVdirName As String, ByVal strPhysicalPath As String) ' strMetabasePath is of the form "IIS://<servername>/<service>/<siteID>/Root[/<vdir>]" ' For example: "IIS://localhost/W3SVC/1/Root" ' strVdirName is of the form "<name>", for example, "MyNewVDir" ' strPhysicalPath is of the form "<drive>:\<path>", for example, "C:\Inetpub\Wwwroot" Console.WriteLine(vbLf + "Creating virtual directory {0}/{1}, mapping the Root application to {2}:", strMetabasePath, strVdirName, strPhysicalPath) Try Dim objSite As New DirectoryEntry(strMetabasePath) Dim strClassName As String = objSite.SchemaClassName.ToString() If strClassName.EndsWith("Server") OrElse strClassName.EndsWith("VirtualDir") Then Dim objVdirs As DirectoryEntries = objSite.Children Dim objNewVdir As DirectoryEntry = objVdirs.Add(strVdirName, strClassName.Replace("Service", "VirtualDir")) objNewVdir.Properties("Path")(0) = strPhysicalPath objNewVdir.Properties("AccessScript")(0) = True ' These properties are necessary for an application to be created. objNewVdir.Properties("AppFriendlyName")(0) = strVdirName objNewVdir.Properties("AppIsolated")(0) = "1" objNewVdir.Properties("AppRoot")(0) = "/LM" + strMetabasePath.Substring(strMetabasePath.IndexOf("/", "IIS://".Length)) objNewVdir.CommitChanges() Console.WriteLine("Done.") Else Console.WriteLine("Failed. A virtual directory can only be created in a site or virtual directory node.") End If Catch exError As Exception Console.WriteLine("Failed in CreateVDir with the following exception: " + vbLf + "{0}", exError.Message) End Try End Sub ... End Module
using System; using System.IO; using System.DirectoryServices; using System.Reflection; using System.Runtime.InteropServices; using System.Collections; namespace System_DirectoryServices_DirectoryEntry_ConfigIIS { class Program { static void Main(string[] args) { ... CreateVDir("IIS://Localhost/W3SVC/1/Root", "MyVDir", "D:\\Inetpub\\Wwwroot"); ... } ... static void CreateVDir(string metabasePath, string vDirName, string physicalPath) { // metabasePath is of the form "IIS://<servername>/<service>/<siteID>/Root[/<vdir>]" // for example "IIS://localhost/W3SVC/1/Root" // vDirName is of the form "<name>", for example, "MyNewVDir" // physicalPath is of the form "<drive>:\<path>", for example, "C:\Inetpub\Wwwroot" Console.WriteLine("\nCreating virtual directory {0}/{1}, mapping the Root application to {2}:", metabasePath, vDirName, physicalPath); try { DirectoryEntry site = new DirectoryEntry(metabasePath); string className = site.SchemaClassName.ToString(); if ((className.EndsWith("Server")) || (className.EndsWith("VirtualDir"))) { DirectoryEntries vdirs = site.Children; DirectoryEntry newVDir = vdirs.Add(vDirName, (className.Replace("Service", "VirtualDir"))); newVDir.Properties["Path"][0] = physicalPath; newVDir.Properties["AccessScript"][0] = true; // These properties are necessary for an application to be created. newVDir.Properties["AppFriendlyName"][0] = vDirName; newVDir.Properties["AppIsolated"][0] = "1"; newVDir.Properties["AppRoot"][0] = "/LM" + metabasePath.Substring(metabasePath.IndexOf("/", ("IIS://".Length))); newVDir.CommitChanges(); Console.WriteLine(" Done."); } else Console.WriteLine(" Failed. A virtual directory can only be created in a site or virtual directory node."); } catch (Exception ex) { Console.WriteLine("Failed in CreateVDir with the following exception: \n{0}", ex.Message); } } ... } }
Note: