Makale Özeti

Yeni bir teknoloji ile karşılaştığımızda, her zaman programcılık felsefesi gereği “Merhaba Dünya” projesi yapılır. Bir önceki bölümde Windows Workflow Foundation(WWF) ile ilgili kavramsal konulardan söz etmiştim. Şimdiki amacım ise WWF ile ilgili “Merhaba Dünya” uygulaması yapmak. Daha sonra aktivite(activity) kavramı ve out-of-the-box aktivitelerinden söz ederek Windows Workflow Foundation teknolojisinin derinlerine doğru ilerlemek.

Makale

İlk Windows Workflow Foundation Projemiz

 

Yeni bir teknoloji ile karşılaştığımızda, her zaman programcılık felsefesi gereği “Merhaba Dünya” projesi yapılır. Bir önceki bölümde Windows Workflow Foundation(WWF) ile ilgili kavramsal konulardan söz etmiştim. Şimdiki amacım ise WWF ile ilgili “Merhaba Dünya” uygulaması yapmak. Daha sonra aktivite(activity) kavramı ve out-of-the-box aktivitelerinden söz ederek Windows Workflow Foundation teknolojisinin derinlerine doğru ilerlemek.

 

 

Bilinmesi Gerekenler :

 

  1. AutoResetEvent: System.Threading isim alanı altında bulunan AutoResetEvent sınıfı, Threadler arasındaki iletişimi sinyaller aracılığı ile sağlar. ThreadPool içerisinde bekleyen bir thread’in çalışmaya devam etmesini işaret ederken, sistemin içinde bulunduğu thread’i beklemeye alır.

 

Bu sınıfın Resume metodu ise sistemin içerisinde bulunan bekleyen thread’in çalışmaya devam etmesini sağlar.

 

Set metodu ise threadler arasındaki iletişimi sağlayan sinyali yollar ve mevcut thread release edilir.

 

WaitOne metodu, o anki thread’in sinyal gelene kadar beklemesini sağlar.

 

  1. WorkflowRuntime: System.Workflow.Runtime isim alanı altında bulunan WorkflowRuntime sınıfı, oluşturduğumuz workflowların çalışma zamanında oluşturulmasını ve hizmet vermeye başlatılmasını sağlayan sınıftır.

 

CreateWorkflow metodu ile daha önceden tanımlamış olduğumuz workflow’dan bir örnek oluşturur.

 

  1. WorkflowInstance: System.Workflow.Runtime isim alanı altında bulunan WorkflowInstance sınıfı, WorkflowRuntime sınıfı aracılığı ile oluşturduğumuz örneği yönetmek için kullanılır.

 

Start metodu, oluşturulan örneğin hizmet vermeye başlamasını sağlan metottur.

 

 

Uygulama Adımları:

 

Bir önceki aşamada örneğimize geçmeden önce bilmemiz gereken Bu bölümde ilk Windows Workflow Foundation uygulamamızı yaparken hangi adımları izlememiz gerektiğini göreceğiz.

 

  1. İlk olarak File à New Project menüsüne tıklayın.Açılan menüden Visual C# sekmesinin altındaki Workflow menüsünü seçin. Sol tarafta Workflow templatelerinin listelendiğini göreceksiniz. Sequential Worflow Library template’ini seçerek OK butonuna basın.

 

 

