gpt4 book ai didi

c# - 从 IIS 站点绑定(bind)中删除 IP

转载 作者:太空宇宙 更新时间:2023-11-03 13:12:48 24 4
gpt4 key购买 nike

伙计们,我正在尝试通过 C#(Microsoft Web 管理)从 IIS 站点绑定(bind)中删除特定 IP。

基本上我想做的是,检查 IIS 中所有站点的绑定(bind),如果任何绑定(bind) IP 与用户提供的 IP 匹配,则应将其删除,如果特定站点没有任何其他具有不同 IP 的绑定(bind),则它应该停止网站。

但是,我似乎无法在循环中删除 IP,因为我收到“集合已修改;枚举操作可能无法执行。”错误。

这是我的代码:

static void Main(string[] args)
{
ServerManager mgr = new ServerManager();

foreach (Site s in mgr.Sites)
{
Console.WriteLine("Site {0}", s.Name);

foreach (Application app in s.Applications)
{
Console.WriteLine("\tApplication: {0}", app.Path);

foreach (VirtualDirectory virtDir in app.VirtualDirectories)
{
Console.WriteLine("\t\tVirtual Dir: {0}", virtDir.Path);
}
}

BindingCollection bindingCollection = s.Bindings;
foreach (Binding b in bindingCollection)
{
Console.WriteLine("\n Bindings: {0}",b.EndPoint);
if (b.EndPoint != null)
{
//Hard Coded IP for testing purpose
if (b.EndPoint.ToString() == "1.1.1.1:86")
{
Console.WriteLine("Removing this ip : {0}",b.EndPoint.ToString());
bindingCollection.Remove(b);
}
}
}
mgr.CommitChanges();
}
Console.ReadLine();
}

我应该怎么做才能解除绑定(bind)?我需要在一个循环中删除它,因为一个站点可能有超过 1 个使用相同 IP 的绑定(bind)。

最佳答案

对于作为 BCL 一部分的大多数集合,枚举数是版本化的,这意味着您不能在循环遍历集合时修改它。您可以像这样复制集合:

var bindingCollection = new List<Binding>(s.Bindings);

所以现在你的循环看起来像这样:

var bindings = s.Bindings;
var bindingCollection = new List<Binding>(bindings);
foreach (Binding b in bindingCollection)
{
Console.WriteLine("\n Bindings: {0}", b.EndPoint);
if (b.EndPoint != null)
{
//Hard Coded IP for testing purpose
if (b.EndPoint.ToString() == "1.1.1.1:86")
{
Console.WriteLine("Removing this ip : {0}", b.EndPoint.ToString());
bindings.Remove(b);
}
}
}

但是,这实际上并没有像您期望的那样删除绑定(bind)。您需要调用 b.Delete() 才能真正删除绑定(bind)。当您使用 Remove 时,您所做的就是将它从现有绑定(bind)构建的集合中删除。因此,在将其从集合中删除之前添加 b.Delete()

关于c# - 从 IIS 站点绑定(bind)中删除 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27722331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com