none
Exception CommitChanges DirectoryEntry RRS feed

  • Question

  • Bonjour,

    Je suis entrain de travailler sur un blocage d'ip de façon dynamique. Mon code est le suivant :

                DirectoryEntry IIS = new DirectoryEntry("IIS://localhost/W3SVC/1/ROOT/test_ip");
    
                //get the IPSecurity property
                IISOle.IISIPSecurity oIpSecur = (IISOle.IISIPSecurity)IIS.Properties["IPSecurity"][0];
                // check GrantByDefault.  This has to be set to true or what we are doing is useless
                if (!oIpSecur.GrantByDefault) //if false, set it to true
                {
                    oIpSecur.GrantByDefault = true;
                }
                //Retrieve the previous denied IPs
                object[] origIPDenyList = oIpSecur.IPDeny;
    
                //Create array that contains denied IPs (getting the old ones + the new one
                object[] newIPDenyList = new object[origIPDenyList.Length + 1];
                origIPDenyList.CopyTo(newIPDenyList, 0);
    
                newIPDenyList[newIPDenyList.Length - 1] = "127.0.0.1, 255.255.255.255";
                oIpSecur.IPDeny = new object[] { };
                // commit the changes
                IIS.CommitChanges();
                IIS.RefreshCache();
    
                // add the updated list back to the IPSecurity object
                oIpSecur.IPDeny = newIPDenyList;
    
                //applying new security rules
                IIS.Properties["IPSecurity"].Value = oIpSecur;
                // commit the changes
                IIS.CommitChanges();
                IIS.RefreshCache();

    Cela fonctionne bien pour la première IP entrée par le système. Dès qu'il y a déjà une IP blacklistée, le système ne fonctionne plus et throw une exception au Commitchanges() qui est :

    Cannot create a file when that file already exists. (Exception from HRESULT: 0x800700B7)

    Si quelqu'un a une idée ....

    Merci d'avance

    jeudi 3 octobre 2013 12:34

Réponses

  • Bonjour

    Prenez quelques minutes pour regarder la solution marquée ici:

    http://forums.iis.net/t/1149574.aspx

    Ici vous avez un outil pour la conversion du VB.NET vers C#:

    http://www.developerfusion.com/tools/convert/vb-to-csharp/

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    • Modifié Aurel Bera lundi 7 octobre 2013 09:50
    • Marqué comme réponse Aurel Bera mardi 8 octobre 2013 12:46
    vendredi 4 octobre 2013 07:08
  • BOnjour

    Désolé pour le retard. La chose étant que mon code precedent ne pouvait fonctionner car nous fonctionons sur un IIS7 et ce code est pour le 6. L'API du 7 permet de faire ça très facilement.

    Au cas où, voici le code :

    ServerManager oServerManager = new ServerManager();
                    Configuration oHostConfig = oServerManager.GetApplicationHostConfiguration();
                    string sSiteName = System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName();
                    // Get ipSecurity section in configuration.
                    ConfigurationSection oIpSecuritySection = oHostConfig.GetSection("system.webServer/security/ipSecurity", sSiteName);
                    ConfigurationElementCollection oConfigElements = oIpSecuritySection.GetCollection();
                    bool bIpExist = false;
                    foreach (ConfigurationElement oElement in oConfigElements)
                    {
                        if (oElement.Attributes["ipAddress"].Equals(_sIp))
                        {
                            bIpExist = true;
                        }
                    }
                    if (!bIpExist)
                    {
                        // Create new element and add it to collection.
                        ConfigurationElement newElement = oConfigElements.CreateElement("add");
                        newElement.Attributes["ipAddress"].Value = _sIp;
                        newElement.Attributes["allowed"].Value = false;
                        // add new IP to deny list
                        oConfigElements.Add(newElement);
                        oServerManager.CommitChanges();
                    }

    • Marqué comme réponse Aurel Bera jeudi 10 octobre 2013 06:47
    mercredi 9 octobre 2013 16:34

Toutes les réponses

  • Bonjour

    Prenez quelques minutes pour regarder la solution marquée ici:

    http://forums.iis.net/t/1149574.aspx

    Ici vous avez un outil pour la conversion du VB.NET vers C#:

    http://www.developerfusion.com/tools/convert/vb-to-csharp/

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    • Modifié Aurel Bera lundi 7 octobre 2013 09:50
    • Marqué comme réponse Aurel Bera mardi 8 octobre 2013 12:46
    vendredi 4 octobre 2013 07:08
  • Bonjour

    Un petit retour SVP?

    Merci!

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 7 octobre 2013 09:51
  • BOnjour

    Désolé pour le retard. La chose étant que mon code precedent ne pouvait fonctionner car nous fonctionons sur un IIS7 et ce code est pour le 6. L'API du 7 permet de faire ça très facilement.

    Au cas où, voici le code :

    ServerManager oServerManager = new ServerManager();
                    Configuration oHostConfig = oServerManager.GetApplicationHostConfiguration();
                    string sSiteName = System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName();
                    // Get ipSecurity section in configuration.
                    ConfigurationSection oIpSecuritySection = oHostConfig.GetSection("system.webServer/security/ipSecurity", sSiteName);
                    ConfigurationElementCollection oConfigElements = oIpSecuritySection.GetCollection();
                    bool bIpExist = false;
                    foreach (ConfigurationElement oElement in oConfigElements)
                    {
                        if (oElement.Attributes["ipAddress"].Equals(_sIp))
                        {
                            bIpExist = true;
                        }
                    }
                    if (!bIpExist)
                    {
                        // Create new element and add it to collection.
                        ConfigurationElement newElement = oConfigElements.CreateElement("add");
                        newElement.Attributes["ipAddress"].Value = _sIp;
                        newElement.Attributes["allowed"].Value = false;
                        // add new IP to deny list
                        oConfigElements.Add(newElement);
                        oServerManager.CommitChanges();
                    }

    • Marqué comme réponse Aurel Bera jeudi 10 octobre 2013 06:47
    mercredi 9 octobre 2013 16:34