Aracılığıyla paylaş


Windows İş Akışı Mimarisi

Windows Workflow Foundation (WF), uzun süre çalışan etkileşimli uygulamalar geliştirmek için soyutlama düzeyini yükseltir. Çalışma birimleri, aktiviteler olarak tanımlanır. Etkinlikler akış denetimi, özel durum işleme, hata yayma, durum verilerinin kalıcılığı, devam eden iş akışlarının bellek, izleme ve işlem akışından yüklenmesi ve kaldırılması için olanaklar sağlayan bir ortamda çalışır.

Etkinlik Mimarisi

Etkinlikler, Activity, CodeActivity, AsyncCodeActivity veya NativeActivity türetilen CLR türleri olarak veya Activity<TResult>, CodeActivity<TResult>, AsyncCodeActivity<TResult> veya NativeActivity<TResult> değer döndüren varyantları olarak geliştirilmiştir. öğesinden Activity türetilen etkinliklerin geliştirilmesi, kullanıcının iş akışı ortamında yürütülen iş birimlerini hızla oluşturmak için önceden var olan etkinlikleri bir araya getirmesine olanak tanır. CodeActivityise, yürütme mantığının öncelikle etkinlik bağımsız değişkenlerine erişim için kullanılarak CodeActivityContext yönetilen kodda yazılabilmesini sağlar. AsyncCodeActivity , zaman uyumsuz görevleri uygulamak için kullanılabilmesi dışında benzerdir CodeActivity . 'den NativeActivity türetilen etkinlikler geliştirmek, kullanıcıların çalışma zamanına alt öğeleri zamanlama, yer işaretleri oluşturma, zaman uyumsuz çalışmayı çağırma, işlemleri kaydetme ve daha fazlası gibi işlevler aracılığıyla NativeActivityContext erişmesini sağlar.

'den Activity türetilen yazma etkinlikleri bildirim temellidir ve bu etkinlikler XAML'de yazılabilir. Aşağıdaki örnekte, yürütme gövdesi için diğer etkinlikler kullanılarak Prompt adlı bir etkinlik oluşturulur.

<Activity x:Class='Prompt'  
  xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'  
    xmlns:z='http://schemas.microsoft.com/netfx/2008/xaml/schema'  
xmlns:my='clr-namespace:XAMLActivityDefinition;assembly=XAMLActivityDefinition'  
xmlns:s="clr-namespace:System;assembly=mscorlib"  
xmlns="http://schemas.microsoft.com/2009/workflow">  
<z:SchemaType.Members>  
  <z:SchemaType.SchemaProperty Name='Text' Type='InArgument(s:String)' />  
  <z:SchemaType.SchemaProperty Name='Response' Type='OutArgument(s:String)' />  
</z:SchemaType.Members>  
  <Sequence>  
    <my:WriteLine Text='[Text]' />  
    <my:ReadLine BookmarkName='r1' Result='[Response]' />  
  </Sequence>  
</Activity>  

Etkinlik Bağlamı

ActivityContext, etkinlik yazarının iş akışı çalışma zamanı arabirimidir ve çalışma zamanının zengin özelliklerine erişim sağlar. Aşağıdaki örnekte, bir yer işareti oluşturmak için yürütme bağlamını kullanan bir etkinlik tanımlanmıştır (etkinliğin yürütmesinde bir devamlılık noktası kaydetmesine izin veren mekanizma ve bu mekanizma etkinliğe veri geçiren bir konak tarafından sürdürülebilir).

public sealed class ReadLine : NativeActivity<string>
{
    [RequiredArgument]
    public InArgument<string> BookmarkName { get; set; }

    protected override void Execute(NativeActivityContext context)
    {
        // Create a Bookmark and wait for it to be resumed.
        context.CreateBookmark(BookmarkName.Get(context),
            new BookmarkCallback(OnResumeBookmark));
    }

    // NativeActivity derived activities that do asynchronous operations by calling
    // one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext
    // must override the CanInduceIdle property and return true.
    protected override bool CanInduceIdle
    {
        get { return true; }
    }

    public void OnResumeBookmark(NativeActivityContext context, Bookmark bookmark, object obj)
    {
        // When the Bookmark is resumed, assign its value to
        // the Result argument.
        Result.Set(context, (string)obj);
    }

Etkinlik Yaşam Döngüsü

Bir etkinlik örneği başlangıçta Executing durumunda başlar. Özel durumlarla karşılaşılmadığı sürece, tüm alt etkinliklerin yürütülmesi ve herhangi bir bekleyen işin (Bookmark nesneler gibi) tamamlanması sona erene kadar bu durumda kalır; bu noktada Closed durumuna geçiş yapar. Bir etkinlik örneğinin ana etkinliği, bir alt aktiviteden iptal isteğinde bulunabilir; alt aktivite iptal edilebildiği durumda Canceled durumunda tamamlanır. Yürütme sırasında bir özel durum fırlatılırsa, çalışma zamanı etkinliği Faulted durumuna geçirir ve özel durumu üst etkinlik zinciri boyunca yayar. Bir etkinliğin üç tamamlanma durumu şunlardır:

  • Kapalı: Etkinlik çalışmasını tamamladı ve çıktı.

  • İptal edildi: Etkinlik, işini zarif bir şekilde sonlandırdı ve çıktı. Bu durum girildiğinde iş açıkça geri alınmaz.

  • Hatalı: Etkinlik bir hatayla karşılaştı ve çalışmasını tamamlamadan çıktı.

Etkinlikler kalıcı hale geldiğinde veya kaldırıldığında durumunda kalır Executing .