Spesifikasi Fitur Windows Workflow Foundation

.NET Framework 4 menambahkan sejumlah fitur ke Windows Workflow Foundation. Dokumen ini menjelaskan sejumlah fitur baru, dan memberikan detail tentang skenario di mana fitur tersebut mungkin berguna.

Aktivitas Olahpesan

Aktivitas olahpesan (Receive, SendReply, Send, ReceiveReply) digunakan untuk mengirim dan menerima pesan WCF dari alur kerja Anda. Aktivitas Receive dan SendReply digunakan untuk membentuk operasi layanan Windows Communication Foundation (WCF) yang diekspos melalui WSDL seperti layanan web WCF standar. Send dan ReceiveReply digunakan untuk menggunakan layanan web yang mirip dengan WCF ChannelFactory; pengalaman Tambahkan Referensi Layanan juga ada untuk Workflow Foundation yang menghasilkan aktivitas yang telah dikonfigurasi sebelumnya.

Memulai Aktivitas Olahpesan

  • Di Visual Studio 2012, buat proyek Aplikasi Layanan Alur Kerja WCF. Sepasang Receive dan SendReply akan ditempatkan di kanvas Anda.

  • Klik kanan pada proyek dan pilih Tambahkan Referensi Layanan. Arahkan ke WSDL layanan web yang ada dan klik OK. Buat proyek Anda untuk menampilkan aktivitas yang dihasilkan (diimplementasikan menggunakan Send dan ReceiveReply) di kotak alat Anda.

  • Dokumentasi layanan alur kerja

Skenario Contoh Aktivitas Olahpesan

Layanan BestPriceFinder memanggil beberapa layanan maskapai untuk menemukan harga tiket terbaik untuk rute tertentu. Menerapkan skenario ini akan mengharuskan Anda menggunakan aktivitas olahpesan untuk menerima permintaan harga, mengambil harga dari layanan backend, dan membalas permintaan harga dengan harga terbaik. Ini juga mengharuskan Anda menggunakan aktivitas out-of-box lainnya untuk membuat logika bisnis guna menghitung harga terbaik.

WorkflowServiceHost

WorkflowServiceHost adalah host alur kerja siap pakai yang mendukung beberapa instans, konfigurasi, dan olahpesan WCF (walaupun alur kerja tidak diharuskan menggunakan olahpesan untuk dihosting). Ini juga terintegrasi dengan persistensi, pelacakan, dan kontrol instans melalui serangkaian perilaku layanan. Sama seperti ServiceHost WCF, WorkflowServiceHost dapat dihosting sendiri di aplikasi konsol/WinForms/WPF atau layanan Windows, atau dihosting web (sebagai file .xamlx) di IIS atau WS.

Memulai dengan Host Layanan Alur Kerja

Skenario WorkflowServiceHost

Layanan BestPriceFinder memanggil beberapa layanan maskapai untuk menemukan harga tiket terbaik untuk rute tertentu. Mengimplementasikan skenario ini akan mengharuskan Anda untuk menghosting alur kerja di WorkflowServiceHost. Mengimplementasikan skenario ini juga akan mengharuskan Anda menggunakan aktivitas olahpesan untuk menerima permintaan harga, mengambil harga dari layanan backend, dan membalas permintaan harga dengan harga terbaik.

Korelasi

Korelasi adalah salah satu dari dua hal:

  • Cara mengelompokkan pesan bersama; yaitu, hubungan antara pesan permintaan dan balasannya.

  • Cara memetakan sepotong data ke instans layanan

Memulai

  • Untuk memulai korelasi, buat proyek baru di Visual Studio. Buat variabel berjenis CorrelationHandle.

  • Contoh korelasi yang digunakan untuk mengelompokkan pesan adalah korelasi Permintaan-Balasan yang mengelompokkan pesan.

  • Contoh pemetaan sepotong data ke instans layanan adalah korelasi berbasis konten yang memetakan sepotong data (misalnya, ID pesanan) ke instans alur kerja tertentu.

    • Pada aktivitas olahpesan apa pun, klik properti CorrelationInitializers dan tambahkan QueryCorrelationInitializer menggunakan variabel CorrelationHandle yang dibuat di atas. Klik dua kali pada properti yang diinginkan pada pesan (misalnya OrderID) dari menu dropdown. Atur properti CorrelatesWith ke variabel CorrelationHandle yang digunakan di atas.
  • Dokumentasi Konseptual Korelasi

