Windows Communication Foundation

Eyl 06, 2013

Windows Communication Foundation (WCF) farklı makineler üzerindeki uygulamaların birbiriyle iletişim halinde olmasını sağlayan, .NET Framework 3.0 altyapısını Framework 2.0 altyapısından üstün kılan ve Servis Yönelimli Mimari (Service Oriented Architecture - SOA) için uygulamalar geliştirmek amacıyla Microsoft tarafından geliştirilmiş yeni bir Web servisidir. Bu eklenti bünyesindeki yeni özellikler ile önemli yenilikleri beraberinde getirmiştir.

Web servislerinin genel mantığı, masaüstü uygulamaları içinde Web uygulamalarının çalıştırılmasıdır. Örnek vermek gerekirse, masaüstünde kullanılan herhangi bir uygulamada, kullanıcı adı ve şifre istenilsin. Bu istenilen kullanıcı adı ve şifre, Web'de tutulmaktadır. Bu durumda Web'deki veritabanına ulaşıp bu verileri çekmek gerekir. Bunun için, bir Web servisi uygulaması yazılarak, ulaşılmak istenen veritabanının olduğu siteye eklenmesi yeterlidir. Böylece, masaüstü uygulamasında bu servisi çağırarak o sitenin veritabanına ulaşıp verileri çekmek mümkün olur.



Bütünleşme (Integration) Özelliği

WCF, Microsoft firmasının bugüne kadar dağıtık mimari uygulamalarını geliştirmekte kullandığı tüm sistemlerin özelliklerini bünyesinde barındırır. Bütünleşme (Integration) olarak adlandırılan bu özellik ile WCF, uygulamaları bir çatı altında toplayarak tümüyle Servis Yönelimli Mimari (Service Oriented Architecture) desteği bulunan bir Framework 3.0 uygulaması olup dağıtık uygulama geliştirmenin yeni hali olarak düşünülebilir. 

Interoperability (Uyum) Özelliği

WCF Interoperability (Uyum) özelliği ile farklı platformlardaki uygulamaların birbirleriyle bağlantı halinde olmalarını sağlamakla birlikte önceki dağıtık mimari modelleri düşünüldüğünde çok daha güçlü bir platform desteği sunmaktadır. Örneğin, Microsoft tarafından geliştirilmiş bir servis Unix ve Linux gibi farklı sistemler tarafından kullanıma uygun hale getirilebilir. 
WCF, bu özelliklerinin yanında CLI’nın (Common Language Infrastructure - Yaygın Dil Altyapısı) Microsoft tarafından geliştirilip uyarlanmasıyla oluşan CLR (Common Language Runtime - Yaygın Dil Çalışma Zamanı) tiplerini servis olarak sunabilmeyi ve servisleri de birer CLR tipiymiş gibi ele alabilmeyi sağlar. 

WCF Hedefleri

WCF yapısının hedeflerinden bazıları şunlardır:

  • Halihazırda bulunan dağıtık mimari geliştirme modellerini tek bir çatı altında birleştirmek (Unified)
  • Dağıtık mimarilerde uygulaması zor olan güvenlik (security), işlem (transaction) gibi kavramların daha rahat ele alınabilmesini sağlamak (Simplicity)
  • Farklı ortamlarda destek verebilecek Web servislerinin yaratılmasını sağlamak (Interoperability)
  • Farklı tipteki servislerin (COM+, .Net Remoting, XML Web Services, WSE, MSMQ) birbirleriyle uyumunun sağlanması (Integration)

WCF Yapısı ve Özellikleri

WCF servisi temel olarak 3 adımdan oluşur:

  1. Servisin yaratılması (Creating)
  2. Servise bir adresin bağlanması (Hosting)
  3. Son kullanıcı (client) tarafından eklenerek kullanılması (Consuming)

Servise bir adresin bağlanması

Bir Web servisi geliştirildiğinde, bu Web servisini yayımlamak için HTTP, WSHTTP gibi protokoller kullanılır. Bu protokoller gibi, kullanılması zorunlu olan belli birtakım protokoller vardır. Fakat WCF sayesinde bu gibi bir zorunluluk ortadan kalkar. Oluşturulan servisler, istenilen protokollerle istenilen şekilde sunulabilir. WCF uygulamalarını barındırmanın birkaç yolu vardır. Bunlardan biri IIS üzerinden HTTP iletişim kuralını kullanarak uygulamaları yayımlamaktır. Bir diğer yöntem ise Windows servislerini Windows üzerinden TCP, Pipe gibi yöntemlerle barındırmaktır. Bunun yanında WCF ile birlikte gelen IIS 7.0 VE WAS teknolojileri, servislerin barındırılması için kullanılmaya başlanmıştır.

WCF, çekirdekte Adresler (Addresses), Bağlayıcılar (Bindings) ve Sözleşmeler (Contracts) adı verilen 3 kısma ayrılmıştır.

                           

