Aracılığıyla paylaş


Sözleşme ve Hizmetlerde Hataları Belirtme ve İşleme

Windows Communication Foundation (WCF) uygulamaları, yönetilen özel durum nesnelerini SOAP hata nesnelerine ve SOAP hata nesnelerini yönetilen özel durum nesnelerine eşleyerek hata durumlarını işler. Bu bölümdeki konular, özel SOAP hataları olarak hata koşullarını ortaya çıkarmak için sözleşme tasarlama, bu tür hataları hizmet uygulamasının bir parçası olarak döndürme ve istemcilerin bu tür hataları nasıl yakaladığını ele almaktadır.

Hata İşlemeye Genel Bakış

Tüm yönetilen uygulamalarda işleme hataları nesneler tarafından Exception temsil edilir. WCF uygulamaları gibi SOAP tabanlı uygulamalarda hizmet yöntemleri, SOAP hata iletilerini kullanarak işleme hata bilgilerini iletir. SOAP hataları, bir hizmet işleminin meta verilerine dahil edilen ileti türleridir ve bu nedenle istemcilerin işlemlerini daha güçlü veya etkileşimli hale getirmek için kullanabileceği bir hata sözleşmesi oluşturur. Buna ek olarak, SOAP hataları istemcilere XML biçiminde ifade edildiğinden, herhangi bir SOAP platformundaki istemcilerin kullanabileceği, WCF uygulamanızın ulaşmasını artıran yüksek düzeyde birlikte çalışabilen bir tür sistemidir.

WCF uygulamaları her iki tür hata sistemi altında çalıştığından, istemciye gönderilen tüm yönetilen özel durum bilgileri hizmetteki özel durumlardan SOAP hatalarına dönüştürülmeli, gönderilmelidir ve SOAP hatalarından WCF istemcilerindeki hata özel durumlarına dönüştürülmelidir. Çift yönlü istemciler söz konusu olduğunda, istemci sözleşmeleri SOAP hatalarını bir hizmete geri gönderebilir. Her iki durumda da, varsayılan hizmet özel durum davranışlarını kullanabilir veya özel durumların hata iletilerine eşlenip eşlenmediğini ve nasıl eşlenebileceğini açıkça denetleyebilirsiniz.

İki tür SOAP hatası gönderilebilir: bildirilen ve bildirilmeyen. Bildirilen SOAP hataları, bir işlemin özel SOAP hata türünü belirten bir System.ServiceModel.FaultContractAttribute özniteliği olan hatalardır. Bildirilmemiş SOAP hataları, bir işlem için sözleşmede belirtilmez.

Hizmet işlemlerinin, istemcinin bir işlemin normal seyrinde almayı bekleyebileceği tüm SOAP hatalarını resmi olarak belirtmek için özniteliğini kullanarak FaultContractAttribute hatalarını bildirmesi kesinlikle önerilir. Ayrıca soap hatasında yalnızca istemcinin bilgilerin açığa çıkmasını en aza indirmek için bilmesi gereken bilgileri iade etmeniz önerilir.

Genellikle hizmetler (ve çift yönlü istemciler) hata işlemeyi uygulamalarıyla başarıyla tümleştirmek için aşağıdaki adımları uygular:

  • Özel durum koşullarını özel SOAP hatalarıyla eşleyin.

  • İstemciler ve hizmetler SOAP hatalarını özel durum olarak gönderir ve alır.

Buna ek olarak, WCF istemcileri ve hizmetleri hata ayıklama amacıyla bildirilmemiş soap hataları kullanabilir ve varsayılan hata davranışını genişletebilir. Aşağıdaki bölümlerde bu görevler ve kavramlar ele alınmaktadır.

Özel Durumları SOAP Hatalarıyla Eşleme

Hata koşullarını işleyen bir işlem oluşturmanın ilk adımı, istemci uygulamasının hatalar hakkında hangi koşullar altında bilgilendirileceğine karar vermektir. Bazı işlemlerin işlevlerine özgü hata koşulları vardır. Örneğin, bir PurchaseOrder işlem belirli bilgileri artık satın alma siparişi başlatma izni olmayan müşterilere döndürebilir. Hizmet gibi Calculator diğer durumlarda, daha genel MathFault bir SOAP hatası tüm hizmet genelindeki tüm hata koşullarını açıklayabilecektir. Hizmetinizin istemcilerinin hata koşulları belirlendikten sonra özel bir SOAP hatası oluşturulabilir ve ilgili hata koşulu ortaya çıktığında işlem bu SOAP hatasını döndüren olarak işaretlenebilir.

Hizmetinizi veya istemcinizi geliştirmenin bu adımı hakkında daha fazla bilgi için bkz . Hataları Tanımlama ve Belirtme.

İstemciler ve Hizmetler SOAP Hatalarını Özel Durum Olarak İşler

