Verwenden der Windows-Verwaltungsinstrumentation für die Diagnose
Windows Communication Foundation (WCF) macht zur Laufzeit Inspektionsdaten eines Diensts über einen Windows-Verwaltungsinstrumentation (WMI)-Anbieter von WCF verfügbar.
Aktivieren von WMI
Bei WMI handelt es sich um die Implementierung des Web-Based Enterprise Management (WBEM)-Standards von Microsoft. Weitere Informationen zum WMI-SDK finden Sie in der MSDN-Bibliothek. (https://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/wmi\_start\_page.asp) (möglicherweise in englischer Sprache). Bei WBEM handelt es sich um einen Industriestandard für das Verhalten von Anwendungen beim Verfügbarmachen der Verwaltungsinstrumentation für externe Verwaltungstools.
Ein WMI-Anbieter ist eine Komponente zum Verfügbarmachen der Instrumentation zur Laufzeit über eine WBEM-kompatible Schnittstelle. Sie besteht aus einer Gruppe von WMI-Objekten mit Attribut/Wert-Paaren. Bei den Paaren kann es sich um eine Reihe einfacher Typen handeln. Über die Schnittstelle können Verwaltungstools zur Laufzeit Verbindungen zu den Diensten herstellen. WCF macht Attribute von Diensten (wie Adressen, Bindungen, Verhaltensweisen und Listener) verfügbar.
Der integrierte WMI-Anbieter kann in der Konfigurationsdatei der Anwendung aktiviert werden. Dies erfolgt mithilfe des wmiProviderEnabled-Attributs von <diagnostics> Element im system.ServiceModel element-Abschnitt (siehe folgende Beispielkonfiguration).
<system.serviceModel>
…
<diagnostics wmiProviderEnabled="true" />
…
</system.serviceModel>
Mit diesem Konfigurationseintrag wird eine WMI-Schnittstelle verfügbar gemacht. Über diese Schnittstelle kann nun von Verwaltungsanwendungen eine Verbindung hergestellt und auf die Verwaltungsinstrumentation der Anwendung zugegriffen werden.
Zugreifen auf WMI-Daten
Der Zugriff auf WMI-Daten kann auf mehrere Arten erfolgen. Von Microsoft werden WMI-APIs für Skripts, Visual Basic-Anwendungen, C++-Anwendungen sowie .NET Framework bereitgestellt. Weitere Informationen finden Sie unter Verwenden von WMI (möglicherweise in englischer Sprache).
Warnung
Bei Verwendung der von .NET Framework bereitgestellten Methoden zum programmgesteuerten Zugreifen auf WMI-Daten ist darauf zu achten, dass von solchen Methoden bei hergestellter Verbindung möglicherweise Ausnahmen ausgelöst werden. Die Verbindung ist zwar beim Erstellen der ManagementObject-Instanz nicht hergestellt, dies ändert sich jedoch bei der ersten Anforderung, die einen tatsächlichen Austausch von Daten erfordert. Verwenden Sie deshalb zum Abfangen möglicher Ausnahmen einen try..catch-Block.
Sie können die Ablaufverfolgungs- und Nachrichtenprotokollierungsebene sowie die Nachrichtenprotokollierungsoptionen für die System.ServiceModel-Ablaufverfolgungsquelle in WMI ändern. Dies kann durch Zugreifen auf die AppDomainInfo-Instanz erfolgen, von der folgende boolesche Eigenschaften verfügbar gemacht werden: LogMessagesAtServiceLevel, LogMessagesAtTransportLevel, LogMalformedMessages und TraceLevel. Wenn Sie einen Ablaufverfolgungslistener für die Nachrichtenprotokollierung konfigurieren, diese Optionen in der Konfiguration jedoch auf false festlegen, können Sie sie später, wenn die Anwendung ausgeführt wird, zu true ändern. Dadurch wird die Nachrichtenprotokollierung zur Laufzeit aktiviert. Entsprechend können Sie die Nachrichtenprotokollierung zur Laufzeit mit WMI deaktivieren, wenn Sie sie in der Konfigurationsdatei aktivieren.
Sind in der Konfigurationsdatei keine Ablaufverfolgungslistener für die Nachrichtenprotokollierung oder keine System.ServiceModel-Ablaufverfolgungslistener angegeben, haben die vorgenommenen Änderungen keinerlei Auswirkungen, obgleich sie von WMI akzeptiert werden. Weitere Informationen zum ordnungsgemäßen Einrichten der jeweiligen Listener finden Sie unter Konfigurieren der Nachrichtenprotokollierung sowie unter Konfigurieren der Ablaufverfolgung. Die Ablaufverfolgungsebene aller anderen in der Konfiguration angegebenen Ablaufverfolgungsquellen wird beim Start der Anwendung wirksam und kann nicht geändert werden.
Von WCF wird eine GetOperationCounterInstanceName-Methode für das Skripting verfügbar gemacht. Wird die Methode mit einem Vorgangsnamen angegeben, wird der Name einer Leistungsindikatorinstanz zurückgegeben. Die Eingabe wird jedoch nicht überprüft. Aus diesem Grund wird bei Angabe eines falschen Vorgangsnamens auch ein falscher Indikatorname zurückgegeben.
Von der OutgoingChannel-Eigenschaft der Service-Instanz werden keine Channels gezählt, die von einem Dienst zum Herstellen einer Verbindung mit einem anderen Dienst geöffnet wurden, wenn der WCF-Client für den Zieldienst nicht innerhalb der Service-Methode erstellt wird.
Vorsicht Von WMI wird nur ein TimeSpan-Wert mit maximal 3 Dezimalstellen unterstützt. Beispiel: Wird eine der Eigenschaften des Diensts auf MaxValue festgelegt, wird der Wert beim Anzeigen in WMI nach 3 Dezimalstellen abgeschnitten.
Sicherheit
Da der WCF-WMI-Anbieter das Erkennen von Diensten in einer Umgebung ermöglicht, sollten Sie beim Gewähren von Zugriff auf den Anbieter äußerste Vorsicht walten lassen. Durch Lockern des standardmäßig auf Administratoren beschränkten Zugriffs erhalten möglicherweise weniger vertrauenswürdige Parteien Zugriff auf sensible Daten der Umgebung. Genauer gesagt: Durch eine Lockerung der Berechtigungen für den Remote-WMI-Zugriff erhöht sich das Risiko für Überlastungsangriffe. Wird ein Prozess von einer Vielzahl von WMI-Anforderungen regelrecht überschwemmt, hat dies eine Beeinträchtigung der Leistung zur Folge.
Werden die Zugriffsberechtigungen für die MOF-Datei gelockert, haben weniger vertrauenswürdige Parteien die Möglichkeit zum Manipulieren des WMI-Verhaltens sowie zum Ändern der im WMI-Schema geladenen Objekte. So können beispielsweise Felder entfernt werden, was dazu führen kann, dass dem Administrator wichtige Daten nicht mehr zur Verfügung stehen oder der Datei Felder hinzugefügt werden, die nicht ausgefüllt werden oder Ausnahmen auslösen.
Standardmäßig werden Administratoren vom WCF-WMI-Anbieter Berechtigungen vom Typ "execute method", "provider write" und "enable account" gewährt. Für ASP.NET, den lokalen Dienst und den Netzwerkdienst wird die Berechtigung "enable account" gewährt. Auf Nicht-Windows Vista-Plattformen besitzt das ASP.NET-Konto Lesezugriff auf den WMI-ServiceModel-Namespace. Sollen diese Rechte einer bestimmten Benutzergruppe vorenthalten werden, deaktivieren Sie entweder den WMI-Anbieter (ist standardmäßig deaktiviert), oder deaktivieren Sie den Zugriff für die gewünschte Benutzergruppe.
Darüber hinaus kann WMI beim Versuch, WMI mithilfe der Konfiguration zu aktivieren, möglicherweise aufgrund unzureichender Benutzerberechtigungen nicht aktiviert werden. Es wird jedoch kein Ereignis in das Ereignisprotokoll aufgenommen, um diesen Fehler zu protokollieren.
Gehen Sie zum Ändern der Benutzerberechtigungsebenen folgendermaßen vor:
- Klicken Sie auf Start, klicken Sie auf Ausführen, und geben Sie compmgmt.msc ein.
- Klicken Sie mit der rechten Maustaste auf Dienste und Anwendungen/WMI-Steuerelemente, und wählen Sie Eigenschaften.
- Klicken Sie auf die Registerkarte Sicherheit, und navigieren Sie zum Namespace Root/ServiceModel. Klicken Sie auf die Schaltfläche Sicherheit.
- Wählen Sie die Gruppe oder den Benutzer aus, für den der Zugriff gesteuert werden soll, und konfigurieren Sie mithilfe des Kontrollkästchens Zulassen oder Verweigern die gewünschten Berechtigungen.
Zugreifen auf Remote-WMI-Objektinstanzen
Zum Zugreifen auf die WCF-WMI-Instanzen eines Remotecomputers muss für die zum Zugreifen verwendeten Tools die Paketsicherheit aktiviert werden. Im folgenden Abschnitt wird die hierzu erforderliche Vorgehensweise für WMI CIM Studio, das Testprogramm für Windows-Verwaltungsinstrumentation und .NET SDK 2.0 beschrieben.
WMI CIM Studio
Ist die WMI-Verwaltung (möglicherweise in englischer Sprache) installiert, kann der Zugriff auf WMI-Instanzen mithilfe von WMI CIM Studio erfolgen. Die Tools befinden sich im folgenden Ordner:
%windir%\Programme\WMI Tools\
- Geben Sie im Fenster für die Namespaceverbindung den Text root\ServiceModel ein, und klicken Sie anschließend auf OK.
- Klicken Sie im Anmeldefenster für WMI CIM Studio auf die Schaltfläche Optionen >>, um das Fenster zu erweitern. Wählen Sie unter Authentifizierungsebene die Option Paketsicherheit aus, und klicken Sie anschließend auf OK.
Testprogramm für Windows-Verwaltungsinstrumentation
Dieses Tool wird von Windows installiert. Starten Sie zum Ausführen des Tools eine Befehlskonsole, indem Sie im Dialogfeld Starten/Ausführen den Befehl cmd.exe eingeben, und klicken Sie anschließend auf OK. Geben Sie im Befehlsfenster den Befehl wbemtest.exe ein. Das Testprogramm für Windows-Verwaltungsinstrumentation wird gestartet.
- Klicken Sie in der rechten oberen Fensterecke auf die Schaltfläche Verbinden.
- Geben Sie im neuen Fenster im Feld Namespace die Zeichenfolge root\ServiceModel ein, und wählen Sie unter Authentifizierungsebene die Option Paketsicherheit aus. Klicken Sie auf Verbinden.
Verwenden von verwaltetem Code
Der Zugriff auf Remote-WMI-Instanzen kann auch programmgesteuert erfolgen. Verwenden Sie hierzu die vom System.Management-Namespace bereitgestellten Klassen. Die erforderliche Vorgehensweise wird im folgenden Codebeispiel veranschaulicht:
String wcfNamespace = String.Format(@"\\{0}\Root\ServiceModel",
this.serviceMachineName);
ConnectionOptions connection = new ConnectionOptions();
connection.Authentication = AuthenticationLevel.PacketPrivacy;
ManagementScope scope = new ManagementScope(this.wcfNamespace, connection);