Wednesday, 28 July 2010

99.WCF Bug

Bir solutionda iki tane projemiz olsun.
Bunlardan biri class library projesi olsun. Diğeri Servisten sonuçları döneceğimiz Windows uygulaması olsun.
Bir WCF servisini Class Library projemize servis referans olarak ekleyelim. Bu fonksiyonu class librarydeki sınıftan yarattığımız obje ile arayüz katmanından çağıralım.

Şu hatayı alırız:

Could not find default endpoint element that references contract 'IMySOAPWebService' in the service model client configuaration section. This might be because no configuaration file was found for your application or because no end point element matching this contract could be found in the client element

Bu hatadan kurtulmak için Class Library'deki app.configte bulunan tagını Windows uygulamasının app.configine eklemeliyiz.

Sunday, 25 July 2010

3.Kontratlar

WCF'teki kontrat kavramı kiralık ev tutarken ki kontrat kavramıyla aynıdır.
Veriyi ne şekilde değiştireceğimizi, hangi fonksiyonları kullanacağımızı, nasıl mesajlaşacağımızı ve hata halinde servisten ne beklediğimizi tanımlarız.

4. çeşit kontrat tanımlaması vardır:

--> Service Contracts: İstemcinin servisle ne yapacağı açıklanır.
--> Data Contracts: Servisin kullandığı veri tipleri açıklanır.
--> Fault Contracts: Hataların nasıl handle edileceği ve hata olarak istemciye ne dönüleceği tanımlanır.
-->Message Contracts:Servisin mesajlarla direk etkileşimi sağlanır.

Sunday, 18 July 2010

2.WCF Mimarisine giriş

WCF kullanmak için, WCF Templates altında WCF Service Library'i kullanıyoruz.

Bu template'i seçtiğimizde,

-> WCF servislerinin kullandığı System.ServiceModel.dll referanslarımıza ekleniyor. WCF servisleri yazmak için gerekli olan bütün sınıflar System.ServiceModel namespace'i içinde bulunuyor ki, namespacelerin tanımlandığı kısımda using System.ServiceModel görülüyor.

->Bu template seçildiğinde projemize bir sınıf ve birde bu sınıfın interface'i eklenmiş oluyor.
Service1.cs ve IService1.cs. Microsoft daha önceden tanımlanmış sınıflarımıza sadece bir interface tanımlayarak onları WCF servisi haline dönüştürebilmemizi sağlamış.

->WCF'te her servisin kendisine özel bir adresi olması gerekiyor. İki ayrı servis aynı adresi kullanamıyor. Adres iki şeyi belirliyor:
1. Servisin lokasyonunu,
2. Transport protokolünü (HTTP,TCP,MSMQ vs. vs.)

->Servisin adresi şu şekilde tanımlanıyor:

*TCP için:

net.tcp://adres:port numarası/Servis adı

net.tcp://localhost:8001/TCPServisim

*IPC için:

net.pipe://adres/Servis adı

net.pipe://localhost/IPCServisim

*MSMQ için:

net.msmq://adres/public veya private/Servis adı

net.msmq://localhost/private/MSMQServisim

*Peer to Peer için:

net.p2p://adres/Servis adı

net.p2p://localhost/P2PServisim

1.WCF'e başlarken..

Microsoft WCF ile Service Oriented Architecture mimarisiyle Object Oriented Mimariyi buluşturmuş.
Daha önce kullanılan COM+, Web servis mimarisi, MSMQ yerine artık WCF kullanacağız gibi gözüküyor.

Bundan önce WEB Servisler sadece http protokollerini kullanabiliyordu(HTTP,HTTPS), artık web servisi farklı protokolleri de kullanabiliyor (TCP,IPC,Peer Network,MSMQ vs.) Servisi yazarken protokolden bağımsız olarak yazabiliyoruz, konfigürasyon dosyasında çeşitli ayarlar yapmamız yeterli oluyor.

WCF'i verimli kullanabilmek için en önemli şey, Microsoft'un bu yeni mimariyi sadece web servisler yerine kullanması yanlıgısından kurtulmak gerektiği. Microsoft WCF mimarisiyle servislerle hizmet eden bir katman yazabilmemize olanak sağlıyor.

Servislerimizde artık asp.nette olduğu gibi session kullanabileceğiz, hemde sadece config dosyasında ufak bir kaç ayarlama yaparak