Skenario Korelasi

Alur kerja pemrosesan pesanan digunakan untuk menangani pembuatan pesanan baru dan memperbarui pesanan yang sudah ada yang sedang diproses. Menerapkan skenario ini akan mengharuskan Anda untuk menghosting alur kerja di WorkflowServiceHost dan menggunakan aktivitas olahpesan. Ini juga memerlukan korelasi berdasarkan orderId untuk memastikan bahwa pembaruan dibuat ke alur kerja yang benar.

Konfigurasi yang Disederhanakan

Skema konfigurasi WCF rumit dan memberi pengguna banyak fitur yang sulit ditemukan. Di .NET Framework 4.6.1, kami berfokus untuk membantu pengguna WCF mengonfigurasi layanan mereka dengan fitur berikut:

  • Menghilangkan kebutuhan untuk konfigurasi per-layanan eksplisit. Jika Anda tidak mengonfigurasi elemen <layanan> apa pun untuk layanan Anda, dan layanan Anda tidak menentukan titik akhir apa pun secara terprogram, maka satu set titik akhir akan ditambahkan secara otomatis ke layanan Anda, satu per alamat dasar layanan dan per kontrak yang diterapkan oleh layanan Anda.

  • Memungkinkan pengguna menentukan nilai default untuk pengikatan dan perilaku WCF, yang akan diterapkan ke layanan tanpa konfigurasi eksplisit.

  • Titik akhir standar menentukan titik akhir yang telah dikonfigurasi sebelumnya yang dapat digunakan kembali, yang memiliki nilai tetap untuk satu atau beberapa properti titik akhir (alamat, pengikatan, dan kontrak), dan memungkinkan penentuan properti kustom.

  • Terakhir, ConfigurationChannelFactory<TChannel> memungkinkan Anda untuk melakukan manajemen pusat konfigurasi klien WCF, berguna dalam skenario di mana konfigurasi dipilih atau diubah setelah waktu pemuatan domain aplikasi.

Memulai

Skenario Konfigurasi Sederhana

  • Pengembang ASMX berpengalaman ingin mulai menggunakan WCF. Namun, WCF tampaknya terlalu rumit! Apa saja informasi yang perlu saya tulis dalam file konfigurasi? Di .NET 4, Anda bahkan dapat memutuskan untuk tidak memiliki file konfigurasi sama sekali.

  • Serangkaian layanan WCF yang ada sangat sulit dikonfigurasi dan dirawat. File konfigurasi memiliki ribuan baris kode XML yang sangat berbahaya untuk disentuh. Bantuan diperlukan untuk mengurangi jumlah kode tersebut agar lebih mudah dikelola.

Pemecah Masalah Kontrak Data

Di .NET Framework 3.5, ada beberapa batasan dalam desain jenis yang diketahui:

  • Menambahkan jenis yang dikenal secara dinamis, selama serialisasi atau deserialisasi, tidak dimungkinkan.

  • Pembuat Serial tidak dapat menangani informasi jenis xsi:type yang tidak diketahui.

  • Pengguna tidak dapat menentukan jenis xsi: apa yang ingin mereka tampilkan pada kabel, misalnya, membuat ukuran instans serialisasi pada kabel lebih kecil.

DataContractResolver memecahkan masalah ini di .NET Framework 4.5.

Memulai

Skenario Pemecah Masalah Kontrak Data

  • Menghindari keharusan mendeklarasikan puluhan objek KnownTypeAttribute dalam suatu layanan.

  • Mengurangi ukuran blob XML.

Diagram Alur

Diagram Alur adalah paradigma terkenal untuk secara visual mewakili masalah domain. Ini adalah gaya alur kontrol baru yang kami perkenalkan di .NET Framework 4. Karakteristik inti dari Diagram Alur adalah bahwa hanya satu aktivitas yang dieksekusi pada waktu tertentu. Diagram Alur dapat mengekspresikan perulangan dan hasil alternatif, tetapi tidak dapat secara native mengekspresikan eksekusi bersamaan dari beberapa node.

Memulai

Skenario Diagram Alur

