Pergunta

Eu uso o código como o seguinte no ASP.NET para enumerar os sites no IIS:

string metabasePath = "IIS://localhost/W3SVC";
DirectoryEntry service = new DirectoryEntry(metabasePath);

service.RefreshCache();
string className = service.SchemaClassName.ToString();

if (className.EndsWith("Service"))
{
    DirectoryEntries sites = service.Children;
    foreach (DirectoryEntry site in sites)
    {
        ProcessSite(site);
    }
}

No entanto, acho que apenas os 11 primeiros sites dos 16 sites são processados. Eu lutei com isso por algumas horas e não consigo encontrar nenhuma maneira de superar os 11 primeiros sites no IIS. Tentei pesquisar recursivamente, tentei usar o diretório do pesquisador sem sucesso, tentei enumerar várias vezes ou usar algum tipo de filtro sem sorte.

Alguma ideia?

Obrigado!

~ Mellamokb

Foi útil?

Solução

Decidi usar o WMI em vez de diretórios, o que parece funcionar perfeitamente:

ManagementScope oms = new ManagementScope(@"\\.\root\MicrosoftIISv2");
oms.Connect();

ObjectQuery oQuery = new ObjectQuery("select * from IISWebServerSetting");
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oms, oQuery);
foreach (ManagementObject oreturn in oSearcher.Get())
{
    Response.Write(oreturn["ServerComment"] + " (" + oreturn["Name"] + ")<br />");
}

Outras dicas

Para enumerar todos os sites no servidor local, você pode tentar o seguinte:

class Program
{
    static void Main(string[] args)
    {
        var iis = new DirectoryEntry("IIS://localhost/W3SVC");
        var sites = (from DirectoryEntry entry in iis.Children
                     where entry.SchemaClassName == "IIsWebServer"
                     select entry).ToArray();

        foreach (var site in sites)
        {
            Console.WriteLine(site.Name);
        }
    }

Você está por acaso correndo IIS 7? Nesse caso, isso pode explicar o problema, pois a metabase existe apenas por razões de compatibilidade; Não é mais a loja principal.

Você provavelmente precisaria analisar o aplicativohost.config - embora o WMI também seja uma boa opção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top