Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

FaultContractAttribute (Clase)

Especifica uno o más errores de SOAP que se devuelven cuando se producen errores de procesamiento en una operación de servicio.

System.Object
  System.Attribute
    System.ServiceModel.FaultContractAttribute

Espacio de nombres:  System.ServiceModel
Ensamblado:  System.ServiceModel (en System.ServiceModel.dll)

[AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = true, Inherited = false)]
public sealed class FaultContractAttribute : Attribute

El tipo FaultContractAttribute expone los siguientes miembros.

  NombreDescripción
Método públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsFaultContractAttributeInicializa una nueva instancia de la clase FaultContractAttribute.
Arriba

  NombreDescripción
Propiedad públicaCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsActionObtiene o establece la acción del mensaje de error de SOAP que se especifica como parte del contrato de la operación.
Propiedad públicaCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsDetailTypeObtiene el tipo de un objeto serializable que contiene información de error.
Propiedad públicaHasProtectionLevelObtiene un valor que indica si el mensaje de error de SOAP tiene un nivel de protección asignado.
Propiedad públicaCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsNameObtiene o establece el nombre del mensaje de error en el Lenguaje de descripción de servicios Web (WSDL).
Propiedad públicaCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsNamespaceObtiene o establece el espacio de nombres del error de SOAP.
Propiedad públicaProtectionLevelEspecifica el nivel de protección que el error de SOAP requiere del enlace.
Propiedad públicaTypeIdCuando se implementa en una clase derivada, obtiene un identificador único para este Attribute. (Se hereda de Attribute).
Arriba

  NombreDescripción
Método públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsEqualsInfraestructura. Devuelve un valor que indica si esta instancia equivale al objeto especificado. (Se hereda de Attribute).
Método públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetHashCodeDevuelve el código hash de esta instancia. (Se hereda de Attribute).
Método públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetType Obtiene el Type de la instancia actual. (Se hereda de Object).
Método públicoIsDefaultAttributeCuando se invalida en una clase derivada, indica si el valor de esta instancia es el valor predeterminado para la clase derivada. (Se hereda de Attribute).
Método públicoMatch Cuando se invalida en una clase derivada, devuelve un valor que indica si esta instancia es igual al objeto especificado. (Se hereda de Attribute).
Método públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsToString Retorna una cadena que representa al objeto actual. (Se hereda de Object).
Arriba

  NombreDescripción
Implementación explícita de interfacesMétodo privado_Attribute.GetIDsOfNamesAsigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío. (Se hereda de Attribute).
Implementación explícita de interfacesMétodo privado_Attribute.GetTypeInfoObtiene la información de tipos de un objeto, que puede utilizarse para obtener la información de tipos de una interfaz. (Se hereda de Attribute).
Implementación explícita de interfacesMétodo privado_Attribute.GetTypeInfoCount

Recupera el número de interfaces de tipo de información que suministra un objeto (0 ó 1)

(Se hereda de Attribute).
Implementación explícita de interfacesMétodo privado_Attribute.InvokeProporciona acceso a las propiedades y los métodos expuestos por un objeto. (Se hereda de Attribute).
Arriba

Marque una operación con el atributo FaultContractAttribute para declarar una o varias condiciones de excepción específicas que se agregarán a la descripción del Lenguaje de descripción de servicios Web (WSDL) correspondiente a la operación de servicio como mensajes de error de SOAP explícitos devueltos por la operación.

En todas las aplicaciones administradas, los errores de procesamiento están representados mediante objetos Exception. En aplicaciones basadas en SOAP como las aplicaciones Windows Communication Foundation (WCF), los métodos de servicio comunican la información de errores de procesamiento mediante los mensajes de error de SOAP. Dado que las aplicaciones WCF se ejecutan en ambos tipos de sistemas de error, cualquier información de excepción administrada que se deba enviar al cliente debe convertirse de excepciones a errores de SOAP. Puede usar los comportamientos de excepción de servicio predeterminados o controlar explícitamente si (y cómo) las excepciones se asignan a los mensajes de error. Para obtener información general sobre las excepciones y los errores de SOAP en las aplicaciones WCF, consulte Especificación y administración de errores en contratos y servicios.

