ASP.NET IIS Metabase gibt nicht alle Websites zurück
-
20-09-2019 - |
Frage
Ich verwende Code wie das folgende in ASP.NET, um die Websites in IIS aufzumerieren:
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);
}
}
Ich finde jedoch, dass nur die ersten 11 von 16 Standorten jemals verarbeitet werden. Ich habe damit ein paar Stunden damit gekämpft und kann keine Möglichkeit finden, die ersten 11 Websites in IIS zu überwinden. Ich habe versucht, rekursiv zu suchen. Ich habe versucht, den Verzeichnissearcher ohne Erfolg zu verwenden.
Irgendwelche Ideen?
Vielen Dank!
~ Mellamokb
Lösung
Ich habe beschlossen, WMI anstelle von DirectoryServices zu verwenden, was perfekt zu funktionieren scheint:
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 />");
}
Andere Tipps
Um alle Websites auf dem lokalen Server zu zählen, können Sie Folgendes versuchen:
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);
}
}
Laufen Sie zufällig IIS 7? In diesem Fall könnte dies das Problem erklären, da die Metabase nur aus Kompatibilitätsgründen existiert. Es ist nicht mehr der Hauptgeschäft.
Sie müssten wahrscheinlich stattdessen ApplicationHost.config analysieren - obwohl WMI auch eine gute Option ist.