Résztvevők nyomon követése
A résztvevők nyomon követése bővíthetőségi pontok, amelyek lehetővé teszik a munkafolyamat-fejlesztő számára az objektumok elérését TrackingRecord és feldolgozását. .NET-keretrendszer 4.6.1 egy szabványos nyomkövetési résztvevőt tartalmaz, aki a nyomkövetési rekordokat Eseménykövetés windowsos (ETW) eseményekként írja le. Ha ez nem felel meg a követelményeknek, egyéni nyomkövetési résztvevőt is írhat.
Résztvevők nyomon követése
A nyomkövetési infrastruktúra lehetővé teszi egy szűrő alkalmazását a kimenő nyomkövetési rekordokon, így a résztvevők előfizethetnek a rekordok egy részhalmazára. A szűrő alkalmazásának mechanizmusa egy nyomkövetési profilon keresztül történik.
A Windows Workflow Foundation (WF) a .NET-keretrendszer 4.6.1-ben olyan nyomkövetési résztvevőt biztosít, aki a nyomkövetési rekordokat egy ETW-munkamenetbe írja. A résztvevő egy munkafolyamat-szolgáltatásban konfigurálva van, ha egy konfigurációs fájlban követési viselkedést ad hozzá. Az ETW-nyomkövetési résztvevők engedélyezése lehetővé teszi a nyomkövetési rekordok megtekintését az eseménynaplóban. Az ETW-alapú nyomkövetés SDK-mintája jó módszer a WF-nyomkövetés megismerésére az ETW-alapú nyomkövetési résztvevő használatával.
ETW-nyomkövetési résztvevő
.NET-keretrendszer 4.6.1 tartalmaz egy ETW-követő résztvevőt, aki a nyomkövetési rekordokat egy ETW-munkamenetbe írja. Ez nagyon hatékony módon történik, minimális hatással az alkalmazás teljesítményére vagy a kiszolgáló átviteli sebességére. A standard ETW-nyomkövetési résztvevő használatának előnye, hogy a fogadott nyomkövetési rekordok megtekinthetők a Windows Eseménynapló más alkalmazás- és rendszernaplóival.
A standard ETW-nyomkövetési résztvevő a Web.config fájlban van konfigurálva az alábbi példában látható módon.
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<etwTracking profileName="Sample Tracking Profile"/>
</behavior>
</serviceBehaviors>
</behaviors>
<tracking>
<profiles>
<trackingProfile name="Sample Tracking Profile">
….
</trackingProfile>
</profiles>
</tracking>
</system.serviceModel>
</configuration>
Feljegyzés
trackingProfile
Ha nincs megadva név( például csak <etwTracking/>
vagy <etwTracking profileName=""/>
), akkor a rendszer a Machine.config fájlban a .NET-keretrendszer 4.6.1-sel telepített alapértelmezett nyomkövetési profilt használja.
A Machine.config fájlban az alapértelmezett nyomkövetési profil előfizet a munkafolyamat-példányok rekordjaira és hibáira.
Az ETW-ben az események egy szolgáltatóazonosítón keresztül lesznek megírva az ETW-munkamenetbe. Az ETW-nyomkövetési résztvevő által a nyomkövetési rekordok ETW-be való írásához használt szolgáltatóazonosító a Web.config fájl diagnosztikai szakaszában (alatt <system.serviceModel><diagnostics>
) van definiálva. Az ETW nyomkövetési résztvevője alapértelmezés szerint egy alapértelmezett szolgáltatóazonosítót használ, ha nincs megadva, ahogyan az az alábbi példában látható.
<system.serviceModel>
<diagnostics etwProviderId="52A3165D-4AD9-405C-B1E8-7D9A257EAC9F" />
Az alábbi ábra az ETW-nyomkövetési résztvevőn keresztüli adatkövetési folyamatot mutatja be. Ha a nyomkövetési adatok elérik az ETW-munkamenetet, több módon is elérhetők. Az események elérésének egyik legkedvesebb módja a Eseménynapló, az alkalmazásokból és szolgáltatásokból származó naplók és nyomkövetések megtekintésére használt Gyakori Windows-eszköz.
Résztvevők eseményadatainak nyomon követése
A nyomon követési résztvevő nyomon követett eseményadatokat szerializál egy ETW-munkamenetbe egy esemény nyomon követési rekordonkénti formátumban. A rendszer egy 100 és 199 közötti azonosítóval azonosít egy eseményt. A nyomkövetési résztvevő által kibocsátott nyomkövetési eseményrekordok definícióiért tekintse meg a Nyomon követés eseményeinek referenciatémakörét .
Az ETW-események méretét az ETW puffermérete vagy az ETW-események maximális hasznos adatai korlátozzák, attól függően, hogy melyik érték kisebb. Ha az esemény mérete meghaladja ezen ETW-korlátok bármelyikét, az esemény csonkolva lesz, és tartalma tetszőleges módon törlődik. A változókat, argumentumokat, széljegyzeteket és egyéni adatokat a rendszer nem távolítja el szelektíven. Csonkolás esetén ezek mindegyike csonkolva lesz, függetlenül attól az értéktől, amely miatt az esemény mérete meghaladta az ETW-korlátot. Az eltávolított adatok helyébe <item>..<item>
a következő lép: .
A változók, argumentumok és egyéni adatelemek összetett típusai az osztály használatával NetDataContractSerializer szerializálódnak az ETW eseményrekordra. Ez az osztály CLR-típusú információkat tartalmaz a szerializált XML-gőzben.
A hasznos adatok ETW-korlátok miatti csonkolásával ismétlődő nyomkövetési rekordok küldhetők egy ETW-munkamenetbe. Ez akkor fordulhat elő, ha egynél több munkamenet figyeli az eseményeket, és a munkamenetek különböző hasznos adatkorlátokkal rendelkeznek az eseményekre vonatkozóan.
Az alacsonyabb korláttal rendelkező munkamenet esetében előfordulhat, hogy az esemény csonkolt. Az ETW nyomkövetési résztvevője nem ismeri az eseményeket figyelő munkamenetek számát; ha egy esemény csonkolva van egy munkamenethez, akkor az ETW-résztvevő egyszer újrapróbálkozza az esemény küldését. Ebben az esetben a nagyobb hasznos adatméret elfogadására konfigurált munkamenet kétszer kapja meg az eseményt (a nem csonkolt és csonkolt eseményt). A duplikációk megelőzhetők az összes ETW-munkamenet konfigurálásával azonos pufferméretkorlátokkal.
Nyomkövetési adatok elérése egy ETW-résztvevőtől a Eseménynapló
Az ETW-követési résztvevő által az ETW-munkamenetbe írt események a Eseménynapló keresztül érhetők el (az alapértelmezett szolgáltatóazonosító használatakor). Ez lehetővé teszi a munkafolyamat által kibocsátott nyomkövetési rekordok gyors megtekintését.
Feljegyzés
Az ETW-munkamenetek által kibocsátott rekordesemények nyomon követése eseményazonosítókat használ a 100 és 199 közötti tartományban.
A nyomkövetési rekordok megtekintésének engedélyezése a Eseménynapló
A Eseménynapló indítása (EVENTVWR.EXE)
Válassza a Eseménynapló, az Alkalmazások és szolgáltatások naplói, a Microsoft, a Windows, az Application Server-Applications lehetőséget.
Kattintson a jobb gombbal, és győződjön meg arról, hogy a Nézet, elemzési és hibakeresési naplók ki van választva. Ha nem, jelölje ki, hogy a pipa megjelenjen mellette. Ez megjeleníti az elemzési, a perf és a hibakeresési naplókat.
Kattintson a jobb gombbal az Elemzési naplóra, majd válassza a Napló engedélyezése lehetőséget. A napló a %SystemRoot%\System32\Winevt\Logs\Microsoft-Windows-Application Server-Applications%4Analytic.etl fájlban fog létezni.
Egyéni nyomkövetési résztvevő
A nyomkövetési résztvevő API lehetővé teszi a nyomkövetési futtatókörnyezet kiterjesztését egy felhasználó által biztosított nyomkövetési résztvevővel, amely egyéni logikával kezelheti a munkafolyamat-futtatókörnyezet által kibocsátott nyomkövetési rekordokat. Egyéni nyomkövetési résztvevő írásához a fejlesztőnek implementálnia kell a Track
metódust az TrackingParticipant osztályban. Ezt a metódust akkor hívjuk meg, ha a munkafolyamat-futtatókörnyezet egy nyomkövetési rekordot bocsát ki.
A résztvevők nyomon követése az osztályból származik TrackingParticipant . A rendszer által biztosított EtwTrackingParticipant eseménykövetés windowsos (ETW) eseményt bocsát ki minden fogadott nyomkövetési rekordhoz. Egyéni nyomkövetési résztvevő létrehozásához létrejön egy osztály, amely a rendszerből TrackingParticipantszármazik. Az alapszintű nyomkövetési funkciók biztosításához a rendszer felülbírálja a . TrackTrack parancsot, amikor a futtatókörnyezet egy nyomkövetési rekordot küld, és a kívánt módon feldolgozható. Az alábbi példában egy egyéni nyomkövetési résztvevőosztály van definiálva, amely az összes nyomkövetési rekordot kibocsátja a konzolablakba. Olyan objektumot TrackingParticipant is implementálhat, amely a nyomkövetési rekordokat aszinkron módon dolgozza fel annak BeginTrack
és EndTrack
módszereinek használatával
class ConsoleTrackingParticipant : TrackingParticipant
{
protected override void Track(TrackingRecord record, TimeSpan timeout)
{
if (record != null)
{
Console.WriteLine("=================================");
Console.WriteLine(record);
}
}
}
Ha egy adott nyomkövetési résztvevőt szeretne használni, regisztrálja a nyomon követni kívánt munkafolyamat-példányban, ahogy az alábbi példában is látható.
myInstance.Extensions.Add(new ConsoleTrackingParticipant());
Az alábbi példában létrejön egy olyan munkafolyamat, amely egy Sequence tevékenységet tartalmazó WriteLine tevékenységből áll. A ConsoleTrackingParticipant
rendszer hozzáadja a bővítményeket, és meghívja a munkafolyamatot.
Activity activity= new Sequence()
{
Activities =
{
new WriteLine()
{
Text = "Hello World."
}
}
};
WorkflowApplication instance = new WorkflowApplication(activity);
instance.Extensions.Add(new ConsoleTrackingParticipant());
instance.Completed = delegate(WorkflowApplicationCompletedEventArgs e)
{
Console.WriteLine("workflow instance completed, Id = " + instance.Id);
resetEvent.Set();
};
instance.Run();
Console.ReadLine();
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: