IIS Metabase and programmatic administration in C#

Modification of IIS Metabase in C#

Introduction

System.DirectoryServices namespace can be used to access Internet Information Service(IIS). You can create, delete and change the properties of web servers, virtual directories, directories and files. Also you can invoke IIS methods.

This article will tell basic concepts about IIS Metabase and some programmatic administration of IIS. The programmatic administration will include a tip about managing IIsWebDirectory and IIsWebFile.

IIS Metabase

IIS Metabase is a structure where IIS configuration settings are stored. The metabase configuration and schema for IIS 4.0 and IIS 5.0 were stored in a binary file, but from IIS6.0 the configuration and setting is stored in single binary file (MetaBase.bin), with plain text, Extensible Markup Language (XML)-formatted files named MetaBase.xml and MBSchema.xml.  You can navigate through the IIS Metabase using MetaEdit or Metabase Explorer

The Metabase is based on a hierarchical design with inheritance. Each object in the metabase has a KeyType. The KeyType property specifies the type of metabase key.

Each property of an object has a set data type and can be configured at specific locations. For example, XoverTableFile can only have string value. And this property can be configured only at IIsNntpServer. You can fing the full list from MSDN.

Programmatic Administration

Let's create a function to create a new virtual directory and set some properties of the new virtual directory.

1. public void CreateNewVirtualDirectory(int ServerId, string VirtualDirName, string Path, bool AccessScript){
2.      DirectoryEntry Parent = new DirectoryEntry(@"IIS://localhost/W3SVC/" + ServerId.ToString() + "/Root");
3.      DirectoryEntry NewVirtualDir;
4.      NewVirtualDir = Parent.Children.Add(VirtualDirName, "IIsWebVirtualDir");
5.      NewVirtualDir.Properties["Path"][0] = Path;
6.      NewVirtualDir.Properties["AccessScript"][0] = AccessScript;
7.      NewVirtualDir.CommitChanges();
8. }

You can call this function like

    CreateNewVirtualDirectory(1, "MyNewVirtualDirectory", @"C:\Inetpub\wwwroot\MyDir", true)

At the line 2, we are accessing the parent object that we will create the new virtual directory under. Every web server has a unique ServerId. At the line 4, we are adding the new virtual directory. At the line 5 and line 6, we are setting properties of the new virtual directory. Path property specifies the physical path associated with a virtual directory. AccessScript specifies if dymanic contect will be executed. (e.g. asp, aspx, cgi). At last, we must commit changes. Otherwise the canges will not be written to the metabase.

Now, let's write a function to delete a virtual directory. We will use the Delete method of the IIS. The parameters of this method are KeyType and Object Name.

public void DeleteVirtualDirectory(int ServerId, string VirtualDirName)
{
     DirectoryEntry Parent = new DirectoryEntry(@"IIS://localhost/W3SVC/" + ServerId.ToString() + "/Root");
     Object[] Parameters = {"IIsWebVirtualDir",VirtualDirName};
     Parent.Invoke("Delete",Parameters );
}

Directories and Files

When you create a new directory or a file under a virtual directory, the directories or files are not created under the IIS Metabase. If you want to change the metabase properties of them, you will get an error like "The system cannot find the path specified".
If you want to change the metabase properties of this directory or file, first you must create the directory or file under the IIS Metabase.

Directory Strategy

The path of the file or directory might be like /Dir1/Dir2/Dir3. So you must create each directory under IIS Metabase. You can use the function below to create IIsWebDirectory recursively.

You can call the function from your program, and change the properties.

System.DirectoryServices.DirectoryEntry De = new DirectoryEntry();
De.Path = @"IIS://localhost/W3SVC/1/ROOT/Dir1/Dir2/Dir3";
RecursiveSetIIsWebDirectory(De);
De.Properties["AccessFlags"][0] = 513;
De.CommitChanges();

File Strategy

For the file, the first object will be IIsWebFile, and all the parents will be IIsWebDirectory. For this, I have added depth parameter to the function. The function must be called with depth parameter equal to 0.

You can call the function from your program, and change the properties.

System.DirectoryServices.DirectoryEntry De = new DirectoryEntry();
De.Path = @"IIS://localhost/W3SVC/1/ROOT/Dir1/Dir2/Dir3/file.txt";
RecursiveSetIIsWebFile(De, 0);
De.Properties["AccessFlags"][0] = 513;
De.CommitChanges();

The RecursiveSetIIsWebDirectory and RecursiveSetIIsWebFile functions are attached in the sample attachments with explanation.

Attachments:

Project Files: iis_metabase_project.zip

Source Files: iis_metabase_src.zip

Close    To Top
  • Prev Article-Programming:
  • Next Article-Programming:
  • Now: Tutorial for Web and Software Design > Programming > dotnet > Programming Content
    Photoshop Tutorial
     

    Special Effect

      3D Effect
      Photoshop Articles
    Programming Tutorial
     

    C/C++ Tutorial

      Visual Basic
      C# Tutorial
    Database Tutorial
     

    MySQL Tutorial

      MS SQL Tutorial
      Oracle Tutorial
    Geek Tutorial
     

    Blogging Tutorial

      RSS Tutorial
      Podcasting Tutorial
    Graphic Design Tutorial
      Coreldraw Tutorial
      Illustrator Tutorial
      3D Tutorials
    Webmaster Articles
     

    Domain Service

      Web Hosting
      Site Promotion
    Java Tutorial/ Articles
     

    Java Servlets

      JavaEE Tutorial
     

    JavaBeans Tutorial

    XML Tutorial/ Articles
     

    XML Style

      AJAX Tutorial
      XML Mobile
    Flash Tutorial/ Articles
     

    Flash Video

      Action Script
      Flash Articles
    OS Tutorial/ Articles
      Linux Tutorial
      Symbian Tutorial
      MacOS Tutorial
    Personal Tech
      Hardware Tutorial
      Software Tutorial
      Online Auction