Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Ablaufverfolgung bedeutet das Veröffentlichen spezifischer Meldungen, die während der Anwendungsausführung generiert werden. Bei Verwendung der Ablaufverfolgung müssen Sie über einen Mechanismus zum Sammeln und Aufzeichnen der gesendeten Nachrichten verfügen. Ablaufverfolgungsmeldungen werden von Listenern empfangen. Der Zweck eines Listeners ist das Sammeln, Speichern und Weiterleiten von Ablaufverfolgungsmeldungen. Listener leiten die Ablaufverfolgungsausgabe an ein entsprechendes Ziel, beispielsweise ein Protokoll, ein Fenster oder eine Textdatei.
Ein solcher Listener, der DefaultTraceListener, wird bei Aktivierung der Ablaufverfolgung automatisch erstellt und initialisiert. Wenn die Ausgabe der Ablaufverfolgung an zusätzliche Quellen geleitet werden soll, müssen Sie zusätzliche Ablaufverfolgungslistener erstellen und initialisieren. Die von Ihnen erstellten Listener sollten Ihre individuellen Anforderungen widerspiegeln. Beispiel: Sie brauchen ein Textprotokoll der gesamten Ablaufverfolgungsausgabe. In diesem Fall würden Sie einen Listener erstellen, der alle Ausgaben in eine neue Textdatei schreibt, wenn er aktiviert ist. Andererseits möchten Sie die Ausgabe möglicherweise nur während der Anwendungsausführung anzeigen. In diesem Fall erstellen Sie einen Listener, der die gesamte Ausgabe an ein Konsolenfenster leitet. Der EventLogTraceListener kann die Ablaufverfolgungsausgabe an ein Ereignisprotokoll leiten, und der TextWriterTraceListener kann die Ablaufverfolgungsausgabe in einen Datenstrom schreiben.
Aktivieren der Ablaufverfolgung
Um Ablaufverfolgungen während der Transaktionsverarbeitung zu aktivieren, sollten Sie die Konfigurationsdatei Ihrer Anwendung bearbeiten. Im Folgenden finden Sie ein Beispiel.
<configuration>
<system.diagnostics>
<sources>
<source name="System.Transactions" switchValue="Warning">
<listeners>
<add name="tx"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "tx.log" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
System.Transactions-Ablaufverfolgungen werden in die Quelle mit dem Namen "System.Transactions" geschrieben. Mit add können Sie den Namen und den Typ des Ablaufverfolgungslisteners angeben, den Sie verwenden möchten. In unserer Beispielkonfiguration haben wir den Listener "tx" benannt und den standardmäßigen .NET Framework-Ablaufverfolgungslistener (XmlWriterTraceListener) als typ hinzugefügt, den wir verwenden möchten. Verwenden Sie initializeData, um den Namen der Protokolldatei für diesen Listener festzulegen. Darüber hinaus können Sie einen vollqualifizierten Pfad durch einen einfachen Dateinamen ersetzen.
Jedem Typ von Ablaufverfolgungsmeldung wird eine Ebene zugewiesen, um seinen Wichtigkeitsgrad anzugeben. Wenn die Überwachungsebene der Anwendungsdomäne gleich oder niedriger als die Ebene eines Ereignistyps ist, wird diese Nachricht generiert. Die Ablaufverfolgungsebene wird von der switchValue-Einstellung in der Konfigurationsdatei kontrolliert. Die Ebenen, die mit Diagnoseverfolgungsmeldungen verbunden sind, werden in der folgenden Tabelle definiert.
| Ablaufverfolgungsebene | BESCHREIBUNG |
|---|---|
| Kritisch | Schwerwiegende Fehler, wie z. B. die folgenden, sind aufgetreten: – Ein Fehler, der einen sofortigen Verlust der Benutzerfunktionalität verursachen kann. – Ein Ereignis, bei dem ein Administrator Maßnahmen ergreifen muss, um den Funktionsverlust zu vermeiden. - Codefehler - Diese Ablaufverfolgungsebene kann zudem genügenden Kontext zum Interpretieren anderer wichtiger Ablaufverfolgungen bereitstellen. Dies kann dazu beitragen, die Abfolge von Vorgängen zu identifizieren, die zu einem schwerwiegenden Fehler führen. |
| Fehler | Ein Fehler (z. B. ungültiges Konfigurations- oder Netzwerkverhalten) ist aufgetreten, was zu einem Verlust der Benutzerfunktionalität führen kann. |
| Warnung | Eine Bedingung ist vorhanden, die später zu einem Fehler oder kritischen Fehler führen kann (z. B. Zuordnungsfehler oder Näherung eines Grenzwerts). Die normale Verarbeitung von Fehlern aus Benutzercode (z. B. abgebrochene Transaktionen, Timeouts, Authentifizierungsfehler) kann auch eine Warnung generieren. |
| Informationen | Nachrichten, die hilfreich sind, um den Systemstatus zu überwachen und zu diagnostizieren, die Leistung zu messen oder Profile zu erstellen. Dazu gehören Transaktions- und Eintragungslebensdauer-Ereignisse wie beispielsweise eine Transaktion, die erstellt oder für die ein Commit ausgeführt wird, das Überschreiten einer wichtigen Begrenzung oder die Speicherbelegung bedeutender Ressourcen. Ein Entwickler kann dann solche Informationen für die Kapazitätsplanung und das Leistungsmanagement nutzen. |
Rückverfolgungscodes
In der folgenden Tabelle sind die Tracing-Codes aufgeführt, die durch die System.Transactions Infrastruktur generiert werden. In der Tabelle sind der Verfolgungscode, die EventType-Enumerationsebene für die Ablaufverfolgung und die zusätzlichen Daten, die in TraceRecord für die Ablaufverfolgung enthalten sind, enthalten. Zudem wird auch die entsprechende Ablaufverfolgungsebene der Ablaufverfolgung im TraceRecord gespeichert.
| TraceCode | Eventtyp | Zusätzliche Daten in TraceRecord |
|---|---|---|
| TransactionCreated | Info | Transaktionsverfolgungs-ID |
| TransactionPromoted | Info | Lokale Transaktionsverfolgungs-ID, Verteilte Transaktionsverfolgungs-ID |
| EnlistmentCreated | Info | TransactionTraceId, EnlistmentTraceId, EnlistmentType (dauerhaft/flüchtig), EnlistmentOptions |
| EnlistmentCallbackNegative | Warnung | TransactionTraceId, EnlistmentTraceId Rückruf (forcerollback/aborted/indoubt) |
| TransactionRollbackCalled | Warnung | Transaktionsverfolgungs-ID |
| TransactionAborted | Warnung | Transaktionsverfolgungs-ID |
| TransactionInDoubt | Warnung | Transaktionsverfolgungs-ID |
| TransactionScopeCreated | Info | TransactionScopeResult, das folgendes sein kann: - Neue Transaktion. - Transaktion wurde genehmigt. - Abhängige Transaktion ausgeführt - Mit aktueller Transaktion - Keine Transaktion. Neue aktuelle TransactionTraceId |
| TransactionScopeDisposed | Info | TransactionTraceId der vom Bereich "erwarteten" aktuellen Transaktion |
| TransaktionsbereichUnvollständig | Warnung | TransactionTraceId der vom Bereich "erwarteten" aktuellen Transaktion |
| TransactionScopeNestedIn fälschlicherweise | Warnung | TransactionTraceId der vom Bereich "erwarteten" aktuellen Transaktion |
| TransaktionsbereichAktuelleTransaktionGeändert | Warnung | Alte aktuelle TransactionTraceId, sonstige TransactionTraceId |
| TransactionScopeTimeout | Warnung | TransactionTraceId der vom Bereich "erwarteten" aktuellen Transaktion |
| DependentCloneCreated | Info | TransactionTraceId, Typ der erzeugten abhängigen Transaktion (RollbackIfNotComplete/BlockCommitUntilComplete) |
| DependentCloneComplete | Info | Transaktionsverfolgungs-ID |
| WiederherstellungAbgeschlossen | Info | Ressourcen-Manager-GUID (von Basis) |
| Erneutes Auflisten | Info | Ressourcen-Manager-GUID (von Basis) |
| TransactionSerialized | Info | Transaktionsverfolgungs-ID. |
| TransactionException | Fehler | Ausnahmemeldung |
| InvalidOperationException | Fehler | Ausnahmemeldung |
| Interner Fehler | Kritisch | Ausnahmemeldung |
| Übertragungsereignis | Wenn eine Transaktion deserialisiert oder von einer System.Transactions Transaktion zu einer verteilten Transaktion befördert wird, werden die aktuelle ActivityID aus dem ExecutionContext und die verteilte Transaktions-ID geschrieben. Wenn der DTC in den verwalteten Code zurückkehrt, wird die verteilte Transaktions-ID für die Dauer des Callbacks als ActivityID im ExecutionContext festgelegt. |
|
| ConfiguredDefaultTimeoutAdjusted | Warnung | Keine zusätzlichen Daten |
| Transaktionszeitlimit | Warnung | Die TransactionTraceId der Transaktion hat das Zeitlimit überschritten. |
Das XML-Schema für jedes der vorherigen zusätzlichen Datenelemente weist das folgende Format auf.
TransactionTraceIdentifier
<TransactionTraceIdentifier>
<TransactionIdentifier >
string representation of transaction id
</TransactionIdentifier>
< CloneIdentifier >
the clone id number
</CloneIdentifier>
</TransactionTraceIdentifier>
EnlistmentTraceIdentifier
<EnlistmentTraceIdentifier>
<ResourceManagerId>
string form of guid
</ResourceManagerId>
<TransactionTraceIdentifier>
<TransactionIdentifier >
string representation of transaction id
</TransactionIdentifier>
<CloneIdentifier >
the clone id number
</CloneIdentifier>
<TransactionTraceIdentifier>
<EnlistmentIdentifier>
the enlistment id number
</EnlistmentIdentifier>
</EnlistmentTraceIdentifier>
Ressourcen-Manager-ID
<ResourceManagerId>
string form of guid
</ResourceManagerId>
Sicherheitsprobleme bei der Nachverfolgung
Wenn Sie als Administrator die Ablaufverfolgung aktivieren, werden vertrauliche Informationen möglicherweise in ein Ablaufverfolgungsprotokoll geschrieben, das standardmäßig öffentlich sichtbar ist. Um mögliche Sicherheitsrisiken zu mindern, sollten Sie erwägen, das Ablaufverfolgungsprotokoll an einem sicheren Speicherort zu speichern, der durch Freigabe- und Dateisystemzugriffsberechtigungen gesteuert wird.