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;
6条答案
按热度按时间mo49yndu1#
如果您使用的是IIS 7,则有一个名为Microsoft.Web.Administration的新托管API
上面的博客文章中有一个例子:
如果您使用的是IIS6并希望执行此操作,那么不幸的是,它会更加复杂。
您必须在每台服务器上创建一个Web服务,一个处理网站创建的Web服务,因为通过网络直接模拟用户将无法正常工作(如果我没有记错的话)。
您必须使用互操作服务并执行与此类似的操作(此示例使用两个对象server和site,它们是存储服务器和站点配置的自定义类的示例):
查看更多here
nnsrf1az2#
这就是解决办法。
Blog article : How to add new website in IIS 7
点击按钮时:
遍历站点,确定名称是否已存在
ghg1uchk3#
尝试以下代码以了解未使用的端口号
n3h0vuf24#
我已经通过了所有的答案在这里,也测试。这里是最干净的聪明版本的答案这个问题。然而,这仍然不能工作在IIS 6.0。所以IIS 8.0或以上是必需的。
btxsgosb5#
此简化方法将使用默认绑定设置创建站点,如果需要,还将创建应用程序池:
wztqucjr6#
1.在站点属性中选择“网站”选项卡并指定TCP端口。
1.在工作室调试目的指定;在“使用本地IIS Web服务器”的Web选项卡上