Monday, 2 August 2010

5.Binding

Web servis davranışının nasıl olacağını tanımlamamıza yarar. Reliability, security,transaction, propagation,interoperability seçeneklerinin gruplanmasından oluşur.

Basic Binding: BasicHttpBinding sınıfını kullanır.Asmx web servisi gibi davranır. Eğer sistemimizi farklı sistemler çağıracaksa veya eski webservisimizi hiç bir özelliğini değiştirmeden WCF servisine çevireceksek binding olarak basic binding kullanırız.

TCP Binding: NetTCPBinding sınıfını kullanır.WCF Servisinin TCP üzerinden haberleşmesini sağlar. Reliability, transaction ve security kavramlarını destekler. WCF-WCF haberleşmesinde kullanılır.

IPCBinding: NetNamedBinding sınıfını kullanır. Sadece bulunduğu makinadaki çağrılara cevap verir.

Web Service(WS) Binding: WSHttpBinding sınıfını kullanır. HTTP-HTTPS protokollerini destekler. WS-* protokollerini kullanacaksak bu binding kullanılmalıdır.WCF'in kullandığı varsayılan bindingtir.

Dual WS Binding: WSDualHttpBinding sınıfını kullanır. Web servisin iki yönlü çalıştığı durumlarda kullanılır.

MSMQ Binding: NetMsmqBinding sınıfını kullanır. Servisin haberleşmesi için MS Messaging Queue kullanılır.

Peer network Binding: NetPeerBinding sınıfını kullanılır. Web servisin haberleşmesi P2P protokolü üzerinden sağlanır.

Federated WS Binding: WSFederationHttpBinding sınıfını kullanır. Federated Security için kullanılır.

Federated WS 2007 Binding: WS2007FederationHttpBinding sınıfını kullanır. Federated WS Binding'in güncellenmiş halidir.

Sunday, 1 August 2010

5.OperationContract

[OperationContract]'ın sınıflarımızın metodlarını servis olarak kullanmamıza yaradığını söylemiştik.

[OperationContract]'lar sadece metodlara uygulanırlar, attribute'lara (property, event, index) uygulanmaz.

[OperationContract] olarak tanımlanmış bir metod referans tip alamaz. Sadece primitive tip olarak geçen string,int,double vs. ve DataContract olarak tanımlanmış nesne tiplerini alabilir.

[OperationContract] kullanırken parametreli constructor kullanmamalıyız.

4.Service Contract

ServiceContract özelliği kullanılarak bir sınıfın veya interface'in servis olarak kullanılacağı belirtilir. Bu servis bir web servis, bir MSMQ servisi, n-tier uygulamalardaki herhangi bir servis katmanı olabilir.

Service Contract'da servisin kuracağı mesajlaşma şekli (Message Exchange Pattern) tanımlanır. Request/Reply,One-Way,Duplex olarak tanımlama yapılabilir.

Örnek olarak bir öğrenci sınıfımız olsun. Bu sınıfta Ad ve Soyad propertyleri tanımlayalım. Öğrenci numarasına göre Ad ve Soyad'ı birlikte döndüren bir fonksiyonumuz olsun:


class Ogrenci
{
int no;
string Ad;
string Soyad;

public string OgrenciGetir(int no)
{
return Ad+" "+Soyad;
}
}


Bu sınıfı servis olarak kullanabilmek için bir interface tanımlarız. Interface'i Servis olarak kullanacağımızı belirtmek için interface'in başına ServiceContract attribute'unu ekleriz. Peki, bu sınıfta hangi metodları kullanacağımızı serviste nasıl belirteceğiz? O metodların başına OperationContract attribute'unu koyarak:


[ServiceContract]
interface IOgrenci
{
[OperationContract]
public string OgrenciGetir(int no)

}


Artık Sınıfımızın servis olarak kullanılabilmesi için tek yapmamız gereken bu interface'i implement etmek.


class Ogrenci:IOgrenci
{
int no;
string Ad;
string Soyad;

public string OgrenciGetir(int no)
{
return Ad+" "+Soyad;
}

}