如何通过 C# 从 IIS 获取网站名称的端口?

Posted

技术标签:

【中文标题】如何通过 C# 从 IIS 获取网站名称的端口?【英文标题】:How can I get the port by websites name via C# from IIS? 【发布时间】:2014-05-19 16:06:12 【问题描述】:

在 IIS-Manager 中,默认网站绑定在端口 80。如何使用 c# 通过网站名称获取端口?我尝试了以下代码:

var lWebsite = "Default Web Site";
var lServerManager = new ServerManager();
var lPort = lServerManager.Sites[lWebsite].Bindings.GetAttributeValue("Port");

lPort 导致 null 和 invalid index 异常。但是赋值 var lPort = lServerManager.Sites[lWebsite] 有效。

【问题讨论】:

请查看以下链接。***.com/questions/11616606/… msdn 论坛中的另一个链接。 social.msdn.microsoft.com/Forums/vstudio/en-US/… @Jayesh Goyani:bindingNode.Attribute("Port").Value 也不起作用。 【参考方案1】:

当您访问 Sites[lWebsite].Bindings 时,您访问的是一个集合的绑定。然后,当您尝试调用 GetAttributeValue("Port") 时,它会失败,因为这没有任何意义 - 集合本身没有与之关联的端口号,它只是一个集合。

如果您想访问每个绑定使用的端口号,您需要遍历这些绑定并询问每个绑定的相关端口号:

var site = lServerManager.Sites[lWebsite];
foreach (var binding in site.Bindings)

    int port = binding.EndPoint.Port;
    // Now you have this binding's port, and can do whatever you want with it.

值得强调的是,网站可以绑定到多个端口。您谈论获取“该”端口,但情况并非如此 - 例如,通过 HTTP 和 HTTPS 提供服务的网站将有两个绑定,通常在端口 80 和 443 上。这就是为什么您必须处理collection 绑定,即使在您的情况下该集合可能只包含一个绑定,它仍然是一个集合。

有关更多详细信息,请查看 the Binding class 的 MSDN 文档。请注意,您可能感兴趣的一些内容将涉及访问绑定的 EndPoint 属性,如上面的示例所示。

【讨论】:

以上是关于如何通过 C# 从 IIS 获取网站名称的端口?的主要内容,如果未能解决你的问题,请参考以下文章

C#如何将网页绑定到本地的某个端口上

如何在 C# 中获取打开端口的进程名称?

iis下的多个网站如何共用80端口

如何通过cmd查看IIS站点

怎样用iis把网站发布到外网上 win7

iis如何通过一个外网IP端口把内网多个站点发布到外网