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

8
在IIS管理器中,默认网站绑定在80端口。我该如何使用c#通过网站名称获取端口?我尝试了以下代码:
var lWebsite = "Default Web Site";
var lServerManager = new ServerManager();
var lPort = lServerManager.Sites[lWebsite].Bindings.GetAttributeValue("Port");

lPort会导致无效索引异常并返回null。但是赋值变量 lPort = lServerManager.Sites[lWebsite] 是有效的。


请检查下面的链接。 http://stackoverflow.com/questions/11616606/set-website-port-with-servermanager-class - Jayesh Goyani
又一个 MSDN 论坛链接。http://social.msdn.microsoft.com/Forums/vstudio/en-US/4d340847-25aa-47ee-aa43-b52c0565bfad/to-read-the-iis-default-website-port-number-c?forum=netfxbcl - Jayesh Goyani
@Jayesh Goyani:bindingNode.Attribute("Port").Value也不起作用。 - Simon
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属性,就像上面的示例一样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接