Fehler beim Erstellen von Leistungsindikatoren mithilfe des WCF-Diensts

Dieser Artikel hilft Ihnen, den Fehler zu beheben, der auftritt, wenn Sie den Windows Communication Foundation (WCF)-Dienst zum Veröffentlichen von Leistungsindikatoren konfigurieren.

Ursprüngliche Produktversion:   Windows Communication Foundation
Ursprüngliche KB-Nummer:   3058669

Problembeschreibung

Wenn Sie den WCF-Dienst so konfigurieren, dass Leistungsindikatoren veröffentlicht werden, werden einige oder alle Leistungsindikatoren nicht auf der Benutzeroberfläche des Leistungsmonitors (PerfMon) angezeigt. Darüber hinaus wird die folgende Fehlermeldung in der SVCLOG-Datei angezeigt:

Fehler beim Laden von Leistungsindikatoren für den Dienst. Für diesen Dienst sind keine Leistungsindikatoren verfügbar.

Sie können auch die folgende Warnmeldung in der SVCLOG-Datei erhalten:

Namen von Leistungsindikatoreninstanzen sind möglicherweise nicht eindeutig.

Ursache

Dieses Problem tritt auf, da WCF die Kombination aus Dienstname, Vertragsname, Vorgangsname und URI als Instanzname des erstellten Leistungsindikators verwendet. Wenn der Name eine bestimmte Länge erreicht, wird er gekürzt, indem ein Teil des Namens durch einen kurzen Hashwert ersetzt wird. Wenn Vorgangsnamen ähnlich genug sind und in Konflikt stehende gekürzte Hashwerte aufweisen, versucht WCF versehentlich, zwei Zählerinstanzen mit demselben Instanznamen zu erstellen. Dies führt zu einem Fehler beim Erstellen von Leistungsindikatoren, und WCF stellt keine Leistungsindikatorinformationen für diesen Dienst bereit.

Lösung

Es gibt zwei Methoden, um dieses Problem zu beheben:

  • Option 1 erfordert das Ändern von Dienst-, Vertrags- oder Vorgangsnamen, um sicherzustellen, dass die Namen der Zählerinstanz nicht in Konflikt stehen.
  • Option 2 erfordert keine Namensänderung. Es ist jedoch nur für Anwendungen verfügbar, die die .NET Framework 4.6 oder höher ausführen, und erfordert, dass der Benutzer, der den Dienst hostet, über die in Option 2beschriebenen Berechtigungen verfügt.

Option 1

Sie können den Namen des Diensts, Vertrags oder Vorgangs entweder kurz genug oder unterschiedlich genug ändern. Der Instanzname für einen Vorgangszähler lautet (ServiceName).(ContractName).(OperationName)@(first endpoint listener address) . Um Konflikte zu vermeiden, stellen Sie sicher, dass der Name kürzer als 64 Zeichen ist oder keine Vorgänge im Dienst mit den gleichen 13 Zeichen beginnen.
Nehmen wir beispielsweise an, dass Sie über einen Dienst mit dem Namen Service , mit einem aufgerufenen Vertrag und IService aufgerufenen Vorgängen MyOperationName1 verfügen, die unter gehostet MyOperationName2 http://mybusinessaddress.com/endpoint werden. The counter instance names before shortening would be Service.IService.MyOperationName1@http://mybusinessaddress.com/endpoint and Service.IService.MyOperationName2@http://mybusinessaddress.com/endpoint . Beide werden auf Service.IServi91.MyOperationNa78@39mybusinessaddress.com/endpoint gekürzt, was zu einem Konflikt führt. Sie können diesen Konflikt vermeiden, indem Sie die Vorgangsnamen so ändern, dass sie nicht mit denselben 13 Zeichen beginnen (z. B. OperationName1 und MyOperationName2 ). Sie können dies auch vermeiden, indem Sie einen anderen Teil des Namens kürzen, z. B. den Dienst unter http://mybusinessaddress.com/e hosten, um den Instanznamen auf 64 Zeichen zu setzen. Auf diese Weise wird der Name der Zählerinstanz nicht gekürzt.

Option 2

Wenn ihre Anwendung die .NET Framework 4.6 oder höher ausführt, können Sie eine Einstellung in WCF aktivieren, um sicherzustellen, dass die Instanznamen eindeutig sind, indem Sie einen längeren Hash an das Ende eines Instanznamens anfügen. Sie müssen beides tun:

  • Fügen Sie der In-Konfigurationsdatei die folgende Zeile appSettings hinzu:

    <appSettings>
       <add key="wcf:ensureUniquePerformanceCounterInstanceNames" value="true" />
    </appSettings>
    
  • Stellen Sie sicher, dass der Benutzer, der den Dienst hostet, ein Administrator oder ein Mitglied der Benutzergruppe "Leistungsüberwachung" Windows ist.

Hinweis

Der Benutzer, der diese Berechtigungen benötigt, hostet den WCF-Dienst. In Selfhost-Szenarien ist es beispielsweise der Benutzer, der den Dienst ausführt. Wenn der Dienst über IIS gehostet wird, muss der ApplicationPoolIdentity-Benutzer der Benutzergruppe hinzugefügt werden.

Wenn der Dienst appSetting aktiviert ist und der Benutzer, der den Dienst hostet, kein Administrator oder in der zuvor beschriebenen Benutzergruppe ist, ignoriert WCF diese Einstellung und gibt die folgende Warnung in der SVCLOG-Datei aus:

Namen von Leistungsindikatoreninstanzen sind möglicherweise nicht eindeutig

Weitere Informationen