This article describes how to create a new web site and publish web site programmatically on IIS using ASP.NET and C#.
On the server side, web service does the job. It takes the website name as parameter and creates new website on IIS. And a point to be noted is all the new websites created point to a same physical location and depending upon the name of the website, content gets populated. If you need to configure different physical paths for each website, send an additional parameter to the web service
Add Reference to “System.DirectoryServices” library and navigate to .cs file and import the namespaces “using System.DirectoryServices”.
//before add reference .dll file
//C:\Windows\winsxs\x86_microsoft.web.administration-//nonmsil_31bf3856ad364e35_6.1.7600.16385_none_c8472944f22a9c81.
public bool PublishWebSite(string SiteName, string filepath, string portNumber, string IpAdress)
{
try
{
string siteName = SiteName;
string applicationPoolName = "ASP.NET v4.0 Classic";
string virtualDirectoryPath = "/";
//Path to the folder of the published code
string virtualDirectoryPhysicalPath = filepath;
//IP address of current machine where the site is to be published
string ipAddress = IpAdress;
//Port to be assigned to the site
string tcpPort = portNumber;
//Site name that appears in the URL
string hostHeader = "";//string.Format("www.{0}", siteName);
string applicationPath = "/";
long highestId = 1;
using (ServerManager serverManager = new ServerManager())
{
Site site = serverManager.Sites[siteName];
if (site != null)
{
return false;
}
ApplicationPool appPool = serverManager.ApplicationPools[applicationPoolName];
if (appPool == null)
{
throw new Exception(String.Format("Application Pool: {0} does not exist.", applicationPoolName));
}
highestId = serverManager.Sites.Max(i => i.Id);
highestId++;
site = serverManager.Sites.CreateElement();
site.SetAttributeValue("name", siteName);
site.Id = highestId;
site.Bindings.Clear();
//Assign the IP address , Port and site URL
string bind = ipAddress + ":" + tcpPort + ":" + hostHeader;
Binding binding = site.Bindings.CreateElement();
binding.Protocol = "http";
binding.BindingInformation = bind;
site.Bindings.Add(binding);
Application application = site.Applications.CreateElement();
application.Path = applicationPath;
application.ApplicationPoolName = applicationPoolName;
//Create a virtual directory in IIS
VirtualDirectory vdir = application.VirtualDirectories.CreateElement();
vdir.Path = virtualDirectoryPath;
//Set the physical path of the folder
vdir.PhysicalPath = virtualDirectoryPhysicalPath;
application.VirtualDirectories.Add(vdir);
site.Applications.Add(application);
//Add this new site to the pool of sites in IIS
serverManager.Sites.Add(site);
serverManager.CommitChanges();
}
return true;
}
catch (Exception ex)
{
return false;
}
}
No comments:
Post a Comment