Cómo declarar errores en contratos de servicios
En código administrado, las excepciones se inician al producirse condiciones de error. No obstante, en aplicaciones Windows Communication Foundation (WCF) los contratos de servicios especifican qué información de error se devuelve a los clientes mediante la declaración de los errores de SOAP en el contrato de servicios. Para obtener información acerca de la relación entre las excepciones y los errores, vea Especificación y administración de errores en contratos y servicios.
Crear un contrato de servicio que especifica un error de SOAP
Crear un contrato de servicio que contiene al menos una operación. Para consultar un ejemplo, vea Definición de un contrato de servicio de Windows Communication Foundation.
Seleccione una operación capaz de especificar una condición de error sobre la que los clientes esperan ser informados. Para decidir qué condiciones de error justifican la devolución de errores de SOAP a los clientes, vea Especificación y administración de errores en contratos y servicios.
Aplique System.ServiceModel.FaultContractAttribute a la operación seleccionada y pase un tipo de error serializable al constructor. Para obtener información acerca de la creación y utilización de tipos serializables, vea Especificación de transferencia de datos en contratos de servicio. El ejemplo siguiente muestra cómo especificar que la operación
SampleMethod
puede producir unGreetingFault
.<OperationContract, FaultContractAttribute(GetType(GreetingFault), Action:="https://www.contoso.com/GreetingFault", ProtectionLevel:=ProtectionLevel.EncryptAndSign)> _ Function SampleMethod(ByVal msg As String) As String
Repita los pasos 2 y 3 en todas las operaciones del contrato que comunican las condiciones de error a los clientes.
Implementar una operación para devolver un error de SOAP especificado
Cuando una operación especifica que un error de SOAP concreto puede devolverse (como en el procedimiento anterior) para comunicar una condición de error a la aplicación que realiza la llamada, el siguiente paso es implementar esa especificación.
Iniciar el error de SOAP especificado en la operación
Cuando se produce una condición de error especificada en un FaultContractAttribute, inicie una nueva System.ServiceModel.FaultException en la que el error de SOAP especificado es el parámetro de tipo. El siguiente ejemplo muestra cómo iniciar el
GreetingFault
enSampleMethod
mostrado en el procedimiento anterior y en la sección de código siguiente.Throw New FaultException(Of GreetingFault)(New GreetingFault("A Greeting error occurred. You said: " & msg)) End If
Ejemplo
El ejemplo de código siguiente muestra la implementación de una operación única que especifica GreetingFault
para la operación 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
Vea también
Referencia
System.ServiceModel.FaultContractAttribute
System.ServiceModel.FaultException