Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
SOAP hataları, hata durumu bilgilerini bir hizmetten istemciye ve çift yönlü durumda, bir istemciden birlikte çalışabilen bir şekilde hizmete iletir. Bu konu başlığında özel hata içeriğinin ne zaman ve nasıl tanımlanacağı ve hangi işlemlerin bunları döndürebileceği açıklanmaktadır. Bir hizmetin veya çift yönlü istemcinin bu hataları nasıl gönderebileceği ve istemci veya hizmet uygulamasının bu hataları nasıl işlediği hakkında daha fazla bilgi için bkz. Gönderme ve Alma Hataları. Windows Communication Foundation (WCF) uygulamalarında hata işlemeye genel bakış için bkz. Sözleşmelerde ve Hizmetlerde Hataları Belirtme ve İşleme.
Genel Bakış
Bildirilen SOAP hataları, bir işlemin özel SOAP hata türünü belirttiği System.ServiceModel.FaultContractAttribute'ye sahip olan hatalardır. Bildirilmemiş SOAP hataları, bir işlem için sözleşmede belirtilmeyen hatalardır. Bu konu, bu hata koşullarını belirlemenize ve özel SOAP hataları tarafından bildirildiğinde istemcilerin bu hata koşullarını düzgün bir şekilde işlemek için kullanabileceği bir hata sözleşmesi oluşturmanıza yardımcı olur. Temel görevler sırasıyla şunlardır:
Hizmetinizin bir istemcisinin bilmesi gereken hata koşullarını tanımlayın.
Bu hata koşulları için SOAP hatalarının özel içeriğini tanımlayın.
İşlemlerinizi, attıkları belirli SOAP hatalarının WSDL'de istemcilere açık biçimde görünmesini sağlayacak şekilde işaretleyin.
İstemcilerin bilmesi gereken hata koşullarını tanımlama
SOAP hataları, belirli bir işlem için hata bilgilerini taşıyan genel olarak tanımlanan mesajlardır. Bunlar WSDL'deki diğer işlem iletileriyle birlikte açıklandığından, istemciler bir işlemi çağırırken bu tür hataların işlenmesini bilir ve bu nedenle bekler. Ancak WCF hizmetleri yönetilen kodda yazıldığından, yönetilen koddaki hangi hata koşullarının hataya dönüştürüleceğine ve istemciye döndürüleceğine karar vermek, hizmetinizdeki hata koşullarını ve hataları bir istemciyle yaptığınız resmi hata konuşmasından ayırma fırsatı sağlar.
Örneğin, aşağıdaki kod örneği iki tamsayı alan ve başka bir tamsayı döndüren bir işlemi gösterir. Burada çeşitli özel durumlar oluşturulabilir, bu nedenle hata sözleşmesini tasarlarken istemciniz için hangi hata koşullarının önemli olduğunu belirlemeniz gerekir. Bu durumda, hizmetin System.DivideByZeroException özel durumu algılaması gerekir.
[ServiceContract]
public class CalculatorService
{
[OperationContract]
int Divide(int a, int b)
{
if (b==0) throw new Exception("Division by zero!");
return a/b;
}
}
<ServiceContract> _
Public Class CalculatorService
<OperationContract> _
Public Function Divide(a As Integer, b As Integer) As Integer
If b = 0 Then Throw New DivideByZeroException("Division by zero!")
Return a / b
End Function
End Class
Yukarıdaki örnekte işlem, sıfıra bölmeye özgü özel bir SOAP hatası, matematik işlemlerine genel olarak özgü olan ama sıfıra bölmeye özgü bilgiler içeren özel bir SOAP hatası, birkaç farklı hata durumu için birden çok hata veya hiçbir SOAP hatası döndüremeyebilir.
Hata Koşullarının İçeriğini Tanımlama
Özel soap hatasını yararlı bir şekilde döndürebilecek bir hata koşulu tanımlandığında, sonraki adım bu hatanın içeriğini tanımlamak ve içerik yapısının seri hale getirilebildiğinden emin olmaktır. Önceki bölümdeki kod örneğinde bir işleme özgü bir Divide hata gösterilmektedir, ancak hizmette Calculator başka işlemler varsa, tek bir özel SOAP hatası istemciye dahil olan tüm hesap makinesi hata koşullarını Divide bildirebilir. Aşağıdaki kod örneği, MathFaultdahil olmak üzere Dividetüm matematik işlemleri kullanılarak yapılan hataları bildirebilen özel bir SOAP hatasının oluşturulmasını gösterir. sınıfı bir işlem ( Operation özellik) ve sorunu ProblemType (özellik) açıklayan bir değer belirtebilirken, sınıfın ve bu özelliklerin istemciye özel SOAP hatasında aktarılabilmesi için serileştirilebilir olması gerekir. Bu nedenle, System.Runtime.Serialization.DataContractAttribute ve System.Runtime.Serialization.DataMemberAttribute öznitelikleri türü ve özelliklerini serileştirilebilir ve mümkün olduğunca birlikte çalışabilir hale getirmek için kullanılır.
// Define a math fault data contract
[DataContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public class MathFault
{
private string operation;
private string problemType;
[DataMember]
public string Operation
{
get { return operation; }
set { operation = value; }
}
[DataMember]
public string ProblemType
{
get { return problemType; }
set { problemType = value; }
}
}
' Define a math fault data contract
<DataContract([Namespace]:="http://Microsoft.ServiceModel.Samples")> _
Public Class MathFault
Private m_operation As String
Private m_problemType As String
<DataMember()> _
Public Property Operation() As String
Get
Return m_operation
End Get
Set(ByVal value As String)
m_operation = value
End Set
End Property
<DataMember()> _
Public Property ProblemType() As String
Get
Return m_problemType
End Get
Set(ByVal value As String)
m_problemType = value
End Set
End Property
End Class
Verilerinizin seri hale getirilebilir olmasını sağlama hakkında daha fazla bilgi için bkz. Hizmet Sözleşmelerinde Veri AktarımıNı Belirtme. Sağlayan serileştirme desteğinin System.Runtime.Serialization.DataContractSerializer listesi için bkz. Veri Sözleşmesi Seri Hale Getiricisi Tarafından Desteklenen Türler.
Hata Sözleşmesini Oluşturmak için İşlemleri İşaretle
Özel SOAP hatasının bir parçası olarak döndürülen serileştirilebilir bir veri yapısı tanımlandığında, son adım işlem sözleşmenizi bu tür bir SOAP hatası oluşturacak şekilde işaretlemektir. Bunu yapmak için özniteliğini System.ServiceModel.FaultContractAttribute kullanın ve oluşturduğunuz özel veri türünün türünü geçirin. Aşağıdaki kod örneği, FaultContractAttribute özniteliğini kullanarak Divide işleminin MathFault türünde bir SOAP hatası döndürebileceğini belirtmenin nasıl yapılacağını gösterir. Diğer matematik tabanlı işlemler artık bir MathFaultdöndürebileceklerini de belirtebilir.
[OperationContract]
[FaultContract(typeof(MathFault))]
int Divide(int n1, int n2);
<OperationContract()> _
<FaultContract(GetType(MathFault))> _
Function Divide(ByVal n1 As Integer, ByVal n2 As Integer) As Integer
İşlem, işlemi birden fazla öznitelikle işaretleyerek birden fazla FaultContractAttribute özel hata döndüreceğini belirtebilir.
İşlem uygulamanızda hata sözleşmesini uygulamak için bir sonraki adım, Gönderme ve Alma Hataları konusunda açıklanmıştır.
SOAP, WSDL ve Birlikte Çalışabilirlik Konuları
Bazı durumlarda, özellikle diğer platformlarla birlikte çalışırken, bir SOAP iletisinde hatanın nasıl göründüğünü veya WSDL meta verilerinde nasıl tanımlandığını kontrol etmenin önemli olabileceği unutulmamalıdır.
Öznitelik, meta verilerdeki bu hata için oluşturulan WSDL hata öğesi adını kontrol etmenizi sağlayan bir FaultContractAttribute özelliğine sahiptir.
SOAP standardına göre, bir hata Action, Code ve Reason içerebilir.
Action, Action özelliği tarafından kontrol edilir.
Code özelliği ve Reason özelliği, genel System.ServiceModel.FaultException'ün üst sınıfı olan System.ServiceModel.FaultException<TDetail> sınıfının özellikleridir.
Code özelliği bir SubCode üye içerir.
Hata oluşturan hizmet dışı hizmetlere erişirken belirli sınırlamalar vardır. WCF yalnızca şemanın açıklayıp veri sözleşmeleriyle uyumlu ayrıntı türlerine sahip hataları destekler. Örneğin, yukarıda belirtildiği gibi WCF, ayrıntı türlerinde XML özniteliklerini kullanan hataları veya ayrıntı bölümünde birden fazla üst düzey öğeye sahip hataları desteklemez.
Ayrıca bakınız
- FaultContractAttribute
- DataContractAttribute
- DataMemberAttribute
- Sözleşmelerde ve Hizmetlerde Hataları Belirtme ve İşleme
- Hataların Gönderilmesi ve Alınması
- Nasıl yapılır: Hizmet Sözleşmelerinde Hataları Bildirme
- Koruma Düzeylerini Anlama
- Nasıl yapılır: ProtectionLevel Özelliğini Ayarlama
- Hizmet Sözleşmelerinde Veri Aktarımı Belirtme