Servis Yönelimli Mimari (Service Oriented Architecture-SOA)

Eyl 06, 2013
"Windows Communication Foundation" (Windows İletişim Birliği- WCF), Framework 3.0 ile gelen yeniliklerden biridir. Hızlı bir şekilde servis yönelimli mimaride uygulamalar geliştirebilmek için hazırlanmış bir framework "API"'si (Application Programming Interface- Uygulama Programlama Arayüzü) olarak düşünülebilir.
Microsoft bugüne kadar dağınık mimari yaklaşımı ile "XML Web servisleri", "COM+", ".NET remoting", "MSMQ" gibi sistemler geliştirmiştir. "WCF" ise bunlardan sonra tüm iyi özelliklerinin birleştirildiği bir sistem olarak geliştirilmiştir. NET 3.5 ile Servis Yönelimli mimari (SOA) kullanması da önemli özelliklerinden biridir. Aslında ilk başlarda nesneye yönelimli programlama (OOP-Object Oriented Programming) yapılmaktaydı fakat daha sonra bileşen yönelimli programlamalar ve son olarak da servis yönelimli programlamalar geldi ve "WCF" servis yönelimli programlamayı en iyi şekilde kullanmaktadır.
"WCF"nin en önemli özelliği servis yönelimli programlamanın haricinde platform bağımsız bir yapısı olmasıdır. Yani bu sayede herhangi bir işletim sistemindeki uygulamalar her türlü ortamda çalışabilir duruma gelmiştir.

 

 

WCF uygulamanın yer aldığı cihaza farklı bir uygulama alanından erişim yapabilir, farklı bir cihazdan yine aynı uygulamaya erişim yapabilir, aynı cihazda aynı uygulama alanından da erişim yapabilir. Bu sistemlerin hepsinde ortak olan nokta tüm uygulamalar servise ulaşımlarını bir "proxy" nesnesi üzerinden sağlamaktadırlar. Bunun dışından "proxy" nesnesi ile kurulan bağlantının sonlanması "endPoint" 'lerde olmaktadır. Yukarıdaki resim bir bakıma dağınık mimarinin "WCF" alanındaki görünüşüdür.

Yukarıdaki pastada "WCF" içerisindeki en önemli üç temel kavramdan bahsedilmektedir. Sırasıyla bunların özelliklerinden bahsedilecektir.

Adresler: Servisin bulunduğu cihazın adı ve ona ulaşım yöntemleri adres kavramıyla anlatılmaktadır.
     •    Bilgisayar adı
     •    Site adı
     •    Ağ adı
     •    İletişim portu adı
     •    "Pipe"(boru) adı
     •    "Queue" (kuyruk) adı
     •    Belirli bir "path" (dizin) bilgisi 
     •    URL adı olabilmektedir.

Taşıma protokolleri ise;
     •    HTTP (Hyper Text Transfer Protocol - Hiper Metin Aktarım Protokolü)
     •    TCP (Transmission Control Protocol - Gönderim Kontrol Protokolü)
     •    P2P (Peer to peer - Eşler Arası)
     •    IPC (Inter-process communication - Süreçler Arası Haberleşme)
     •    MSMQ (Microsoft Message Queing - Microsoft Mesaj Kuyruğu)
Bu bilgileri taşıyan servis şablonu şu şekilde olmaktadır.

[taşıma protokolü(transport protocol)]://[makine veya domain adı]:[opsiyonel port numarası]/[opsiyonel URI bilgisi]

Sözleşmeler: Servislerin yaptıkları görevlerin bilinmesi için "proxy" sınıfı üretilmektedir ve bu sınıf yardımıyla istemciler servisle beraber çalışabilmektedirler. Bu nedenle aradaki protokolün anlaşılabilmesi için sözleşmeler kullanılmaktadır.

