WCF’de Hata İşleme

WCF ile kullanıcı tanımlı hatalarınızı istemcilere göndermek isterseniz dikkat edilmesi gereken bazı hususlar var. Öncelikle hata nesnesinin bir veri kontratı olarak tanımlanması gerekiyor.

[DataContract]
public class CalculatorFault
{

private string report;
p
ublic CalculatorFault(string message)
{
    report = message;
}
[DataMember]
public string Message
{
    
get { return report;}
    set { report = value; }
}

}

Sonra, hata tanımını, ilgili operasyon veya serviste belirtmek gerekiyor:

[ServiceContract]
public interface ICalculatorService
{
   
[OperationContract]
   
[FaultContract(typeof(CalculatorFault),Action=http://localhost/CalculatorFault)]
   
int Divide(int a, int b);
}

bu aşamadan sonra gerekli yerde hatayı oluşturmak mümkündür:

throw

new FaultException<CalculatorFault>(new CalculatorFault("Divide by zero"));

istemcide hatanın yakalanmasında dikkat edilmesi gereken nokta, hatanın generic FaultException<T> nesnesi olarak yakalanması ve hata mesajına Detail özelliği üzerinden ulaşmaktır.

catch

(FaultException<ErrorHandlingService.CalculatorFault> ex)
{
   
Console.WriteLine(ex.Detail.Message);
}

Hataların doğrudan istemciye yollanması için kullanılan <serviceDebug includeExceptionDetailInFaults="true"/> etiketine gerek bulunmamaktadır. Bu etiketi <behavior> elemanı içinde kullanıldığı takdirde tüm hatalar istemciye gönderilmektedir. Debugging için uygun bu durum, üretim ortamında servisin iç yapısı ile ilgili bilgileri açık edebileceği için uygun olmayacaktır.

Bu yazı Uncategorized içinde yayınlandı. Kalıcı bağlantıyı yer imlerinize ekleyin.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s