2 . WCF- Contracts (Sözleşmeler)

  1. Service Contract  : Dışarıya hizmetin açılması için oluşturulur.servislerin ne iş yaptığının, nasıl fonksiyonellikler sunduğunun ifade edilmesinde kullanılmaktadır.  Her servis yaptığımızda en az bir tane Service Contract tanımlamak zorundayız.
  2. Data Contract : Servislerden clieantlara giden ve clientlardan servise gelen veri tiplerini tanımlayan sözleşmedir.Int String gibi bilinen tipler için bu sözleşmeler Implicit yani bilinçsiz olarak hazırlanır. Ancak karmaşık tiplerde ve kendi oluşturduğumuz tiplerde Explicit olarak tanımlamaları gerekir.  istemci tarafına aktarılacak serileştirilebilir(Serializable) tipler söz konusu ise Veri Sözleşmeleri(Data Contracts) tanımlanır. Bu sayede Java vb. platformlara kendi tanımladığımız sınıfı o platformların anlayacağı şekilde sunmuş oluyoruz.
  3. Data Member :  [DataContract] olarak tanımlanan classların property ya da fieldlarının başlarına [DataMember] ekleyerek, ilgili property ya da fieldlar DataContract sözleşmesine dahil edebilmektir.
     [DataContract]
     public class Personel
    {
       private int PersonelID;
       private string PersonelAd;
       private string PersonelSoyad;
    
        [DataMember]
        public string PersSoyad
        {
          get { return PersonelSoyad; }
          set { PersonelSoyad = value; }
        }
    
        [DataMember]
        public string PersAd
        {
          get { return PersonelAd; }
          set { PersonelAd = value;}
        }
    
        [DataMember]
        public int PersID
        {
           get { return PersonelID; }
           set { PersonelID = value; }
        }
    }
  4. Fault Contract : Yapılan uygulamalarda, işlem hatalarında oluşan istisna nesneleri temsil eder. WCF uygulamalarında, SOAP hata mesajları kullanarak işlem hatalarını bilgileri iletir. istemci tarafına aktarılacak istisna mesajlarının çeşitli durumlar için özelleştirilmesi düşünüldüğünde Hata Sözleşmeleri(Fault Contracts) kullanılır.Contract kısmı aşağıdaki gibi yapılanmalı
      [OperationContract]
      [FaultContract(typeof(DivideByZeroException))]
      double islem(double numara1, double numara2);
    
     
    
      public double islem(double numara1, double numara2)
      {
         if(numara2 == 0)
         {
           DivideByZeroException SifiraBolunmeHatasi = new DivideByZeroException();
           throw new FaultException<DivideByZeroException>(SifiraBolunmeHatasi, "Sayi Sifira bölünemez");
         }
          return numara1 / numara2;
      }

    Bu kod eklentisinden sonra herhangi bir hatada browserda , bizim tanımladığımız hata mesajı gözükecektir. Hata esnasında kod patlamasını istemiyorsak try-catch blogu kullanabiliriz.

    Bunun yerine kendi özel hata sınıflarımızı da olusturabiliriz.

     [DataContract[Name="OzelHataFault"]]
      public class OzelHata
      {
         [DataMember(Name="Kod",Order=0)]
         public string Kod="Hata";
        
         [DataMember(Name="Kod",Order=1)]
         public string Mesaj = "Bir hata oluştu. Biz de çözemedik";
     
         [DataMember(Name="Kod",Order=2)]
         public string Detay = "Hemen teknikl desteği ara";
    
        public void HataTanimlama(string Kod,string Mesaj,string Detay)
        {
         this.Kod = Kod;
         this.Mesaj = Mesaj;
         this.Detay = Detay;
        }
    
    }

    implementasyon kısmında

      public class Service  : IService
      {
         public string Ad(string kisiAd)
         {
                  if(KisiAd != "Ayse")
                 {
                    OzelHata hataa = new OzelHata();
                    throw new FaultException<OzelHata>(hataa,"Hata iletisi");
                }      
           }
    
       }
  5. Message Contract : Servislerin mesaj ile iletişimde bulunmasını sağlar.
    [MessageContract]
    class MessageCont
    {
        [MessageBodyHeader]
        public string Bilgi{get; set;}
     
        [MessageHeader]
        public string Baslik {get; set;}
     }
    
    
  6. WebInvoke :