Dinamically adding multiple identities (hostnames) to a IIS WebSite

Posted on 2008-06-13
Last Modified: 2013-12-17
Hi, below is a part of a code to create a new IIS website on C#.
The code works perfectly.
I need to put multiple identities on the "ServerBindings" property.
I want that the website will be available on 2 hostnames ( and

I tried to do:
site.Invoke("Put", "ServerBindings", string.Format(":80:{0},:80:www.{0}", website_name));
(to put the website_name and www.website_name port 80)
like the way that I see on the MetaBase Explorer (IIS resource kit) but it doesn't work.
DirectoryEntry site = (DirectoryEntry)root.Invoke("Create", "IIsWebServer", random_site_id);

site.Invoke("Put", "ServerComment", website_name);

site.Invoke("Put", "KeyType", "IIsWebServer");

site.Invoke("Put", "ServerBindings", string.Format(":80:{0}", website_name));

Open in new window

Question by:giligatech
  • 2
  • 2
LVL 37

Expert Comment

ID: 21808774

can't speak much about c#, but from what I can tell you are trying to treat the serverbindigs property like a plain string(?)

This property is actually an array of strings, so you will need to first retrieve the existing array, then append the new value and then set that new array back to the property.

Cheers,  Mike.

Author Comment

ID: 21810929
any document i could see and use?
LVL 37

Accepted Solution

meverest earned 500 total points
ID: 21811296
I can offer these bits of code.  The first script simply lists the web site properties as an xml formatted page.  Call it like this:


(where server is the name of the web server, and siteid is the site ID from the metabase)

Use this script as input to write data into your html form - they are output as a comma delimited string like:


the second script takes the serverbindings array from a form field named "" and writes it to the metabase.  The url is the same format as above (e.g. http://webserver/path/updatehostheaders.asp?server=localhost&siteid=1)

hope that helps a bit.

=== script 1: displayweb.asp ============================================

<%@ Language=VBScript %><%

on error resume next

Dim objW3SVC, objSITE, strOUT

Set objW3SVC = GetObject("IIS://" & CStr(Request.QueryString("server")) & "/W3SVC")

If (Err <> 0) Then FatalErr

query = Request.QueryString("siteid")

'Check Global Properties.


<%	'Walk through the metabase, and pick out web servers only.

	For Each objSITE in objW3SVC


	If objSITE.class = "IIsWebServer" Then 

    If = query Then



<description><%= objSITE.ServerComment %></description>


	    set ServerRoot = GetObject("IIS://" & CStr(Request("server")) & "/w3svc/" & & "/ROOT")

	    If (Err <> 0) Then handleErr 

	    Response.Write serverRoot.Path 

        If (Err <> 0) Then handleErr 



      Set fso = CreateObject("Scripting.FileSystemObject") 

      Set fold = fso.GetFolder(serverRoot.Path) 

      FormatNumberDemo = FormatNumber(fold.size, 2)

      If FormatNumberDemo < 999 then

      FormatNumberDemo = (Int(FormatNumberDemo * 100))/100 

      Response.Write FormatNumberDemo & " Bytes"

      ElseIf FormatNumberDemo < 999999 then

      FormatNumberDemo = (FormatNumberDemo/1000)

      FormatNumberDemo = (Int(FormatNumberDemo * 100))/100 

      Response.Write FormatNumberDemo & " Kilobytes"

      ElseIf FormatNumberDemo < 999999999 then

      FormatNumberDemo = (FormatNumberDemo/1000000)

      FormatNumberDemo = (Int(FormatNumberDemo * 100))/100 

      Response.Write FormatNumberDemo & " Megabytes"

      ElseIf FormatNumberDemo < 999999999999 then

      FormatNumberDemo = (FormatNumberDemo/1000000000)

      FormatNumberDemo = (Int(FormatNumberDemo * 100))/100 

      Response.Write FormatNumberDemo & " Gigabytes"

      End If

      set fold = nothing 

      set fso = nothing 


<adsipath><% = UCase("lm/w3svc/" & objSITE.Name) %></adsipath>

<logpath><% response.Write objSITE.LogFileDirectory & "\w3svc" & objSITE.Name

            If (Err <> 0) Then handleErr %></logpath>

<ntlmauth><% = IIf ((ServerRoot.AuthFlags and 4) = 4, "Yes", "No") %></ntlmauth>

<basicauth><% = IIf ((ServerRoot.AuthFlags and 2) = 2, "Yes", "No") %></basicauth>

<anonymoususer><% = objSITE.AnonymousUserName %></anonymoususer>

<anonymousaccess><% = IIf ((ServerRoot.AuthFlags and 1) = 1,"Yes","No") %></anonymousaccess>

<status><%  If (Err <> 0) Then handleErr

	if objSITE.ServerState = 1 then 

		Response.write "Starting"

	elseif objSITE.ServerState = 2 then

	      Response.write "Started"

	elseif objSITE.ServerState = 3 then

		Response.write "Stopping"

	elseif objSITE.ServerState = 4 then

		Response.write "Stopped"

	elseif objSITE.ServerState = 5 Then

		Response.write "Pausing"

	elseif objSITE.ServerState = 6 then

		Response.write "Paused"

	elseif objSITE.ServerState = 7 then

		Response.write "Continuing"


		Response.Write "unknown"

	end if


<defaultdocs><% = serverRoot.DefaultDoc %></defaultdocs>


				For each port in objSITE.ServerBindings

				Response.Write port & ", "




	         set VirtualDirectory = GetObject("IIS://" & CStr(Request("server")) & "/w3svc/" & & "/ROOT")

	         For Each Item In VirtualDirectory

	         Response.Write Item.Name & ","



<maxupload><% = serverRoot.AspMaxRequestEntityAllowed %></maxupload>


	End If

	End If


Set objW3SVC = nothing

Set objSITE = nothing

Set strOUT = nothing



=== script 2: updatehostheaders.asp ============================================

<%@ Language=VBScript %>


on error resume next

siteid = Request.QueryString("siteid")

servername = Request.QueryString("server")

NewSB = Request.form("HostHeaders")

IPAddr = Request.form("ServerIPAddress")

dim arrStr

dim theStr

arrStr = Split(NewSB,",")

Dim aryBindings()

ReDim aryBindings( Ubound(arrStr) )

for i=0 to Ubound(arrStr)

	aryBindings(i)= IPAddr & ":80:" & arrStr(i)


Set objComp = GetObject("IIS://" & servername & "/W3SVC/" & siteid)

	objComp.ServerBindings = aryBindings


If (Err <> 0) Then handleErr 

Set objComp = nothing

Sub FatalErr

	strOUT	= "Fatal Error " & Hex(Err) &	" ( "

	strOUT	= strOUT & Err.Description & " ) occurred."

	Response.Write strOUT

End Sub


Open in new window


Author Closing Comment

ID: 31466890

Featured Post

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
Prologue It is often required to host multiple websites on a single instance of IIS, mostly in development environments instead of on production servers. I am sure it is not much a preferred solution on production servers but this is at least a pos…
This video discusses moving either the default database or any database to a new volume.
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …

706 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now