Se recomienda que las operaciones de servicio utilicen FaultContractAttribute para especificar formalmente todos los errores de SOAP que un cliente puede esperar recibir en el curso normal de una operación. Además, se recomienda que sólo se devuelva en un error de SOAP la información que un cliente deba conocer para minimizar la divulgación de información.

  • La propiedad Action controla la acción del mensaje de error.

  • La propiedad DetailType obtiene el tipo del objeto de detalle serializado en el mensaje de error.

  • Las propiedades Name y Namespace controlan el nombre y el espacio de nombres, respectivamente, del mensaje de error.

  • HasProtectionLevel indica si el mensaje de error tiene un nivel de protección especificado y, en ese caso, será la propiedad ProtectionLevel la que lo controle.

Nota de precauciónPrecaución

Si un mensaje de error contiene información que es confidencial o puede provocar problemas de seguridad, se recomienda encarecidamente que se defina la propiedad ProtectionLevel.

En muchos escenarios, definir ProtectionLevel en EncryptAndSign para los mensajes del error es suficiente. Para obtener más información, vea Descripción de los niveles de protección.

Para devolver un error especificado desde una operación marcada con FaultContractAttribute, inicie una FaultException<TDetail> (donde el parámetro de tipo es la información de error serializable) cuando la excepción administrada se produce durante la operación. Las aplicaciones cliente de WCF provocan que el error de SOAP aparezca como el mismo tipo iniciado en la implementación del cliente; es decir, como una FaultException<TDetail> (donde el parámetro de tipo es la información de error serializable). FaultContractAttribute sólo se puede utilizar para especificar los errores de SOAP para las operaciones de servicio bidireccionales y para los pares de operación asincrónica; las operaciones unidireccionales no admiten los errores de SOAP y, por consiguiente, no admiten FaultContractAttribute.

NotaNota

Puede utilizar cualquier tipo serializable para llevar información de error. La única restricción en esta versión de WCF es que los tipos especificados en FaultContractAttribute deben ser serializables por System.Runtime.Serialization.DataContractSerializer. Para obtener información sobre la compatibilidad para la serialización que DataContractSerializer ofrece, consulte El serializador de contratos de datos.

Por ejemplo, para especificar que los clientes pueden esperar un error de SOAP que contiene Int32, coloque ese parámetro de tipo en FaultContractAttribute en el método de servicio.

NotaNota

Los ejemplos de código siguientes no definen las propiedades de ProtectionLevel, Name o Namespace.


[OperationContractAttribute]
[FaultContractAttribute(typeof(int))]
int Divide(int arg1, int arg2);


A continuación, en su método de servicio, inicie un nuevo FaultException<TDetail> donde el parámetro de tipo es el tipo que contiene la información del error (en el caso anterior, Int32). Por ejemplo:


throw new FaultException<int>(4);


El ejemplo anterior es muy básico; se puede pasar casi cualquier tipo de información utilizando un código System.Int32, por lo que este tipo de detalle no es el más útil. Normalmente, las aplicaciones WCF especifican los errores de SOAP con tipos de detalles específicos de los requisitos de información de error del cliente. Para obtener un ejemplo más completo, consulte la sección Ejemplo.

NotaNota

Si especifica FaultException<TDetail> donde el parámetro de tipo es System.String, se asignará el valor de la cadena a la propiedad Detail en la aplicación cliente. Los clientes no pueden recuperar esa cadena llamando al método FaultException<TDetail>.ToString. Para que se devuelva el valor de la cadena cuando la aplicación cliente llama a Exception.ToString, se inicia una excepción System.ServiceModel.FaultException dentro de la operación y se pasa la cadena al constructor.

Para controlar explícitamente el comportamiento de la aplicación cuando se inicia una excepción o una FaultException<TDetail>, implemente la interfaz System.ServiceModel.Dispatcher.IErrorHandler en un System.ServiceModel.Description.IServiceBehavior, System.ServiceModel.Description.IContractBehavior o System.ServiceModel.Description.IEndpointBehavior y asígnesela a la propiedad ChannelDispatcher.Errorhandlers. IErrorHandler le permite controlar explícitamente el error de SOAP que se genera y si se devuelve al cliente.

