Comment : déclarer des erreurs dans des contrats de service
Dans le code managé, des exceptions sont levées en cas de conditions d'erreur. Cependant, dans les applications Windows Communication Foundation (WCF), les contrats de service spécifient les informations d'erreur à retourner aux clients en déclarant des erreurs SOAP. Pour obtenir une vue d'ensemble des relations entre les exceptions et les erreurs, consultez Spécification et gestion des erreurs dans les contrats et les services.
Créer un contrat de service qui spécifie une erreur SOAP
Créez un contrat de service qui contient au moins une opération. Pour obtenir un exemple, consultez Comment : définir un contrat de service Windows Communication Foundation.
Sélectionnez une opération qui peut spécifier une condition d'erreur dont les clients peuvent s'attendre à être notifiés. Pour déterminer les conditions d'erreur qui justifient de retourner des erreurs SOAP aux clients, consultez Spécification et gestion des erreurs dans les contrats et les services.
Appliquez System.ServiceModel.FaultContractAttribute à l'opération sélectionnée et passez un type d'erreur sérialisable au constructeur. Pour plus d'informations sur la création et l'utilisation de types sérialisables, consultez Spécification du transfert de données dans des contrats de service. L'exemple suivant montre comment spécifier que l'opération
SampleMethod
peut provoquerGreetingFault
.<OperationContract, FaultContractAttribute(GetType(GreetingFault), Action:="https://www.contoso.com/GreetingFault", ProtectionLevel:=ProtectionLevel.EncryptAndSign)> _ Function SampleMethod(ByVal msg As String) As String
Répétez les étapes 2 et 3 pour toutes les opérations dans le contrat qui communiquent des conditions d'erreur aux clients.
Implémentation d'une opération pour retourner une erreur SOAP spécifiée
Une fois qu'une opération a spécifié qu'une erreur SOAP spécifique peut être retournée (tel que dans la procédure précédente) pour communiquer une condition d'erreur à une application appelante, l'étape suivante consiste à implémenter cette spécification.
Générer l'erreur SOAP spécifiée dans l'opération
Lorsqu'une condition d'erreur spécifique à FaultContractAttribute se produit dans une opération, levez une nouvelle System.ServiceModel.FaultException où l'erreur SOAP spécifiée est le paramètre de type. L'exemple suivant montre comment générer
GreetingFault
dans leSampleMethod
présenté dans la procédure précédente et dans la section de code suivante.Throw New FaultException(Of GreetingFault)(New GreetingFault("A Greeting error occurred. You said: " & msg)) End If
Exemple
L'exemple de code suivant montre une implémentation d'une opération unique qui spécifie GreetingFault
pour l'opération SampleMethod
.
Imports System
Imports System.Collections.Generic
Imports System.Net.Security
Imports System.Runtime.Serialization
Imports System.ServiceModel
Imports System.Text
Namespace Microsoft.WCF.Documentation
<ServiceContract(Namespace:="http://microsoft.wcf.documentation")> _
Public Interface ISampleService
<OperationContract, FaultContractAttribute(GetType(GreetingFault), Action:="https://www.contoso.com/GreetingFault", ProtectionLevel:=ProtectionLevel.EncryptAndSign)> _
Function SampleMethod(ByVal msg As String) As String
End Interface
<DataContractAttribute> _
Public Class GreetingFault
Private report As String
Public Sub New(ByVal message As String)
Me.report = message
End Sub
<DataMemberAttribute> _
Public Property Message() As String
Get
Return Me.report
End Get
Set(ByVal value As String)
Me.report = value
End Set
End Property
End Class
Friend Class SampleService
Implements ISampleService
#Region "ISampleService Members"
Public Function SampleMethod(ByVal msg As String) As String Implements ISampleService.SampleMethod
Console.WriteLine("Client said: " & msg)
' Generate intermittent error behavior.
Dim rand As New Random(DateTime.Now.Millisecond)
Dim test As Integer = rand.Next(5)
If test Mod 2 <> 0 Then
Return "The service greets you: " & msg
Else
Throw New FaultException(Of GreetingFault)(New GreetingFault("A Greeting error occurred. You said: " & msg))
End If
End Function
#End Region
End Class
End Namespace
Voir aussi
Référence
System.ServiceModel.FaultContractAttribute
System.ServiceModel.FaultException