İş Akışı için İzlemeyi Yapılandırma
bir iş akışı üç yolla yürütülebilir:
Barındırılan yer: WorkflowServiceHost
Bir olarak yürütüldü WorkflowApplication
Doğrudan kullanılarak yürütülür WorkflowInvoker
İş akışı barındırma seçeneğine bağlı olarak, izleme katılımcısı kod aracılığıyla veya bir yapılandırma dosyası aracılığıyla eklenebilir. Bu konu başlığında, ve öğesine bir izleme katılımcısı eklenerek izlemenin WorkflowApplication WorkflowServiceHostnasıl yapılandırıldığı ve kullanırken WorkflowInvokerizlemenin nasıl etkinleştirileceği açıklanmaktadır.
İş Akışı Uygulama İzlemeyi Yapılandırma
Bir iş akışı sınıfını WorkflowApplication kullanarak çalıştırılabilir. Bu konu başlığında, iş akışı konağına bir izleme katılımcısı ekleyerek izlemenin bir .NET Framework 4.6.1 iş akışı uygulaması için nasıl yapılandırıldığı WorkflowApplication gösterilmektedir. Bu durumda, iş akışı bir iş akışı uygulaması olarak çalışır. Sınıfını kullanan şirket içinde barındırılan bir .exe dosyası olan bir iş akışı uygulamasını kod aracılığıyla (yapılandırma dosyası kullanmak WorkflowApplication yerine) yapılandırabilirsiniz. İzleme katılımcısı örneğe uzantı WorkflowApplication olarak eklenir. Bu, WorkflowApplication örneğinin uzantılar koleksiyonuna eklenerek TrackingParticipant yapılır.
Bir iş akışı uygulaması için aşağıdaki kodda gösterildiği gibi davranış uzantısını ekleyebilirsiniz EtwTrackingParticipant .
LogActivity activity = new LogActivity();
WorkflowApplication instance = new WorkflowApplication(activity);
EtwTrackingParticipant trackingParticipant =
new EtwTrackingParticipant
{
TrackingProfile = new TrackingProfile
{
Name = "SampleTrackingProfile",
ActivityDefinitionId = "ProcessOrder",
Queries = new WorkflowInstanceQuery
{
States = { "*" }
}
}
};
instance.Extensions.Add(trackingParticipant);
İş Akışı Hizmeti İzlemeyi Yapılandırma
Bir iş akışı, hizmet ana bilgisayarında WorkflowServiceHost barındırıldığında WCF hizmeti olarak gösterilebilir. WorkflowServiceHost , iş akışı tabanlı bir hizmet için özelleştirilmiş bir .NET ServiceHost uygulamasıdır. Bu bölümde, içinde WorkflowServiceHostçalışan bir .NET Framework 4.6.1 iş akışı hizmeti için izlemeyi yapılandırma açıklanmaktadır. Web.config dosyası (Web'de barındırılan bir hizmet için) veya App.config dosyası (konsol uygulaması gibi tek başına bir uygulamada barındırılan bir hizmet için) aracılığıyla bir hizmet davranışı belirtilerek veya hizmet konağı koleksiyonuna Behaviors izlemeye özgü bir davranış ekleyerek kod aracılığıyla yapılandırılır.
içinde WorkflowServiceHostbarındırılan EtwTrackingParticipant bir iş akışı hizmeti için, aşağıdaki örnekte gösterildiği gibi öğesini bir yapılandırma dosyasında kullanarak <behavior
> ekleyebilirsiniz.
<behaviors>
<serviceBehaviors>
<behavior>
<etwTracking profileName="Sample Tracking Profile" />
</behavior>
</serviceBehaviors>
</behaviors>
Alternatif olarak, içinde WorkflowServiceHostbarındırılan EtwTrackingParticipant bir iş akışı hizmeti için kod aracılığıyla davranış uzantısını ekleyebilirsiniz. Özel bir izleme katılımcısı eklemek için yeni bir davranış uzantısı oluşturun ve aşağıdaki örnek kodda gösterildiği gibi öğesine ekleyin ServiceHost .
Not
Özel izleme katılımcısı ekleyen bir özel davranış öğesinin nasıl oluşturulacağını gösteren örnek kodu görüntülemek istiyorsanız İzleme örneklerine bakın.
ServiceHost svcHost = new ServiceHost(typeof(WorkflowService), new
Uri("http://localhost:8001/Sample"));
EtwTrackingBehavior trackingBehavior =
new EtwTrackingBehavior
{
ProfileName = "Sample Tracking Profile"
};
svcHost.Description.Behaviors.Add(trackingBehavior);
svcHost.Open();
İzleme katılımcısı, iş akışı hizmeti konağına davranışın uzantısı olarak eklenir.
Aşağıdaki örnek kodda yapılandırma dosyasından izleme profilinin nasıl okunduğu gösterilmektedir.
TrackingProfile GetProfile(string profileName, string displayName)
{
TrackingProfile trackingProfile = null;
TrackingSection trackingSection = (TrackingSection)WebConfigurationManager.GetSection("system.serviceModel/tracking");
if (trackingSection == null)
{
return null;
}
profileName ??= "";
//Find the profile with the specified profile name in the list of profile found in config
var match = from p in new List<TrackingProfile>(trackingSection.TrackingProfiles)
where (p.Name == profileName) && ((p.ActivityDefinitionId == displayName) || (p.ActivityDefinitionId == "*"))
select p;
if (match.Count() == 0)
{
//return an empty profile
trackingProfile = new TrackingProfile()
{
ActivityDefinitionId = displayName
};
}
else
{
trackingProfile = match.First();
}
return trackingProfile;
Bu örnek kod, bir iş akışı konağına izleme profili eklemeyi gösterir.
WorkflowServiceHost workflowServiceHost = serviceHostBase as WorkflowServiceHost;
if (null != workflowServiceHost)
{
string workflowDisplayName = workflowServiceHost.Activity.DisplayName;
TrackingProfile trackingProfile = GetProfile(this.profileName, workflowDisplayName);
workflowServiceHost.WorkflowExtensions.Add(() => new EtwTrackingParticipant {
TrackingProfile = trackingProfile
});
}
Not
profilleri izleme hakkında daha fazla bilgi için bkz . İzleme Profilleri.
WorkflowInvoker kullanarak izlemeyi yapılandırma
kullanılarak WorkflowInvokeryürütülen bir iş akışı için izlemeyi yapılandırmak için izleme sağlayıcısını bir WorkflowInvoker örneğe uzantı olarak ekleyin. Aşağıdaki kod örneği Özel İzleme örneğinden alınmalıdır.
WorkflowInvoker invoker = new WorkflowInvoker(BuildSampleWorkflow());
invoker.Extensions.Add(customTrackingParticipant);
invoker.Invoke();
Olay Görüntüleyicisi'da izleme kayıtlarını görüntüleme
WF yürütmesi izlenirken özellikle ilgilenmesi gereken iki Olay Görüntüleyicisi günlük vardır: Analiz günlüğü ve Hata Ayıklama günlüğü. Her ikisi de Microsoft|'un altında bulunur|Windows|Application Server-Applications düğümü. Bu bölümdeki günlükler, sistemin tamamını etkileyen olaylar yerine tek bir uygulamadan gelen olayları içerir.
Hata ayıklama izleme olayları Hata Ayıklama Günlüğüne yazılır. Olay Görüntüleyicisi WF hata ayıklama izleme olaylarını toplamak için Hata Ayıklama Günlüğü'nü etkinleştirin.
Olay Görüntüleyicisi açmak için Başlat'a ve ardından Çalıştır'a tıklayın. Çalıştır iletişim kutusunda yazın
eventvwr
.Olay Görüntüleyicisi iletişim kutusunda Uygulamalar ve Hizmet Günlükleri düğümünü genişletin.
Microsoft, Windows ve Application Server-Applications düğümlerini genişletin.
Uygulama Sunucusu-Uygulamalar düğümü altındaki Hata Ayıklama düğümüne sağ tıklayın ve Günlüğü Etkinleştir'i seçin.
İzleme olayları oluşturmak için izleme özellikli uygulamanızı yürütür.
Hata ayıklama düğümüne sağ tıklayın ve Yenile'yi seçin. İzleme olayları orta bölmede görünür olmalıdır.
WF 4, bir ETW (Windows için Olay İzleme) oturumuna izleme kayıtları yazan bir izleme katılımcısı sağlar. ETW izleme katılımcısı, izleme kayıtlarına abone olmak için bir izleme profiliyle yapılandırılır. İzleme etkinleştirildiğinde, hata izleme kayıtları ETW'ye gönderilir. ETW izleme katılımcısı tarafından yayılan izleme olaylarına karşılık gelen ETW izleme olayları (100-113 aralığı arasında) Analiz Günlüğüne yazılır.
İzleme kayıtlarını görüntülemek için şu adımları izleyin.
Olay Görüntüleyicisi açmak için Başlat'a ve ardından Çalıştır'a tıklayın. Çalıştır iletişim kutusunda yazın
eventvwr
.Olay Görüntüleyicisi iletişim kutusunda Uygulamalar ve Hizmet Günlükleri düğümünü genişletin.
Microsoft, Windows ve Application Server-Applications düğümlerini genişletin.
Application Server-Applications düğümü altındaki Analiz düğümüne sağ tıklayın ve Günlüğü Etkinleştir'i seçin.
İzleme kaydı oluşturmak için izleme özellikli uygulamanızı yürütür.
Analiz düğümüne sağ tıklayın ve Yenile'yi seçin. İzleme kayıtları orta bölmede görünür olmalıdır.
Aşağıdaki görüntüde olay görüntüleyicisindeki olayları izleme gösterilmektedir:
Uygulamaya özgü sağlayıcı kimliğini kaydetme
Olayların belirli bir uygulama günlüğüne yazılması gerekiyorsa, yeni sağlayıcı bildirimini kaydetmek için bu adımları izleyin.
Uygulama yapılandırma dosyasında sağlayıcı kimliğini bildirin.
<system.serviceModel> <diagnostics etwProviderId="2720e974-9fe9-477a-bb60-81fe3bf91eec"/> </system.serviceModel>
Bildirim dosyasını %windir%\Microsoft.NET\Framework\<latest version of .NET Framework 4.6.1>\Microsoft.Windows.ApplicationServer.Applications.man konumundan geçici bir konuma kopyalayın ve Microsoft.Windows.ApplicationServer.Applications_Provider1.man olarak yeniden adlandırın
Bildirim dosyasındaki GUID değerini yeni GUID olarak değiştirin.
<provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
Varsayılan sağlayıcıyı kaldırmak istemiyorsanız sağlayıcı adını değiştirin.
<provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
Önceki adımda sağlayıcı adını değiştirdiyseniz bildirim dosyasındaki kanal adlarını yeni sağlayıcı adıyla değiştirin.
<channel name="Microsoft-Windows-Application Server-Applications_Provider1/Admin" chid="ADMIN_CHANNEL" symbol="ADMIN_CHANNEL" type="Admin" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.ADMIN_CHANNEL.message)" /> <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Operational" chid="OPERATIONAL_CHANNEL" symbol="OPERATIONAL_CHANNEL" type="Operational" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.OPERATIONAL_CHANNEL.message)" /> <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Analytic" chid="ANALYTIC_CHANNEL" symbol="ANALYTIC_CHANNEL" type="Analytic" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.ANALYTIC_CHANNEL.message)" /> <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Debug" chid="DEBUG_CHANNEL" symbol="DEBUG_CHANNEL" type="Debug" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.DEBUG_CHANNEL.message)" /> <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Perf" chid="PERF_CHANNEL" symbol="PERF_CHANNEL" type="Analytic" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.PERF_CHANNEL.message)" />
Aşağıdaki adımları izleyerek kaynak DLL'sini oluşturun.
Windows SDK'sını yükleyin. Windows SDK'sı ileti derleyicisini (mc.exe) ve kaynak derleyicisini (rc.exe) içerir.
Windows SDK komut isteminde yeni bildirim dosyasında mc.exe çalıştırın.
mc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.man
Önceki adımda oluşturulan kaynak dosyasında rc.exe çalıştırın.
rc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.rc
NewProviderReg.cs adlı boş bir cs dosyası oluşturun.
C# derleyicisini kullanarak bir kaynak DLL'si oluşturun.
csc /target:library /win32res:Microsoft.Windows.ApplicationServer.Applications_Provider1.res NewProviderReg.cs /out:Microsoft.Windows.ApplicationServer.Applications_Provider1.dll
Bildirim dosyasındaki
Microsoft.Windows.ApplicationServer.Applications.Provider1.man
kaynak ve ileti dll adını yeni dll adıyla değiştirin.<provider name="Microsoft-Windows-Application Server-Applications_Provider1" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" symbol="Microsoft_Windows_ApplicationServer_ApplicationEvents" resourceFileName="<dll directory>\Microsoft.Windows.ApplicationServer.Applications_Provider1.dll" messageFileName="<dll directory>\Microsoft.Windows.ApplicationServer.Applications_Provider1.dll" />
Bildirimi kaydetmek için wevtutil kullanın.
wevtutil im Microsoft.Windows.ApplicationServer.Applications_Provider1.man