Aktivitas diagram alur dapat digunakan untuk mengimplementasikan permainan tebak-tebakan. Permainan tebak-tebakan sangat sederhana: komputer memilih nomor acak dan pemain harus menebak nomor tersebut. Ketika pemain mengajukan setiap tebakan, komputer menunjukkan petunjuk kepada mereka (yaitu "coba angka yang lebih rendah"). Jika pemain menemukan nomor dalam waktu kurang dari 7 kali percobaan, pemain akan menerima ucapan selamat khusus dari komputer. Permainan ini dapat diimplementasikan dengan kombinasi aktivitas prosedural berikut:

Aktivitas prosedural (Sequence, If, ForEach, Switch, Assign, DoWhile, While)

Aktivitas prosedural menyediakan mekanisme untuk membuat model alur kontrol berurutan menggunakan konsep yang dikenali programmer. Aktivitas ini memungkinkan konstruksi bahasa pemrograman terstruktur secara tradisional dan, jika sesuai, memberikan paritas bahasa dengan bahasa prosedural umum seperti C# dan Visual Basic.

Memulai

Skenario Aktivitas Prosedural

  • Parallel: Sistem manajemen dokumen intranet memiliki alur kerja persetujuan dokumen. Dokumen perlu disetujui oleh orang-orang di beberapa departemen sebelum dapat diterbitkan ke intranet. Tidak ada perintah yang ditetapkan untuk persetujuan; perintah dapat terjadi kapan saja saat dokumen berada dalam fase "persetujuan tertunda". Saat pengguna mengirimkan dokumen untuk ditinjau, dokumen tersebut harus disetujui oleh manajer langsung mereka, administrator intranet, dan manajer komunikasi internal.

  • ParallelForEach<T>: Aplikasi WF mengelola pembelian perusahaan dalam perusahaan besar. Aturan perusahaan menentukan bahwa sebelum merencanakan operasi pembelian apa pun, penilaian tiga vendor berbeda diperlukan. Seorang karyawan dari departemen pembelian memilih tiga vendor dari daftar vendor perusahaan. Setelah vendor ini dipilih dan diberitahukan, perusahaan akan menunggu proposal ekonomi mereka. Proposal dapat bisa dalam urutan apa pun. Untuk menerapkan skenario ini di WF, kami menggunakan ParallelForEach<T> yang akan mengulangi kumpulan vendor kami dan meminta proposal ekonomi mereka. Setelah semua penawaran dikumpulkan, yang terbaik dipilih dan ditampilkan.

InvokeMethod

Aktivitas InvokeMethod memungkinkan pemanggilan metode publik dalam objek atau jenis dalam cakupan. Aktivitas ini mendukung pemanggilan instans dan metode statis dengan atau tanpa parameter (termasuk array parameter), dan metode generik. Aktivitas ini juga memungkinkan mengeksekusi metode secara sinkron dan asinkron.

Memulai

  • Di Visual Studio 2012, buat aplikasi konsol alur kerja. Tambahkan aktivitas InvokeMethod di perancang alur kerja, dan konfigurasikan metode statis dan instans di dalamnya.

  • Dokumentasi Perancang: Perancang Aktivitas InvokeMethod

Skenario InvokeMethod

  • Metode dalam objek di ruang lingkup perlu dipanggil. Misalnya, nilai perlu ditambahkan ke kamus. Metode Tambahkan dari instans kamus dipanggil, dan kunci serta nilai disediakan.

  • Metode perlu dipanggil pada objek CLR lama. Sebagai ganti membuat aktivitas kustom untuk membungkus panggilan ke kelas lama tersebut, jika berada dalam cakupan selama eksekusi alur kerja, InvokeMethod dapat digunakan.

Aktivitas penanganan kesalahan

