Bagikan melalui


Arsitektur Alur Kerja Windows

Windows Workflow Foundation (WF) meningkatkan tingkat abstraksi untuk mengembangkan aplikasi interaktif yang sudah berjalan lama. Unit kerja dirangkum sebagai aktivitas. Aktivitas berjalan di lingkungan yang menyediakan fasilitas untuk kontrol alur, penanganan pengecualian, penyebaran kesalahan, persistensi data status, pemuatan dan pembongkaran alur kerja yang sedang berlangsung dari memori, pelacakan, dan aliran transaksi.

Arsitektur Aktivitas

Aktivitas dikembangkan sebagai tipe CLR yang berasal dari Activity, CodeActivity, AsyncCodeActivity, atau NativeActivity, atau variannya yang mengembalikan nilai, Activity<TResult>, CodeActivity<TResult>, AsyncCodeActivity<TResult>, atau NativeActivity<TResult>. Mengembangkan aktivitas yang berasal dari Activity memungkinkan pengguna untuk mengumpulkan aktivitas yang sudah ada sebelumnya untuk dengan cepat membuat unit kerja yang dijalankan di lingkungan alur kerja. CodeActivity, di sisi lain, memungkinkan logika eksekusi untuk ditulis dalam kode terkelola menggunakan CodeActivityContext terutama untuk akses ke argumen aktivitas. AsyncCodeActivity mirip dengan CodeActivity kecuali dapat digunakan untuk mengimplementasikan tugas asinkron. Mengembangkan aktivitas yang berasal dari NativeActivity memungkinkan pengguna mengakses waktu proses melalui NativeActivityContext untuk fungsionalitas seperti menjadwalkan turunan, membuat bookmark, menjalankan pekerjaan asinkron, mendaftarkan transaksi, dan banyak lagi.

Aktivitas penulisan yang berasal dari Activity bersifat deklaratif dan aktivitas ini dapat ditulis di XAML. Dalam contoh berikut, aktivitas yang disebut Prompt dibuat menggunakan aktivitas lain untuk isi eksekusi.

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

Konteks Aktivitas

ActivityContext adalah antarmuka pembuat aktivitas ke waktu proses alur kerja dan menyediakan akses ke banyak fitur waktu proses. Dalam contoh berikut, aktivitas didefinisikan yang menggunakan konteks eksekusi untuk membuat bookmark (mekanisme yang memungkinkan aktivitas mendaftarkan titik kelanjutan dalam eksekusinya yang dapat dilanjutkan oleh host yang meneruskan data ke aktivitas).

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

Siklus Hidup Aktivitas

Instans aktivitas dimulai dalam status Executing. Kecuali pengecualian ditemui, itu tetap dalam status ini sampai semua aktivitas turunan selesai dijalankan dan pekerjaan tertunda lainnya (Bookmark objek, misalnya) selesai, di mana ia beralih ke status Closed. Induk instans aktivitas dapat meminta turunan untuk membatalkan; jika turunan dapat dibatalkan, itu selesai dalam status Canceled. Jika pengecualian dilemparkan selama eksekusi, runtime menempatkan aktivitas ke dalam status Faulted dan menyebarkan pengecualian ke rantai aktivitas induk. Berikut ini adalah tiga status penyelesaian suatu aktivitas:

  • Tutup: Aktivitas telah menyelesaikan pekerjaannya dan keluar.

  • Dibatalkan: Aktivitas dengan anggun meninggalkan pekerjaannya dan keluar. Pekerjaan tidak dibatalkan secara eksplisit saat status ini dimasukkan.

  • Kesalahan: Aktivitas mengalami kesalahan dan telah keluar tanpa menyelesaikan pekerjaannya.

Aktivitas tetap dalam status Executing saat dipertahankan atau dibongkar.