伙计们,我正在尝试通过C#(Microsoft Web Administration)从IIS网站绑定中删除特定的IP。
基本上,我想做的是检查IIS中所有站点的绑定,如果有任何绑定IP与用户提供的IP匹配,则应将其删除,如果特定站点没有其他具有不同IP的绑定,则应停止网站。
但是,当我收到“修改了集合;可能无法执行枚举操作”时,似乎无法循环删除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();
}
我应该怎么做才能删除绑定?我需要循环删除它,因为一个站点可能具有多个使用同一IP的绑定。
枚举器的版本适用于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);
}
}
}
但是,这实际上并没有像您期望的那样删除绑定。您需要调用b.Delete()
以实际删除绑定。使用时Remove
,您要做的就是将其从现有绑定构建的集合中删除。因此,b.Delete()
在将其从集合中删除之前添加。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句