以编程方式在IIS中使用C#创build一个网站并设置端口号
我们已经能够创build一个网站。 我们使用这个链接中的信息来做到这一点:
https://msdn.microsoft.com/en-us/library/ms525598.aspx
但是,我们希望使用80端口以外的端口号。我们如何做到这一点?
我们正在使用IIS 6
如果您使用IIS 7,则会有一个名为Microsoft.Web.Administration的新托pipeAPI
以上博客文章的一个例子:
ServerManager iisManager = new ServerManager(); iisManager.Sites.Add("NewSite", "http", "*:8080:", "d:\\MySite"); iisManager.CommitChanges();
如果您使用IIS 6并且想要这样做,那么不幸的是它更复杂。
您将不得不在每台服务器上创build一个Web服务,这是一个处理网站创build的Web服务,因为通过networking的直接用户模拟将无法正常工作(如果我正确地记得这一点)。
您将不得不使用Interop服务并执行类似于此的操作(此示例使用两个对象,即服务器和站点,它们是存储服务器和站点configuration的自定义类的实例):
string metabasePath = "IIS://" + server.ComputerName + "/W3SVC"; DirectoryEntry w3svc = new DirectoryEntry(metabasePath, server.Username, server.Password); string serverBindings = ":80:" + site.HostName; string homeDirectory = server.WWWRootPath + "\\" + site.FolderName; object[] newSite = new object[] { site.Name, new object[] { serverBindings }, homeDirectory }; object websiteId = (object)w3svc.Invoke("CreateNewSite", newSite); // Returns the Website ID from the Metabase int id = (int)websiteId;
在这里看到更多
下面是解决scheme。
博客文章:如何在IIS 7中添加新网站
点击button:
try { ServerManager serverMgr = new ServerManager(); string strWebsitename = txtwebsitename.Text; // abc string strApplicationPool = "DefaultAppPool"; // set your deafultpool :4.0 in IIS string strhostname = txthostname.Text; //abc.com string stripaddress = txtipaddress.Text;// ip address string bindinginfo = stripaddress + ":80:" + strhostname; //check if website name already exists in IIS Boolean bWebsite = IsWebsiteExists(strWebsitename); if (!bWebsite) { Site mySite = serverMgr.Sites.Add(strWebsitename.ToString(), "http", bindinginfo, "C:\\inetpub\\wwwroot\\yourWebsite"); mySite.ApplicationDefaults.ApplicationPoolName = strApplicationPool; mySite.TraceFailedRequestsLogging.Enabled = true; mySite.TraceFailedRequestsLogging.Directory = "C:\\inetpub\\customfolder\\site"; serverMgr.CommitChanges(); lblmsg.Text = "New website " + strWebsitename + " added sucessfully"; } else { lblmsg.Text = "Name should be unique, " + strWebsitename + " is already exists. "; } } catch (Exception ae) { Response.Redirect(ae.Message); }
循环播放名称是否已经存在
public bool IsWebsiteExists(string strWebsitename) { Boolean flagset = false; SiteCollection sitecollection = serverMgr.Sites; foreach (Site site in sitecollection) { if (site.Name == strWebsitename.ToString()) { flagset = true; break; } else { flagset = false; } } return flagset; }
尝试下面的代码来了解未使用的端口号
DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC"); // Find unused ID PortNo for new web site bool found_valid_port_no = false; int random_port_no = 1; do { bool regenerate_port_no = false; System.Random random_generator = new Random(); random_port_no = random_generator.Next(9000,15000); foreach (DirectoryEntry e in root.Children) { if (e.SchemaClassName == "IIsWebServer") { int site_id = Convert.ToInt32(e.Name); //For each detected ID find the port Number DirectoryEntry vRoot = new DirectoryEntry("IIS://localhost/W3SVC/" + site_id); PropertyValueCollection pvcServerBindings = vRoot.Properties["serverbindings"]; String bindings = pvcServerBindings.Value.ToString().Replace(":", ""); int port_no = Convert.ToInt32(bindings); if (port_no == random_port_no) { regenerate_port_no = true; break; } } } found_valid_port_no = !regenerate_port_no; } while (!found_valid_port_no); int newportId = random_port_no;
- 在站点的属性中select“Web站点”选项卡并指定TCP端口。
- 在工作室进行debugging的目的是指定http:// localhost:<port> / <site&gt ; 在“使用本地IIS Web服务器”选项卡Web上