“Adım Adım WCF” makaleler dizimizin 2. makalesi ile WCF i incelemeye devam ediyoruz. İlk makalemizde WCF in olmazsa olmazı “ABC” üçlemesinden Adress ve Binding i açıklamıştık. Bu makalemizde ise Contract üzerine eğileceğiz.
Contract : Servisin ne iş yaptığını hangi fonksiyonelikleri olduğunu dış ortama anlatan WCF özelliğidir. Contract çeşitleri genel anlamda 4 çeşittir. Bunlar :
- Service Contract: Servis ile yarattığımız operasyonları tanımlaya yarar.
- Data Contract : Verileri tanımlamamıza yarar.
- Fault Contract: Servis tarafından hata tanımlamaya yarar.
- Message Contract: Servisler ile mesajlar arasında iletişim kurmaya yarar.
Örnek WCF Contract:
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
}
Örnek Sınıf:
[DataContract]
public class CompositeType
{
bool boolValue = true;
string stringValue = "Hello ";
[DataMember]
public bool BoolValue
{
get { return boolValue; }
set { boolValue = value; }
}
[DataMember]
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
}
Örnek kodumuzu incelediğimizde Contract ımızı bir interface olarak tasarladığımızı ve ServiceContract niteliği ile imzaladığımızı görüyoruz. Bu sayede interface imiz Contract özelliği kazanmış oldu. Contract ın, bu servisi kullanan uygulamalarda kullanılmasını istediğimiz fonksiyonlarını ise OperationContract niteliği ile imzalamamız gerekiyor.
NOT: “OperationContract bir zorunluk değil fakat, bu nitelikle imzalanmamış metodlar Servisin fonksiyonları arasında gözükmez”
WCF deki Contractlarla ilgili bir diğer kuralda; Servis içerisinde kullandığımız SınıflarıDataContract ve üyelerinide DataMember niteliği ile imzalıyor olmamız.
Peki Neden Interface?
Genellikle Contract larımızın interface olarak tasarlanmasını ve client larında bu interface i implemente etmesini tercih ederiz.
Çünkü:
- Interface ler diğer interface ler tarafından implemente edilebilir.
- Bir sınıf, birden fazla interface i, implemente edebilir.
- Contract ı bozmadan servisi değiştirebiliriz.
- Eski veya yeni interface ler sayesinde servisimizi versiyonlayabiliriz.
Toparlayalım
İlk iki makalede yaptıklarımızı bir araya getirirsek; aslında bu iki makale sayesindeEnd point oluşturmayı öğrendik. (Address, Binding , Contract). Bunun anlamı servisimiz hangi kurallarla dışarıyla konuşacak olmasıdır.
Bir sonraki makalede WCF servislerinin nasıl host edildiğini inceleyeceğiz. Biraz daha sabır, temel bilgilerden sonra artık WCF servisleri yaratıp kodlamaya başlayacağız.
Hiç yorum yok:
Yorum Gönder