Yukarıdaki ekran görüntüsünde Sequential WorkflowLibrary haricinde boş bir Workflow projesi başlatmak için kullanılan Empty Workflow Project, State Machine kütüphanesi hazırlamak için State Machine Workflow Library, kendi aktivitenizi tanımlamak istediğinizde kullancağınız Workflow Activity Library templateleri bulunmaktadır.

 

  1. OK butonuna bastığınızda aşağıdaki ekran görüntüsündeki gibi sequential workflow ara yüzünü göreceksiniz.

 

  1. Solution Explorer penceresinde oluşturmuş olduğunuz sequential workflow, Workflow1.cs adıyla gözükecektir.

 

  1. SequentialWorkflowActivity’i seçince özellikler penceresinde Completed ve Initialized gibi özelliklerini göreceksiniz. Buralara metot isimleri vererek Completed işlemi oluştuğunda sizde kendi işleriniz yaptırabilirsiniz.

 

 

  1. Toolbox’a baktığınızda Code ve IfElse gibi aktiviteleri göreceksiniz. Bu aktiviteleri Sequential Workflow üzerine sürükleyip bırakabiliriz. İlerleyen bölümlerde bu aktivitelerin hepsini teker teker sizlerle paylaşacağım.

 

 

  1. Sequential Workflow üzerine bir adet CodeActivity sürükleyip bırakalım. Sürükleme bırakma işleminden sonra CodeActivity’nin sağ üst köşesinde ünlem işaretinin çıktığını göreceksiniz. Bunun anlamı bu CodeActivity ile ilgili hiçbir implementasyonun yapılmadığıdır.

 

 

 

  1. CodeActivity’i seçip özellikler penceresini açtığınızda, ExecuteCode bölümünün yanında bir ünlem göreceksiniz. Buraya CodeActivity çalıştığında çalıştırılacak metodun adını yazarak enter butonuna basın.

 

 

  1. Aşağıdaki bölüme “MerhabaDunyaYaz“ yazıyorum ve Enter butonuna basıyorum.

 

 

  1. Açılan kod bölümünde “MerhabaDunyaYaz” metodunun yazıldığını göreceksiniz.

 

 

  1.  Bizim yerimize yazılan “MerhabaDunyaYaz” metodu içerisine aşağıdaki kodu yazınız.

 

Console.WriteLine(“Merhaba Dünya”);

 

  1. Bu adımdan sonra geliştirdiğimiz Workflow uygulamasını kullanmak için Solution’umuz içerisine File à Add à Project menüsünden yeni bir Console Application ekliyoruz.

 

 

  1. Solution içerisine Console Application’ı ekledikten sonra aşağıdaki ekran görüntüsüne ulaşacaksınız.

 

 

  1. Şimdi Console Application içerisindeki References bölümüne sağ tuşla tıklayın ve açılan menüden Projects sekmesine gelin. Bu sekmede biraz önce geliştirmiş olduğunuz Workflow1 adlı Sequential Workflow Library’i referans olarak projeniz içerisine ekleyin. Böylelikle bu kütüphaneyi kullanabilir hale geleceksiniz.

 

  1. OK butonuna bastıktan sonra References sekmesini genişlettiğinizde karşınıza çıkacak görüntü aşağıdaki gibi olmalıdır.

 

 

  1. Console Applicaton içerisinde bulunan References sekmesine bir kere daha sağ tuşla tıklayın ve System.Workflow.Runtime, System.Workflow.Activities, System.Workflow.ComponentModel referanslarını projenize ekleyin. Bir Workflow uygulamasını sunmanız için bu referanslara ihtiyacınız olacak.

 

  1. Projeniz içerisine referansları da ekledikten sonra artık aşağıdaki kodları yazıp ctrl+F5 butonlarına basarak uygulamanızın çalıştığınız görebilirsiniz.

 

Aşağıdaki örnekteki event mekanizmasında Anonymous Metotlar kullanılmıştır. Eğer anonymous metotlar hakkında bilginiz yoksa http://www.yazilimuzmani.com/Articles/Details.aspx?aId=1000001465 adresinden detaylı bilgileri alabilirsiniz.

 

Aşağıdaki kodda multi-threading çalışabilmek için AutoResetEvent sınıfından faydalanıyoruz. Oluşturduğumuz WorkflowRuntime sınıfının wrf örneğinin WorkflowComplated ve WorkflowTerminated eventlerini kullanarak threadler arasındaki sinyalleşmeyi sağlıyoruz. Ayrıca WorkflowTerminated olayında hata çıkarsa, çıkan hatayı konsola yazdırıyoruz.

 

 

  1. Ctrl+F5 butonuna bastığınızda ilk Workflow Projenizin başarı ile çalıştığını göreceksiniz.

 

 

 

 

Özet:

 

Yukarıdaki uyguladığımız 17 adımda, sizin için gizli kutu olan Windows Workflow Foundation ile ilgili WF Tanımlama, Mevcut Proje içerisine WF’u dahil etme ve WF’u sunma işlemlerini yaptık. Bu işlemleri yaparken AutoResetEvent, WorkflowRuntime ve WorkflowInstance sınıflarının ne işe yaradıklarını ve kullanımlarını öğrendiniz. Bundan sonraki yazımda toolbox içerisinde bizlere sunulmuş olan aktiviteleri sizlerle paylaşacağım.