Para facilitar la depuración, establezca ServiceBehaviorAttribute.IncludeExceptionDetailInFaults en true en el código o puede usar ServiceDebugBehavior.IncludeExceptionDetailInFaults en un archivo de configuración de la aplicación. Cuando se habilita, el servicio devuelve automáticamente información de excepción al autor de la llamada. Estos errores aparecen en el cliente como excepciones FaultException.

Nota importanteImportante

Dado que las excepciones administradas pueden exponer información interna de la aplicación, establecer ServiceBehaviorAttribute.IncludeExceptionDetailInFaults o ServiceDebugBehavior.IncludeExceptionDetailInFaults en true puede permitir que los clientes WCF obtengan información sobre las excepciones de operaciones de servicio internas, incluida la información de identificación personal u otro tipo de información confidencial.

Por consiguiente, establecer ServiceBehaviorAttribute.IncludeExceptionDetailInFaults o ServiceDebugBehavior.IncludeExceptionDetailInFaults en true solo está recomendado como una manera de depurar temporalmente una aplicación de servicio. Además, el WSDL para un método que devuelve las excepciones administradas no controladas de esta manera no contiene el contrato para FaultException<TDetail> de tipo String. Los clientes deben contar con la posibilidad de que se produzca un error SOAP desconocido (devuelto a los clientes WCF como objetos System.ServiceModel.FaultException) para obtener correctamente la información de depuración.

El ejemplo de código siguiente muestra el uso de FaultContractAttribute para especificar que la operación SampleMethod puede devolver un error de SOAP con el tipo de detalle de GreetingFault.


using System;
using System.Collections.Generic;
using System.Net.Security;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(Namespace="http://microsoft.wcf.documentation")]
  public interface ISampleService{
    [OperationContract]
    [FaultContractAttribute(
      typeof(GreetingFault),
      Action="http://www.contoso.com/GreetingFault",
      ProtectionLevel=ProtectionLevel.EncryptAndSign
      )]
    string SampleMethod(string msg);
  }

  [DataContractAttribute]
  public class GreetingFault
  { 
    private string report;

    public GreetingFault(string message)
    {
      this.report = message;
    }

    [DataMemberAttribute]
    public string Message
    {
      get { return this.report; }
      set { this.report = value; }
    }
  }

  class SampleService : ISampleService
  {
  #region ISampleService Members

  public string  SampleMethod(string msg)
  {
    Console.WriteLine("Client said: " + msg);
    // Generate intermittent error behavior.
    Random rnd = new Random(DateTime.Now.Millisecond);
    int test = rnd.Next(5);
    if (test % 2 != 0)
      return "The service greets you: " + msg; 
    else
      throw new FaultException<GreetingFault>(new GreetingFault("A Greeting error occurred. You said: " + msg));
  }

  #endregion
  }
}


El ejemplo de código siguiente muestra que los clientes de WCF de ISampleService experimentan este error de SOAP como una FaultException<TDetail> de tipo GreetingFault.


using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
using Microsoft.WCF.Documentation;

public class Client
{
  public static void Main()
  {
    // Picks up configuration from the config file.
    SampleServiceClient wcfClient = new SampleServiceClient();
    try
    {
      // Making calls.
      Console.WriteLine("Enter the greeting to send: ");
      string greeting = Console.ReadLine();
      Console.WriteLine("The service responded: " + wcfClient.SampleMethod(greeting));

      Console.WriteLine("Press ENTER to exit:");
      Console.ReadLine();

      // Done with service. 
      wcfClient.Close();
      Console.WriteLine("Done!");
    }
    catch (TimeoutException timeProblem)
    {
      Console.WriteLine("The service operation timed out. " + timeProblem.Message);
      Console.ReadLine();
      wcfClient.Abort();
    }
    catch (FaultException<GreetingFault> greetingFault)
    {
      Console.WriteLine(greetingFault.Detail.Message);
      Console.ReadLine();
      wcfClient.Abort();
    }
    catch (FaultException unknownFault)
    {
      Console.WriteLine("An unknown exception was received. " + unknownFault.Message);
      Console.ReadLine();
      wcfClient.Abort();
    }
    catch (CommunicationException commProblem)
    {
      Console.WriteLine("There was a communication problem. " + commProblem.Message + commProblem.StackTrace);
      Console.ReadLine();
      wcfClient.Abort();
    }
  }
}


.NET Framework

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

.NET para aplicaciones de Windows Phone

Compatible con: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft