Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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ş CustomTrackingRecord nesnelerin nasıl yayıldığını 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 | Açıklama |
|---|---|
| ç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ıyla birlikte gelir. |
| İ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 Takip | 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 gerçekleştirme 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 Takip Katılımcısı
İzleme katılımcısı API'si, iş akışı çalışma zamanı tarafından yayılan TrackingRecord nesneleri işleyebilmek için özel mantık içerebilen kullanıcı tarafından sağlanan izleme katılımcısıyla izleme çalışma zamanı işlevselliğinin genişletilmesine olanak tanır.
İzleme katılımcısı yazabilmek için, kullanıcının TrackingParticipant uygulaması gerekir. Ö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 çağrısı, ActivityContext nesnesinin izleme metodunu çağırarak yayılır.
Aşağıdaki örnek, özel bir etkinlik içindeki CustomTrackingRecord nesnelerinin nasıl yayılacağını göstermektedir.
// 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.