Aktivitas TryCatch menyediakan mekanisme untuk menangkap pengecualian yang terjadi selama eksekusi serangkaian aktivitas yang terkandung (mirip dengan konstruksi Try/Catch di C# dan Visual Basic). TryCatch menyediakan penanganan pengecualian di tingkat alur kerja. Saat pengecualian yang tidak tertangani ditampilkan, alur kerja dibatalkan dan blok Akhirnya tidak akan dieksekusi. Perilaku ini konsisten dengan C#.

Memulai

Skenario penanganan kesalahan

Serangkaian aktivitas perlu dijalankan, dan logika spesifik perlu dijalankan saat terjadi kesalahan. Jika selama logika penanganan kesalahan ditemukan bahwa kesalahan tidak dapat dipulihkan, pengecualian akan ditampilkan kembali, dan aktivitas induk (atau host) akan menangani masalah tersebut.

Aktivitas pick

Aktivitas Pick menyediakan pembuatan model alur kontrol berbasis peristiwa di WF. Pick berisi banyak cabang tempat setiap cabang menunggu peristiwa tertentu terjadi sebelum dijalankan. Dalam penyiapan ini, Pick berperilaku serupa dengan Switch<T> di mana Aktivitas hanya akan mengeksekusi satu dari rangkaian peristiwa yang didengarkannya. Setiap cabang berbasis peristiwa dan peristiwa yang terjadi menjalankan cabang yang sesuai terlebih dahulu. Semua cabang lain membatalkan dan berhenti mendengarkan peristiwa.

Memulai

Pilih Skenario

Pengguna perlu dimintai input. Dalam keadaan normal, pengembang akan menggunakan pemanggilan metode seperti ReadLine untuk meminta input pengguna. Masalah dengan pengaturan ini adalah bahwa program menunggu sampai pengguna memasukkan sesuatu. Dalam skenario ini, waktu habis diperlukan untuk membuka blokir aktivitas pemblokiran. Skenario umum adalah skenario yang mengharuskan tugas diselesaikan dalam durasi waktu tertentu. Menghentikan aktivitas pemblokiran adalah skenario di mana Pick menambahkan banyak nilai.

Layanan Perutean WCF

Layanan Perutean dirancang untuk menjadi Router perangkat lunak generik yang memungkinkan Anda mengontrol bagaimana pesan WCF mengalir di antara klien dan layanan Anda. Layanan Perutean memungkinkan memisahkan klien dari layanan Anda, yang memberi Anda lebih banyak kebebasan dalam hal konfigurasi yang dapat didukung dan fleksibilitas yang dimiliki saat mempertimbangkan cara menghosting layanan Anda. Di .NET Framework 3.5, klien dan layanan digabungkan dengan erat; klien harus tahu tentang semua layanan yang diperlukan untuk berkomunikasi dan lokasinya. Selain itu, WCF di .NET Framework 3.5 memiliki batasan sebagai berikut:

  • Penanganan kesalahan rumit, karena logika ini harus dikodekan ke dalam klien.

  • Klien dan layanan harus selalu menggunakan pengikatan yang sama.

  • Layanan jarang diperhitungkan dengan baik: lebih mudah untuk meminta klien berbicara dengan satu layanan yang mengimplementasikan semuanya, daripada harus memilih di antara beberapa layanan.

Layanan perutean di .NET 4 dirancang untuk membuat masalah ini lebih mudah dipecahkan. Layanan perutean baru memiliki beberapa fitur berikut:

  1. Perutean berbasis konten (MessageFilter objek memeriksa pesan untuk menentukan ke mana harus dikirim.)

  2. Bridging protokol (transportasi & pesan)

  3. Penanganan kesalahan (router menangkap pengecualian komunikasi dan gagal mencadangkan titik akhir)

  4. Pembaruan dinamis (dalam memori) dari MessageFilterTable<TFilterData> dan Konfigurasi Perutean.

Memulai

  1. Dokumentasi: Perutean

  2. Sampel: Layanan Perutean [Sampel WCF]

  3. Blog: Aturan Perutean!

Skenario Perutean

Layanan perutean berguna dalam skenario berikut:

  • Klien dapat berbicara dengan beberapa layanan tanpa harus menangani semuanya secara langsung.

  • Klien dapat melakukan logika tambahan pada permintaan klien untuk menentukan ke mana harus merutekannya

  • Menguraikan operasi yang dilakukan klien menjadi beberapa implementasi layanan tanpa memfaktorkan ulang klien.

  • Klien dan layanan dapat berkomunikasi pengikatan yang berbeda dengan pengaturan keamanan yang berbeda.

  • Klien dapat diaktifkan untuk menjadi lebih kuat terhadap kegagalan atau tidak tersedianya layanan.

Penemuan WCF

WCF Discovery adalah teknologi kerangka kerja yang memungkinkan Anda menggabungkan mekanisme penemuan ke infrastruktur aplikasi Anda. Anda dapat menggunakan ini untuk membuat layanan Anda dapat ditemukan, dan mengonfigurasi klien Anda untuk mencari layanan. Klien tidak perlu lagi dikodekan dengan titik akhir, membuat aplikasi Anda lebih tangguh dan toleran terhadap kesalahan. Discovery adalah platform yang sempurna untuk membangun kemampuan konfigurasi otomatis ke dalam aplikasi Anda.

Produk ini dibuat di atas standar WS-Discovery. Produk ini dirancang agar dapat dioperasikan, dapat diperluas, dan bersifat generik. Produk ini mendukung dua mode operasi:

  1. Dikelola: di mana ada entitas di jaringan yang memiliki pengetahuan tentang layanan yang ada, klien mengkuerinya secara langsung untuk mendapatkan informasi. Ini dianalogikan dengan Direktori Aktif.

  2. Ad-hoc: di mana klien menggunakan pesan multicast untuk menemukan layanan.

Lebih lanjut, pesan discovery adalah agnostik protokol jaringan; Anda dapat menggunakannya di atas protokol apa pun yang mendukung persyaratan mode. Misalnya, pesan multicast discovery dapat dikirim melalui saluran UDP atau jaringan lain yang mendukung pesan multicast. Poin desain ini, dikombinasikan dengan fleksibilitas fitur, memungkinkan Anda menyesuaikan penemuan secara khusus dengan solusi Anda.

Memulai

Skenario Penemuan

Pengembang tidak ingin membuat titik akhir kode keras, karena tidak diketahui kapan layanan saya akan tersedia. Sebaliknya, pengembang ingin memilih layanan saat dijalankan. Diperlukan lebih banyak pemisahan, ketahanan, dan konfigurasi otomatis antar komponen dalam aplikasi.

Pelacakan

Pelacakan alur kerja memberikan wawasan tentang eksekusi instans alur kerja. Peristiwa pelacakan dikeluarkan dari alur kerja di tingkat instans alur kerja dan saat aktivitas dalam alur kerja dijalankan. Peserta pelacakan alur kerja perlu ditambahkan ke host alur kerja untuk berlangganan rekaman pelacakan. Catatan pelacakan difilter menggunakan profil pelacakan. .NET Framework menyediakan peserta pelacakan ETW (Pelacakan Peristiwa untuk Windows), dan profil dasar diinstal di file machine.config.

Memulai

  1. Di Visual Studio 2010, buat proyek Aplikasi Layanan Alur Kerja WCF. Sepasang Receive dan SendReply akan ditempatkan di kanvas Anda untuk memulai.

  2. Buka web.config dan tambahkan perilaku pelacakan ETW tanpa profil.

    1. Profil default digunakan.

    2. Buka penampil peristiwa dan aktifkan saluran analitik di node berikut: Pemantau Peristiwa, Log Aplikasi dan Layanan, Microsoft, Windows, Aplikasi Server-Aplikasi. Klik kanan Analitik dan pilih Aktifkan Log.

    3. Jalankan layanan alur kerja.

    4. Amati peristiwa pelacakan alur kerja di penampil peristiwa.

  3. Contoh: Pelacakan

  4. Dokumentasi konseptual: Pelacakan dan Pelacakan Alur Kerja

SQL Workflow Instance Store

SqlWorkflowInstanceStore adalah implementasi berbasis SQL Server dari penyimpanan instans. Penyimpanan instans menyimpan status instans yang berjalan bersama dengan semua data yang diperlukan untuk memuat dan melanjutkan instans tersebut. Host layanan menginstruksikan penyimpanan instans untuk menyimpan status instans jika alur kerja berlanjut, dan menginstruksikan penyimpanan instans untuk memuat status instans ketika pesan tiba untuk instans tersebut atau aktivitas penundaan berakhir.

Memulai

  1. Di Visual Studio 2012, buat Alur Kerja yang berisi aktivitas Persist implisit atau eksplisit. Tambahkan perilaku SqlWorkflowInstanceStore ke host layanan alur kerja Anda. Ini dapat dilakukan dalam kode atau dalam file konfigurasi aplikasi.

  2. Contoh: Persistensi

  3. Dokumentasi konseptual: Penyimpanan Instans Alur Kerja SQL.