문제

IIS의 웹 사이트를 열거하기 위해 ASP.NET에서 다음과 같은 코드를 사용합니다.

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);
    }
}

그러나 16 개 사이트 중 처음 11 개 사이트만이 처리된다는 것을 알게되었습니다. 나는 이것으로 몇 시간 동안 싸웠으며 IIS의 첫 11 개 사이트를 지나갈 수있는 방법을 찾을 수 없습니다. 재귀 적으로 검색을 시도했는데 디렉토리 검색자를 사용하지 않으려 고 시도했지만 여러 번 열거하거나 운이없는 종류의 필터를 사용해 보았습니다.

어떤 아이디어?

감사!

~ Mellamokb

도움이 되었습니까?

해결책

나는 DirectoryServices 대신 WMI를 사용하기로 결정했는데 완벽하게 작동하는 것 같습니다.

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 />");
}

다른 팁

로컬 서버의 모든 사이트를 열거하려면 다음을 시도 할 수 있습니다.

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);
        }
    }

당신은 우연히 IIS 7을 실행하고 있습니까? 그렇다면, 그것은 대응 가능성 이유에 대해서만 존재하기 때문에 문제를 설명 할 수 있습니다. 더 이상 기본 상점이 아닙니다.

WMI도 좋은 옵션이지만 ApplicationHost.config를 구문 분석해야 할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top