Bunun yanında istemcilerin kullandığı vekil (proxy) sınıflarının oluşturulması için servislerin hangi amaca hizmet ettiğinin bilinmesi önemli bir konudur. Sözleşmeler bu durumda devreye girerler ve WCF’de tüm servisler dışarıya  servis sözleşmesi (service contract),  mesaj sözleşmesi (message contract), veri sözleşmesi (data contract), hata sözleşmesi (fault contract) gibi dört tip sözleşme sunarlar. Bağlayıcılar ise servislerle iletişimin nasıl kurulacağını tanımlarlar.

Adresler

Bir servisin nerede olduğunu, hangi protokol ile yayınlama yaptığını bildiren bilgidir. Aktif olarak çalışan her servis WCF’ye göre eşsiz bir adrese sahip olmalıdır. WCF aşağıdaki protokolleri kullanabilir:

  • HTTP (http:// veya https://)
  • TCP (net.tcp://)
  • Peer 2 Peer (net.p2p://)
  • IPC (net.pipe://)
  • MSMQ (net.msmq://)

Bağlayıcılar

Bağlayıcılar genel olarak bir servis ile nasıl iletişime geçileceğinin tanımlanması için kullanılırlar. Servis yönelimli mimaride kullanılan belli başlı senaryolar vardır; bu senaryolar göz önüne alınarak bazı gerekli bağlayıcı tipleri önceden bildirilmiştir. Bir bağlayıcı tipi (Binding Type), taşıma tipi (Transport Type), protokol (Protocol) ve de veri çözümlemesini (Data Encoding) mutlaka içermektedir. Bunun dışında platform desteğini de içerebilir.

Sözleşmeler

Bir servisin ne iş yaptığının bilinmesinde rol oynar. Bazı sözleşmeler şunlardır:

  • Servis sözleşmesi (Service Contract): Servis ile yaratılacak olan operasyonların tanımlanmasında kullanılır.
  • Veri Sözleşmesi (Data Contract): Serviste kullanılacak verilerin tanımlaması yapılır.
  • Hata Sözleşmesi (Fault Contract): Servis tarafından tanımlanacak olan hatalar bu yolla tanımlanır.
  • Mesaj Sözleşmesi (Message Contract): Servisler ile mesajlar arasında iletişim kurulmasını sağlar.

Mesaj Seviyesinde Güvenlik (Message Level Security):

Mesaj seviyesinde güvenliğin sağlanması için öncelikle servis tarafında bazı ayarların yapılması gerekmektedir.  Bunun için servis tarafındaki App.config dosyasıMicrosoft Service Configuration Editor (Microsoft Servis Ayarları Düzenleyicisi) ile açılarak yeni bir bağlayıcı ayarları (Binding Configuration) eklenip EndPoint (Varış Noktası) ile ilişkilendirilmelidir. Bunun için öncelikle New Binding Configuration(Yeni Bağlantı Yapılandırması) bağlantısına tıklanıp istenilen yapılandırma tipi seçilir. Bu yapılandırma tipi, servis tarafında kullanılacak bağlayıcı tipi için gereken ayarların yapılacağı yeni bir elementtir.  Örneğin seçilen tip netTcpBinding olsun.

Burada uygulama netTcpBinding bağlayıcı tipi kullanılmakta; dolayısıyla bağlayıcı ayarları buna göre yapılmaktadır. Bu elementin Security (Güvenlik) sekmesinde, güvenlik ile ilgili ayarlar yapılabilmektedir.

Bu özelliklerden bazıları şunlardır:

Mode: Güvenlik seviyesinin mesaj, iletişim veya bunların bir birleşimi olup olmadığı belirlenir. Bu örnekte güvenlik, mesaj seviyesinde gerçekleştirileceğinden mode kısmında Message seçilir.

AlgorithmSuite: Mesajların hangi modele göre şifreleneceği belirtilmektedir. Burada kullanılabilecek birçok şifreleme algoritması seçeneği bulunmaktadır, sadece dikkat edilmesi gereken nokta, istemci için de aynı şifreleme algoritmasının kullanılacak olmasıdır.

MessageClientCredentialType: İstemcilerin sunucu tarafında doğrulamasının (authentication) nasıl yapılacağını belirtir. Değerler Windows, UserName, Certificate, IssuedToken ya da None olabilir. Örneğin burada Windows seçildiği taktirde, istemcinin sunucuya gönderdiği bilgiler Windows tabanlı doğrulama modeline göre aktarılacaktır.

TransportSecurity: Özellikler, iletişim seviyesinde güvenlik modeli için gerekmektedir.

Bu ayarlar yapıldıktan sonra ServiceBindingConfiguration(Sunucu Bağlantı Yapılandırması) ad olarak belirtilip değişiklikler kaydedilir.  Bu kısımdan sonra, servisten sunulan ilişkili EndPoint (Varış Noktası) için BindingConfiguration(Bağlantı Yapılandırması) özelliğine ServiceBindingConfiguration değeri  verilir; yani bağlayıcı tipinin belirtilen tüm güvenlik ayarları ilişkili EndPoint için tanımlanmış olur.