Megosztás a következőn keresztül:


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.

Flow of tracking data through the ETW tracking provider.

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ó

  1. A Eseménynapló indítása (EVENTVWR.EXE)

  2. 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.

  3. 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.

  4. 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