Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A CustomTracking-minta bemutatja, hogyan hozhat létre egyéni nyomkövetési résztvevőt, és hogyan írhatja a követési adatok tartalmát a konzolra. A minta emellett bemutatja, hogyan bocsáthat ki CustomTrackingRecord felhasználó által megadott adatokkal feltöltött objektumokat. A konzolalapú nyomkövetési résztvevő egy TrackingRecord kódban létrehozott követőprofil-objektum használatával szűri a munkafolyamat által kibocsátott objektumokat.
Minta részletei
A Windows Workflow Foundation (WF) egy nyomkövetési infrastruktúrát biztosít a munkafolyamat-példányok végrehajtásának nyomon követéséhez. A nyomkövetési futtatókörnyezet implementál egy munkafolyamat-példányt, amely a munkafolyamat életciklusához kapcsolódó eseményeket, a munkafolyamat-tevékenységekből származó eseményeket és egyéni nyomon követési eseményeket bocsát ki. Az alábbi táblázat a nyomkövetési infrastruktúra elsődleges összetevőit ismerteti.
| Összetevő | Leírás |
|---|---|
| Futtatási idő nyomon követése | Biztosítja a nyomkövetési rekordok kibocsátására szolgáló infrastruktúrát. |
| Résztvevők nyomon követése | Felhasználja a nyomkövetési rekordokat. A .NET Framework 4 olyan nyomkövetési résztvevővel rendelkezik, aki a nyomkövetési rekordokat Eseménykövetés windowsos (ETW) eseményekként írja. |
| Nyomkövetési profil | Olyan szűrési mechanizmus, amely lehetővé teszi, hogy a nyomkövetési résztvevő feliratkozzon a munkafolyamat-példányból kibocsátott nyomkövetési rekordok egy részhalmazára. |
Az alábbi táblázat a munkafolyamat-futtatókörnyezet által kibocsátott nyomkövetési rekordokat ismerteti.
| Nyomkövetési rekord | Leírás |
|---|---|
| Munkafolyamat-példányok nyomkövetési rekordjai. | A munkafolyamat-példány életciklusát ismerteti. Például, egy példányrekord jön létre, amikor a munkafolyamat elindul vagy befejeződik. |
| Tevékenységállapot-nyomkövetési rekordok. | A tevékenységek végrehajtásának részletei. Ezek a rekordok egy munkafolyamat-tevékenység állapotát jelzik, például amikor egy tevékenység ütemezve van, vagy amikor a tevékenység befejeződött, vagy ha a rendszer hibát jelez. |
| Könyvjelző újrakezdési rekordja. | A rendszer a munkafolyamat-példányon belüli könyvjelzők újraindításakor bocsátja ki. |
| Egyéni nyomkövetési rekordok. | A munkafolyamat-szerzők létrehozhatnak egyéni nyomkövetési rekordokat, és kibocsáthatják őket az egyéni tevékenységen belül. |
A nyomkövetési résztvevő feliratkozik a kibocsátott TrackingRecord objektumok egy részhalmazára nyomkövetési profilokkal. A nyomkövetési profil olyan nyomkövetési lekérdezéseket tartalmaz, amelyek lehetővé teszik a feliratkozást egy adott nyomkövetési rekordtípusra. A nyomkövetési profilok kódban vagy konfigurációban is megadhatóak.
Személyre szabott 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 megadott nyomkövetési résztvevővel, amely egyéni logikával kezelheti TrackingRecord a munkafolyamat-futtatókörnyezet által kibocsátott objektumokat.
Követő résztvevő írásához a felhasználónak implementálnia TrackingParticipantkell. Konkrétan az Track metódust az egyéni résztvevőnek kell implementálnia. Ezt a metódust akkor hívjuk meg, ha a munkafolyamat-futtatókörnyezet bocsát ki egy TrackingRecord értéket.
public abstract class TrackingParticipant
{
protected TrackingParticipant();
public virtual TrackingProfile TrackingProfile { get; set; }
public abstract void Track(TrackingRecord record, TimeSpan timeout);
}
A teljes nyomkövetési résztvevő a ConsoleTrackingParticipant.cs fájlban van implementálva. Az alábbi példakód az Track egyéni nyomkövetési résztvevőhöz tartozó metódus.
protected override void Track(TrackingRecord record, TimeSpan timeout)
{
...
WorkflowInstanceRecord workflowInstanceRecord = record as WorkflowInstanceRecord;
if (workflowInstanceRecord != null)
{
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
" Workflow InstanceID: {0} Workflow instance state: {1}",
record.InstanceId, workflowInstanceRecord.State));
}
ActivityStateRecord activityStateRecord = record as ActivityStateRecord;
if (activityStateRecord != null)
{
IDictionary<String, object> variables = activityStateRecord.Variables;
StringBuilder vars = new StringBuilder();
if (variables.Count > 0)
{
vars.AppendLine("\n\tVariables:");
foreach (KeyValuePair<string, object> variable in variables)
{
vars.AppendLine(String.Format(
"\t\tName: {0} Value: {1}", variable.Key, variable.Value));
}
}
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
" :Activity DisplayName: {0} :ActivityInstanceState: {1} {2}",
activityStateRecord.Activity.Name, activityStateRecord.State,
((variables.Count > 0) ? vars.ToString() : String.Empty)));
}
CustomTrackingRecord customTrackingRecord = record as CustomTrackingRecord;
if ((customTrackingRecord != null) && (customTrackingRecord.Data.Count > 0))
{
...
}
Console.WriteLine();
}
Az alábbi példakód hozzáadja a konzol résztvevőit a munkafolyamat-meghívóhoz.
ConsoleTrackingParticipant customTrackingParticipant = new ConsoleTrackingParticipant()
{
...
// The tracking profile is set here, refer to Program.CS
...
}
WorkflowInvoker invoker = new WorkflowInvoker(BuildSampleWorkflow());
invoker.Extensions.Add(customTrackingParticipant);
Egyéni nyomkövetési rekordok kibocsátása
Ez a minta azt is bemutatja, hogy CustomTrackingRecord kibocsáthat-e objektumokat egy egyéni munkafolyamat-tevékenységből:
A CustomTrackingRecord rendszer létrehozza és feltölti az objektumokat a rekorddal kibocsátandó, felhasználó által megadott adatokkal.
A CustomTrackingRecord kibocsátása a ActivityContext követési metódusának meghívásával történik.
Az alábbi példa bemutatja, hogyan bocsáthat ki CustomTrackingRecord objektumokat egy egyéni tevékenységen belül.
// Create the Custom Tracking Record
CustomTrackingRecord customRecord = new CustomTrackingRecord("OrderIn")
{
Data =
{
{"OrderId", 200},
{"OrderDate", "20 Aug 2001"}
}
};
// Emit custom tracking record
context.Track(customRecord);
A minta használata
A Visual Studio használatával nyissa meg a CustomTrackingSample.sln megoldásfájlt.
A megoldás létrehozásához nyomja le a CTRL+SHIFT+B billentyűkombinációt.
A megoldás futtatásához nyomja le a CTRL+F5 billentyűkombinációt.