8

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

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

lPort导致 nullinvalid index异常。但赋值 varlPort = lServerManager.Sites[lWebsite]有效。

4

1 回答 1

14

当您访问 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 上。这就是为什么您必须处理绑定的集合,即使在您的情况下该集合可能只包含一个绑定,它仍然是一个集合。

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

于 2014-04-09T12:49:52.767 回答