Özel İzleme
CustomTracking örneği, özel izleme katılımcısının nasıl oluşturulacağını ve izleme verilerinin içeriğinin konsola nasıl yazacağını gösterir. Buna ek olarak, örnek kullanıcı tanımlı verilerle doldurulmuş nesnelerin nasıl yayıldığını CustomTrackingRecord gösterir. Konsol tabanlı izleme katılımcısı, kodda TrackingRecord oluşturulan bir izleme profili nesnesini kullanarak iş akışı tarafından yayılan nesneleri filtreler.
Örnek Ayrıntılar
Windows Workflow Foundation (WF), bir iş akışı örneğinin yürütülmesini izlemek için bir izleme altyapısı sağlar. İzleme çalışma zamanı, iş akışı yaşam döngüsüyle ilgili olayları, iş akışı etkinliklerinden gelen olayları ve özel izleme olaylarını yaymak için bir iş akışı örneği uygular. Aşağıdaki tabloda izleme altyapısının birincil bileşenleri ayrıntılı olarak yer alır.
Bileşen | Veri Akışı Açıklaması |
---|---|
çalışma zamanını izleme | İzleme kayıtlarını yaymak için altyapı sağlar. |
Katılımcıları izleme | İzleme kayıtlarını tüketir. .NET Framework 4, izleme kayıtlarını Windows için Olay İzleme (ETW) olayları olarak yazan bir izleme katılımcısı ile birlikte birlikte bulunur. |
İzleme profili | İzleme katılımcısının bir iş akışı örneğinden yayılan izleme kayıtlarının bir alt kümesine abone olmasına olanak tanıyan bir filtreleme mekanizması. |
Aşağıdaki tabloda, iş akışı çalışma zamanının yaydığı izleme kayıtları ayrıntılı olarak yer alır.
kayıt izleme | Açıklama |
---|---|
İş akışı örneği izleme kayıtları. | İş akışı örneğinin yaşam döngüsünü açıklar. Örneğin, iş akışı başladığında veya tamamlandığında bir örnek kaydı yayılır. |
Etkinlik durumu İzleme Kayıtları. | Etkinlik yürütme ayrıntıları. Bu kayıtlar, bir etkinliğin zamanlanması, etkinliğin ne zaman tamamlanması veya bir hatanın atılması gibi bir iş akışı etkinliğinin durumunu gösterir. |
Yer işareti yeniden kullanım kaydı. | bir iş akışı örneği içindeki bir yer işareti sürdürülürken yayılır. |
Özel İzleme Kayıtları. | İş akışı yazarı Özel İzleme Kayıtları oluşturabilir ve bunları özel etkinlik içinde yayımlayabilir. |
İzleme katılımcısı, izleme profillerini kullanarak yayılan TrackingRecord nesnelerin bir alt kümesine abonedir. İzleme profili, belirli bir izleme kaydı türü için abone olunmasına izin veren izleme sorguları içerir. İzleme profilleri kodda veya yapılandırmada belirtilebilir.
Özel İzleme Katılımcısı
İzleme katılımcısı API'si, iş akışı çalışma zamanı tarafından yayılan nesneleri işlemek TrackingRecord için özel mantık içerebilen kullanıcı tarafından sağlanan izleme katılımcısıyla izleme çalışma zamanının genişletılmasına olanak tanır.
İzleme katılımcısı yazmak için kullanıcının uygulaması TrackingParticipantgerekir. Özel olarak, yönteminin Track özel katılımcı tarafından uygulanması gerekir. bu yöntem, iş akışı çalışma zamanı tarafından bir TrackingRecord yayıldığında çağrılır.
public abstract class TrackingParticipant
{
protected TrackingParticipant();
public virtual TrackingProfile TrackingProfile { get; set; }
public abstract void Track(TrackingRecord record, TimeSpan timeout);
}
İzleme katılımcısının tamamı ConsoleTrackingParticipant.cs dosyasında uygulanır. Aşağıdaki kod örneği, özel izleme katılımcısının Track yöntemidir.
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();
}
Aşağıdaki kod örneği, konsol katılımcısını iş akışı çağırıcısına ekler.
ConsoleTrackingParticipant customTrackingParticipant = new ConsoleTrackingParticipant()
{
...
// The tracking profile is set here, refer to Program.CS
...
}
WorkflowInvoker invoker = new WorkflowInvoker(BuildSampleWorkflow());
invoker.Extensions.Add(customTrackingParticipant);
Özel İzleme Kayıtlarını Yayma
Bu örnek, özel bir iş akışı etkinliğinden nesne yayma CustomTrackingRecord özelliğini de gösterir:
Nesneler CustomTrackingRecord oluşturulur ve kayıtla birlikte dağıtılması istenen kullanıcı tanımlı verilerle doldurulur.
, CustomTrackingRecord öğesinin izleme yöntemi çağrılarak ActivityContextyayılır.
Aşağıdaki örnekte, özel etkinlik içindeki nesnelerin nasıl yaydığı CustomTrackingRecord gösterilmektedir.
// Create the Custom Tracking Record
CustomTrackingRecord customRecord = new CustomTrackingRecord("OrderIn")
{
Data =
{
{"OrderId", 200},
{"OrderDate", "20 Aug 2001"}
}
};
// Emit custom tracking record
context.Track(customRecord);
Bu örneği kullanmak için
Visual Studio'yu kullanarak CustomTrackingSample.sln çözüm dosyasını açın.
Çözümü oluşturmak için CTRL+SHIFT+B tuşlarına basın.
Çözümü çalıştırmak için CTRL+F5 tuşlarına basın.