Aşağıda bu sözleşmelerden bahsedilecektir.
     •    Servis Sözleşmesi: Servis üzerinden hangi işlemlerin yapılacağını tanımlayan sözleşmelerdir.
     •    Veri Sözleşmesi: Servislerin istemcilerden gelen ve onlara giden veri tiplerini tanımlamalarını sağlayan sözleşmelerdir. Bu sayede Java gibi farklı platformlarla haberleşmek  mümkün hale gelmiştir.
     •    Hata Sözleşmeleri: Servis tarafında meydana gelebilecek hataların ve bunların oluştuğu durumlarda kullanıcının nasıl bilgilendirileceklerini açıklayan sözleşmedir.
     •    Mesaj Sözleşmesi: Servislerin mesajlarla etkileşimde olmasını sağlayan servis biçimidir.

"WCF" uygulamalarını geliştirebilmek için gereken temel tipler, Framework 3.0 ile gelen System.ServiceModel.dll, System.IdentityModel.dll, System.Runtime.Serialization.dll vb... "Assembly"’ ler içerisinde yer alırlar. Bu nedenle bu "Assembly"’ leri gerektiğinde kullanabilmek için projelere açıkça referans etmemiz gerekmektedir.

Bağlayıcılar: Bağlayıcılar temel olarak servisler ile kurulacak olan iletişimin nasıl olduğunu tanımlamak üzere kullanılırlar. Bir bağlayıcı tip taşıma tipi, protokol ve veri çözümlemesi bildirir. Bunlar servis yönelimli mimari göz önüne alınarak hazırlanmışlardır bu nedenle "WCF" içerisinde hazır olarak yer almaktadırlar.

 Binding Tipi Yapılandırma elementi   Taşıma çeşidi Veri çözümlemesi   Platform desteği
 BasicHttpBinding  <basicHttpBinding>  HTTP / HTTPS  Text  Var
 NetTcpBinding  <netTcpBinding>  TCP  Binary  Yok
 NetPeerTcpBinding  <netPeerTcpBinding>  P2P  Binary  Yok
 NetNamedPipeBinding  <netNamedPipeBinding>  IPC  Binary  Yok
 WSHttpBinding  <wsHttpBinding>  HTTP/HTTPS  Text/MTOM  Var
 WSFederationBinding  <wsFederationHttpBinding>  HTTP/HTTPS  Text/MTOM  Var
 NetMsmqBinding    
 <netMsmqBinding>  MSMQ  Binary  Yok
 MsmqIntegrationBinding  <msmqIntegrationBinding>  MSMQ  Binary  Var
 WSDualHttpBinding  <wsDualHttpBinding>    Text/MTOM  Var

Buradaki tiplerden ihtiyaca en uygun olanını seçilmelidir. Geliştirilecek olan "SOA" (service oriented architecture) modeline göre gereksinimleri karşılayan bir yapı seçilecek veya bunlara alternatif olarak kullanıcı tanımlı tipler yazılacaktır. 

"WCF" servisleri iki farklı yerde barındırılabilmektedir. Bunlardan ilki "ISS hosting" ile veya yazılan herhangi bir "console", "Windows application" veya "Web" nesnesi üzerinden yapılabilmektedir. Burada zorunlu olan tek şey platformun Windows bir sistem üzerinden kurulmasıdır.

 

Web servisi ve istemciler arasındaki bağlantının sağlanması için gerekli temel kavramlardan bahsedildi. Bağlantının nasıl oluşturulduğu ve nelere gerek olduğunu bildikten sonra "WCF" ile daha kapsamlı sunucu ve istemciler üzerine çalışılabilir.

"WCF" ile istemci ve sunucu ilişkisinin oluşturulmasında altı basamak vardır. 
     •    "WCF" servis sözleşmeleri oluşturulması
     •    Servis sözleşmelerini gerçeklemek
     •    Servisin sunulması ve çalıştırılması
     •    "WCF" istemcisi yaratılması
     •    İstemcinin yapılandırılması
     •    İstemcinin kullanılması

Web servisleri bir veya birden çok uçnoktaya sahip olabilir. Bunların her birine ait belli bir adres bulunmaktadır ve belli metotlar bunlara aittir. Bu adresler sayesinde istemciler servisleri bulur ve aradaki protokoller uygulanmaya başlar. Bu aşamada daha önce değinilen "WSDL" yardımıyla "proxy" nesnesi oluşturulur ve aradaki bağlantının kurulması sağlanır.