2012-12-05 5 views
5

ich programmatisch versuche auf meine Seite Status von IIS, um zu sehen, wenn es aufgehört hat, aber ich hielt die folgende Fehlermeldung erhalten,Programmatically Website Status von IIS erhalten, wird wieder COM Fehler

Die Objektkennung nicht repräsentieren ein gültiges Objekt. (Ausnahme von HRESULT: 0x800710D8)

Die Anwendung verwendet ServerManager Site-Klasse, um auf den Standortstatus zuzugreifen. Hier ist der Code,

//This is fine, gets back the site 
var serverManager = new Microsoft.Web.Administration.ServerManager(ConfigPath); 
var site = serverManager.Sites.FirstOrDefault(x => x.Id == 5); 
if (site == null) return; 
var appPoolName = site.Applications["/"].ApplicationPoolName; 
//error! 
var state = site.State; 

Ich habe Test mit statischer Website, das Problem zu isolieren, um sicherzustellen, dass die Website ist und läuft, alle Konfiguration gilt, zeigen Sie auf den gültigen Anwendungspool ... etc.

Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. Ist es das COM-Ding?

Antwort

7

Ich habe herausgefunden, wo das Problem liegt. Im Grunde gibt es zwei Teile für den Server-Manager, der erste Teil des Server-Managers ermöglicht es Ihnen, die Site-Details aus der Konfigurationsdatei zu lesen, was ich oben getan habe. Das Problem dabei ist, dass Sie nur die Informationen erhalten, die sich im Datei- und Site-Status befinden.

Der zweite Teil des Server-Managers ermöglicht die direkte Verbindung mit dem IIS, und zwar durch Interaktion mit dem COM-Element. Also, was ich tun soll, ist dies:

ServerManager manager= ServerManager.OpenRemote("testserver"); 
var site = manager.Sites.First(); 
var status = site.State.ToString() ; 
+1

Sehr einfach und sehr nützlich. Danke vielmals! –

+0

Das ist im Allgemeinen korrekt, wie in MSDN dokumentiert, dass die Überladung des Konstruktors für ServerManager, die einen physischen Pfad empfängt, niemals für die interne Infrastruktur verwendet werden sollte und, wie Sie gesehen haben, sehr schädliche Auswirkungen haben kann. Dinge, die so schlimm sind wie das Entfernen der falschen SSL-Konfiguration und des Zertifikats, die Ihre Konfiguration wirklich beschädigen können, also ja, wenn Sie versuchen, entfernte Maschinen zu verwalten, benutzen Sie nur OpenRemote. –

2

Ich hatte ein ähnliches Problem, aber ich wurde durch die Verzögerung verursacht notwendig, um die Änderungen aus dem Aufruf von CommitChanges auf dem Servermanager Objekt zu aktivieren. Ich fand die Antwort, die ich hier gebraucht:

ServerManager CommitChanges makes changes with a slight delay

Es scheint, wie Polling erforderlich ist, konsistente Ergebnisse zu erhalten. Etwas Ähnliches löste mein Problem (ich bekam die Ausnahme, wenn ich auf einen neu hinzugefügten Anwendungspool zugreife):

+0

Das war das Problem für mich auch +1 für den Helfer Mate :) – Shazi

Verwandte Themen