Aracılığıyla paylaş


İş Akışı için İzlemeyi Yapılandırma

bir iş akışı üç yolla yürütülebilir:

İş 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, bir WorkflowApplication ve bir WorkflowServiceHost öğesine izleme katılımcısı eklenerek izlemenin nasıl yapılandırıldığı ve WorkflowInvoker kullanırken izlemenin 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. Bir iş akışı uygulamasını, başka bir yapılandırma dosyası kullanmadan, WorkflowApplication sınıfını kullanan kendinden barındırılan bir .exe dosyası yoluyla kod aracılığıyla yapılandırırsınız. İzleme katılımcısı, örnek WorkflowApplication örneğine bir uzantı 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. Bir Web.config dosyası (Web'de barındırılan hizmet için) veya bir 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ışı belirterek veya hizmet konağı için koleksiyona Behaviors izlemeye özgü bir davranış ekleyerek kod aracılığıyla yapılandırılır.

İçinde WorkflowServiceHost barındırılan bir iş akışı hizmeti için, bir yapılandırma dosyasında EtwTrackingParticipant<behavior öğesini kullanarak aşağıdaki örnekte gösterildiği gibi 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ış eklentisi oluşturun ve aşağıdaki örnek kodda gösterildiği gibi ServiceHost'a ekleyin.

Uyarı

Ö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
    });
 }

Uyarı

İzleme profilleri hakkında daha fazla bilgi için İzleme Profilleri bölümüne bakın.

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'nde izleme kayıtlarını görüntüleme

WF yürütmesi izlenirken özellikle ilgi çekici olan iki Event Viewer günlüğü, Analiz günlüğü ve Hata Ayıklama günlüğüdür. Her ikisi de Microsoft|Windows|Uygulama Server-Applications düğümünün altında bulunur. 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'nde WF hata ayıklama izleme olaylarını toplamak için Hata Ayıklama Günlüğü'nü etkinleştirin.

  1. Olay Görüntüleyicisi'ni 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.

  2. Olay Görüntüleyicisi iletişim kutusunda Uygulamalar ve Hizmet Günlükleri düğümünü genişletin.

  3. Microsoft, Windows ve Application Server-Applications düğümlerini genişletin.

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

  5. İzleme olayları oluşturmak için izleme özellikli uygulamanızı çalıştırın.

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

  1. Olay Görüntüleyicisi'ni 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.

  2. Olay Görüntüleyicisi iletişim kutusunda Uygulamalar ve Hizmet Günlükleri düğümünü genişletin.

  3. Microsoft, Windows ve Application Server-Applications düğümlerini genişletin.

  4. Application Server-Applications düğümü altındaki Analiz düğümüne sağ tıklayın ve Günlüğü Etkinleştir'i seçin.

  5. İzleme kayıtları oluşturmak için izleme özellikli uygulamanızı çalıştırın.

  6. 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:

İzleme kayıtlarını gösteren Olay Görüntüleyicisi'nin ekran görüntüsü.

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.

  1. Uygulama yapılandırma dosyasında sağlayıcı kimliğini bildirin.

    <system.serviceModel>
        <diagnostics etwProviderId="2720e974-9fe9-477a-bb60-81fe3bf91eec"/>
    </system.serviceModel>
    
  2. .NET Framework 4.6.1<\Microsoft.Windows.ApplicationServer.Applications.man dosyasının %windir%\Microsoft.NET\Framework\>latest sürümünden bildirim dosyasını geçici bir konuma kopyalayın ve Microsoft.Windows.ApplicationServer.Applications_Provider1.man olarak yeniden adlandırın

  3. Manifest dosyasındaki GUID değerini yeni GUID olarak değiştirin.

    <provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
    
  4. 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}" />
    
  5. Ö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)" />
    
  6. Aşağıdaki adımları izleyerek kaynak DLL'sini oluşturun.

    1. Windows SDK'sını yükleyin. Windows SDK'sı ileti derleyicisini (mc.exe) ve kaynak derleyicisini (rc.exe) içerir.

    2. Windows SDK komut isteminde yeni bildirim dosyasında mc.exe çalıştırın.

      mc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.man
      
    3. Önceki adımda oluşturulan kaynak dosyasında rc.exe çalıştırın.

      rc.exe  Microsoft.Windows.ApplicationServer.Applications_Provider1.rc
      
    4. NewProviderReg.cs adlı boş bir cs dosyası oluşturun.

    5. 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
      
    6. 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" />
      
    7. Bildirimi kaydetmek için wevtutil kullanın.

      wevtutil im Microsoft.Windows.ApplicationServer.Applications_Provider1.man
      

Ayrıca bakınız