从IIS站点绑定中删除IP

时间:2014-12-31 14:15:15

标签: c# iis

伙计们我试图通过C#(Microsoft Web管理)从IIS站点绑定中删除特定的IP。

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

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

这是我的代码:

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。

1 个答案:

答案 0 :(得分:1)

对于属于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()从集合中删除之前,请先添加{{1}}。