wcf uygulamalarında başarılı hata işlemenin ilk adımları, işlem hata koşullarını tanımlamak, özel SOAP hatalarını tanımlamak ve bu işlemleri bu hataları döndüren olarak işaretlemektir. Sonraki adım, bu hataların gönderilmesini ve alınmasını düzgün bir şekilde uygulamaktır. Genellikle hizmetler, istemci uygulamalarına hata koşulları hakkında bilgi vermek için hata gönderir, ancak çift yönlü istemciler de hizmetlere SOAP hataları gönderebilir.

Daha fazla bilgi için bkz . Gönderme ve Alma Hataları.

Bildirilmemiş SOAP Hataları ve Hata Ayıklama

Bildirilen SOAP hataları sağlam, birlikte çalışabilir, dağıtılmış uygulamalar oluşturmak için son derece kullanışlıdır. Ancak bazı durumlarda, bir hizmetin (veya çift yönlü istemcinin) bu işlem için Web Hizmetleri Açıklama Dili'nde (WSDL) belirtilmeyen bir SOAP hatası göndermesi yararlı olur. Örneğin, bir hizmet geliştirirken hata ayıklama amacıyla istemciye bilgi göndermenin yararlı olduğu beklenmeyen durumlar ortaya çıkabilir. Ayrıca, WCF istemcilerinin ServiceBehaviorAttribute.IncludeExceptionDetailInFaults iç hizmet işlemi özel durumları hakkında bilgi almasına izin vermek için true özelliğini veya ServiceDebugBehavior.IncludeExceptionDetailInFaults özelliğini olarak ayarlayabilirsiniz. Hem tek tek hata gönderme hem de hata ayıklama davranışı özelliklerini ayarlama, Gönderme ve Alma Hataları bölümünde açıklanmıştır.

Önemli

Yönetilen özel durumlar iç uygulama bilgilerini açığa çıkarabileceğinden, veya ServiceBehaviorAttribute.IncludeExceptionDetailInFaultsServiceDebugBehavior.IncludeExceptionDetailInFaults ayarı true , WCF istemcilerinin kişisel veya diğer hassas bilgiler de dahil olmak üzere iç hizmet işlemi özel durumları hakkında bilgi almasına izin verebilir.

Bu nedenle, veya ServiceDebugBehavior.IncludeExceptionDetailInFaults ayarının trueServiceBehaviorAttribute.IncludeExceptionDetailInFaults yalnızca bir hizmet uygulamasında geçici olarak hata ayıklamak için kullanılması önerilir. Ayrıca, bu şekilde işlenmeyen yönetilen özel durumlar döndüren bir yöntemin WSDL'sinde türü ExceptionDetailiçin FaultException<TDetail> sözleşme bulunmaz. İstemciler, hata ayıklama bilgilerini düzgün bir şekilde almak için bilinmeyen bir SOAP hatası (WCF istemcilerine nesne olarak System.ServiceModel.FaultException döndürülür) olasılığını beklemelidir.

IErrorHandler ile Hata İşlemeyi Özelleştirme

Uygulama düzeyi özel durum oluştuğunda istemciye yanıt iletisini özelleştirmek veya yanıt iletisi döndürüldükten sonra bazı özel işlemler gerçekleştirmek için özel gereksinimleriniz varsa arabirimi uygulayın System.ServiceModel.Dispatcher.IErrorHandler .

Hata Serileştirme Sorunları

Bir hata sözleşmesini seri durumdan çıkarırken, WCF önce SOAP iletisindeki hata sözleşmesi adını hata sözleşmesi türüyle eşleştirmeyi dener. Tam eşleşme bulamazsa uyumlu bir tür için kullanılabilir hata sözleşmeleri listesinde alfabetik sırada arama yapacaktır. İki hata sözleşmesi uyumlu türlerse (örneğin, biri diğerinin alt sınıfıdır) hatayı seri durumdan çıkarmak için yanlış tür kullanılabilir. Bu durum yalnızca hata sözleşmesi bir ad alanı, ad alanı ve eylem belirtmediyse oluşur. Bu sorunun oluşmasını önlemek için ad, ad alanı ve eylem özniteliklerini belirterek hata sözleşmelerini her zaman tam olarak niteleyin. Ayrıca, paylaşılan bir temel sınıftan türetilen bir dizi ilgili hata sözleşmesi tanımladıysanız, yeni üyeleri ile [DataMember(IsRequired=true)]işaretlediğinizden emin olun. Bu IsRequired öznitelik hakkında daha fazla bilgi için bkz. DataMemberAttribute. Bu, temel sınıfın uyumlu bir tür olmasını engeller ve hatanın doğru türetilmiş türe seri durumdan çıkarılmasını zorlar.

Ayrıca bkz.