Windows Communication Foundation(WCF) Nedir ve Nasıl Kullanılır?

Merhaba,

Yazılım dünyasında aynı anda birden fazla sistem üzerinde çalışan dağıtık uygulamalar söz konusu olduğunda bu uygulamaların iletişim altyapısını WCF katmanında belirleyebilmekte ve bu işlemi diğer(.Net Remoting, XML Web Servisleri vs.) gibi teknolojilere nazaran daha kapsamlı ve hızlı icra edebilmekteyiz.

WCF, az kod yazarak birçok işlevi hızlı bir şekilde gerçekleştirmemizi sağlayan ve bir başka deyişle .NET teknolojisinde herşeyi herşeye bağlamaya yarayan bir teknolojidir. WCF’in en büyük getirisi, servis içine işlediğiniz iş mantığının dışa açarken göz önüne alacağınız yöntemlerden bağımsız olmasıdır. Yani demem o ki, bu gün HTTP üzerinden çalışan bir port yarın ufak bir değişiklikle TCP ile çalıştırılabilir. Bu tarz ayarlar implementasyon sonrası sağlanabilmektedir.

Peki hoca! Bu anlattıklarını Web Service ile de yapamaz mıyız? diye sorduğunuzu duyar gibiyim. Bu sorunuza kısmen cevabını vermek daha doğru olacaktır. Çünkü Web Service yukarıda bahsettiğim gibi tüm portları kullanamamakta sade ve sadece HTTP portu üzerinden işlem yapmaktadır. Ama WCF böyle mi? Hemen hemen tüm portları desteklemektedir. Vee farklar sadece bu kadar mı? Tabi ki de hayır. Web Service ile WCF arasındaki diğer farklarıda aşağıda ele alalım;

  • Web Serviceler sadece IIS üzerinde host edilebilirler. WCF ise IIS, WAS, Console Application, Windows NT Services üzerinde host edilebilmektedir.
  • Web Servicelerde güvenlik oldukça sınırlıdır. Kimlik doğrulama ve yetkilendirme işlemleri IIS kullanılarak yapılır. WCF ise her bir protokol için ayrı bir güvenlik hizmeti sağlar.

Anlayacağınız WCF, Web Servicelerden daha kapsamlıdır.

WCF’i anlamak için WCF’in ABC’sini anlamak lazımdır. Peki nedir bu ABC?

  • Address(Adres)
    WCF iletişim katmanını kullanacak uygulamaların doğru kaynakla irtibata girebilmesi için adres bilgisidir.
  • Binding(Bağlayıcı)
    İletişim protokolüdür.
  • Contract(Kontrat)
    İletişim katmanına bağlı uygulamaların, WCF üzerinde hangi yapılara yahut fonksiyonalitelere erişebileceğini belirleyen bir kontrattır.

Yani bu ABC kısaca, dağıtık uygulamaların ve WCF’in süreçteki response ve request trafiğindeki “Nereye?(Address)”, “Nasıl(Binding)” ve “Neyi(Contract) sorularına yanıtları vermektedir.

Şimdi bir WCF uygulamasını pratikte ele alalım. Visual Studio ortamında herhangi bir(Asp.NET, Windows Application yahut Console Application) proje açalım. Ardından bir adette WCF Service Application oluşturalım.

Örneğimizi hayali personeller üzerinden seyredeceğiz.

    public class Personel
    {
        public string Adi { get; set; }
        public string SoyAdi { get; set; }
        public bool CalismaDurumu { get; set; }
    }
    [ServiceContract]
    public interface IPersonelService
    {
        [OperationContract]
        Personel PersonelGetir();
        [OperationContract]
        bool PersonelCalisiyormu();
    }

Yukarıda bir adet service interfacei tanımlanmıştır. Bu arayüz sayesinde WCF dışa açıldığı vakit hangi yapıların erişilebilir olduğunu teminat altına almış bulunmaktayız. ServiceContract attributeu ile işaretlenen sınıf servisi belirtmektedir. OperationContract attributeu ise servis içinde dışarıya açılacak olan operasyonel metotları temsil etmektedir.

    public class PersonelService : IPersonelService
    {
        public bool PersonelCalisiyormu() => PersonelGetir().CalismaDurumu;
        public Personel PersonelGetir() => new Personel
        {
            Adi = "Gençay",
            SoyAdi = "Yıldız",
            CalismaDurumu = true
        };
    }

“Contract” olan IPersonelService isimli interfacei implamente eden ve asıl(concrete) servis nesnemiz olan “PersonelService” sınıfı işlevine hazırdır.

“.svc” uzantılı(ki bu bende PersonelService.svc dosyasıdır) dosyaya sağ tıklayarak “View in Browser” sekmesi üzerinden ilgili servisimizin adresini elde ediyoruz.

Projemizi derliyoruz. Ardından elde edilen linki oluşturmuş olduğumuz diğer platformumuzun referansına sağ tıklayarak “Add Service Referance” sekmesini seçiyoruz ve karşımıza gelen pencerede Address kısmına ilgili adresi yazıp, namespace kısmına bir isim belirterek(ben PersonelService yazmış bulunmaktayım) “Go” ve ardından “Ok” diyerek servisimizi projemize dahil etmiş oluyoruz.

Artık servisimizi projemizde kullanabiliriz.

            PersonelServiceClient client = new PersonelServiceClient();

Service derlendiği vakit otomatik olarak client nesnesi tanımlamıştır. Bu nesne üzerinden operasyonlarda dahil çoğu işlemleri gerçekleştirebiliriz.

Bu süreçte arada taşınacak classlarıda tanımlamak istiyorsak ki burada Personel sınıfı bunun için bir örnek olabilir, o zaman DataContract ve DataMember attributeları devreye girmektedir.

    [DataContract]
    public class Personel
    {
        [DataMember]
        public string Adi { get; set; }
        [DataMember]
        public string SoyAdi { get; set; }
        [DataMember]
        public bool CalismaDurumu { get; set; }
    }

Burada DataContract ile Personel sınıfının WCF’e bağlanan uygulamalardan erişilebilir olduğunu belirtiyoruz. DataMember ise benzer mantıkla uygulamaların erişebileceği propertyleri işaretlememizi sağlamaktadır.

Temelde bu kadar basit lakin detayda mükemmel işler yapabilen bir servistir WCF.

Değerli arkadaşlar.
Makaleyi sonlandırmadan bir hususa değinmek istiyorum. Biliyorsunuz ki, bu güne kadar hiçbir makalemde bu kadar hızlı ve gerektiği halde resimsiz bir içerik paylaşmış bulunmamaktayım. Bu makalede beni mazur görünüz.

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Copy Protected by Chetan's WP-Copyprotect.