WCF - Özel Durum İşleme

Bir WCF hizmet geliştiricisi, istemciye uygun bir şekilde raporlama yapılmasını gerektiren bazı öngörülemeyen hatalarla karşılaşabilir. Bu tür hatalar,exceptions, normalde dene / yakala blokları kullanılarak işlenir, ancak yine, bu çok teknolojiye özgüdür.

Bir istemcinin ilgi alanı, bir hatanın nasıl oluştuğu veya bir hataya katkıda bulunan faktörlerle ilgili olmadığından, SOAP Fault sözleşmesi, WCF'de hizmetten gelen hata mesajını istemciye iletmek için kullanılır.

Bir Arıza sözleşmesi, müşterinin bir hizmette meydana gelen hataların belgelenmiş bir görünümüne sahip olmasını sağlar. Aşağıdaki örnek daha iyi bir anlayış sağlar.

Step 1 - Genel istisnalar yaratacak bölme işlemi ile kolay bir hesap makinesi hizmeti oluşturulur.

using System;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Runtime.Serialization;
usingSystem.ServiceModel;
usingSystem.Text;

namespace Calculator {
   // NOTE: You can use the "Rename" command on the "Refactor" menu to change 
   // the interface name "IService1" in both code and config file together.
   
   [ServiceContract]
   
   public interface IService1 {
      [OperationContract]
      int divide(int num1, int num2);
      // TODO: Add your service operations here
   }
}

Sınıf dosyası için kodlama aşağıda gösterilmektedir -

Şimdi, 10 sayısını sıfıra bölmeye çalıştığımızda, hesap makinesi hizmeti bir istisna atacak.

İstisna, dene / yakala bloğu ile ele alınabilir.

Şimdi, herhangi bir tamsayıyı 0'a bölmeye çalıştığımızda, onu catch bloğunda ele aldığımız için 10 değerini döndürecektir.

Step 2 - FaultException, bu adımda istisna bilgilerini hizmetten istemciye iletmek için kullanılır.

public int Divide(int num1, int num2) { 
   //Do something 
   throw new FaultException("Error while dividing number"); 
}

Step 3- Hata mesajını FaultContract kullanarak göndermek için özel bir tür oluşturmak da mümkündür. Özel bir tür oluşturmak için gerekli adımlar aşağıda belirtilmiştir -

Veri sözleşmesi kullanılarak bir tür tanımlanır ve iade edilmesi amaçlanan alanlar belirlenir.

Hizmet operasyonu FaultContract özelliği ile dekore edilmiştir. Tür adı da belirtilir.

İstisnaları artırmak için bir hizmet örneği oluşturulur ve özel istisna özellikleri atanır.