FaultException<TDetail> Класс

Определение

Используется в клиентских приложениях для перехвата заданных в контракте ошибок SOAP.Used in a client application to catch contractually-specified SOAP faults.

generic <typename TDetail>
public ref class FaultException : System::ServiceModel::FaultException
public class FaultException<TDetail> : System.ServiceModel.FaultException
[System.Serializable]
public class FaultException<TDetail> : System.ServiceModel.FaultException
type FaultException<'Detail> = class
    inherit FaultException
[<System.Serializable>]
type FaultException<'Detail> = class
    inherit FaultException
Public Class FaultException(Of TDetail)
Inherits FaultException

Параметры типа

TDetail

Сериализуемый тип сведений об ошибке.The serializable error detail type.

Наследование
Наследование
Производный
Атрибуты

Примеры

В следующем примере кода показано использование в службе типа FaultException<TDetail> для вызова управляемого исключения, которое преобразуется в ошибку SOAP, заданную атрибутом FaultContractAttribute.The following code example shows how a service uses the FaultException<TDetail> type to throw a managed exception that gets converted into the SOAP fault specified by the FaultContractAttribute.

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
  }
}

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:="http://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

В следующем примере кода показано, как код клиента выглядит при импорте клиентом с помощью средства служебной программы метаданных ServiceModel (Svcutil.exe).The following code example shows how the client code looks when imported by the client using the ServiceModel Metadata Utility Tool (Svcutil.exe).

В следующем примере кода показано, как клиент может перехватывать тип FaultException<TDetail>, представляющий пользовательскую ошибку SOAP, заданную в контракте операции.The following code example shows how a client can catch the FaultException<TDetail> type that represents the custom SOAP fault specified in the operation contract.

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();
    }
  }
}

Imports System.ServiceModel
Imports System.ServiceModel.Channels
Imports Microsoft.WCF.Documentation

Public Class Client
  Public Shared Sub Main()
    ' Picks up configuration from the config file.
    Dim wcfClient As New SampleServiceClient()
    Try
      ' Making calls.
      Console.WriteLine("Enter the greeting to send: ")
      Dim greeting As String = 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 timeProblem As TimeoutException
      Console.WriteLine("The service operation timed out. " & timeProblem.Message)
      Console.ReadLine()
      wcfClient.Abort()
    Catch greetingFault As FaultException(Of GreetingFault)
      Console.WriteLine(greetingFault.Detail.Message)
      Console.ReadLine()
      wcfClient.Abort()
    Catch unknownFault As FaultException
      Console.WriteLine("An unknown exception was received. " & unknownFault.Message)
      Console.ReadLine()
      wcfClient.Abort()
    Catch commProblem As CommunicationException
      Console.WriteLine("There was a communication problem. " & commProblem.Message + commProblem.StackTrace)
      Console.ReadLine()
      wcfClient.Abort()
    End Try
  End Sub
End Class

Комментарии

Перехватите FaultException<TDetail> объект в клиентском приложении Windows Communication Foundation (WCF), чтобы выполнить обработку ошибки SOAP, которая была задана в контракте операции.Catch the FaultException<TDetail> object in a Windows Communication Foundation (WCF) client application to handle a SOAP fault that has been contractually specified in an operation contract.

Как правило, в рабочих версиях служб используется атрибут FaultContractAttribute для формального задания всех ошибок SOAP, которые клиент может получить в ходе нормальной работы приложения.Typical deployed services use the FaultContractAttribute to formally specify all SOAP faults that a client can expect to receive in the normal course of an operation. Сведения об ошибках в FaultContractAttribute отображаются как FaultException<TDetail> (где typeparameter находится вне — сериализуемый объект ошибки, указанный в операции FaultContractAttribute ) при поступлении в клиентское приложение.Error information in a FaultContractAttribute appears as a FaultException<TDetail> (where the typeparameter is the serializable error object specified in the operation's FaultContractAttribute) when it arrives at a client application. Атрибут FaultContractAttribute можно использовать для задания ошибок SOAP как для двусторонних методов служб, так и для пар асинхронных методов.The FaultContractAttribute can be used to specify SOAP faults for both two-way service methods and for asynchronous method pairs.

Поскольку объект FaultException<TDetail> является также объектом класса FaultException и, следовательно, объектом класса CommunicationException, для перехвата заданных ошибок SOAP необходимо перехватывать типы FaultException<TDetail> до типов FaultException и CommunicationException или обрабатывать заданные исключения в обработчике одного из этих исключений.Because FaultException<TDetail> is both a FaultException and therefore a CommunicationException, to catch specified SOAP faults make sure you catch the FaultException<TDetail> types prior to the FaultException and CommunicationException types or handle the specified exceptions in one of those exception handlers.

Примечание

При использовании атрибута System.ServiceModel.FaultContractAttribute для задания FaultException<TDetail> с параметром типа System.String строковое значение присваивается свойству Detail в клиентском приложении; клиенты не могут извлекать эту строку путем вызова метода FaultException<TDetail>.ToString.If you use System.ServiceModel.FaultContractAttribute to specify a FaultException<TDetail> where the type parameter is a System.String, the string value is assigned to the Detail property in the client application; clients cannot retrieve that string by calling the FaultException<TDetail>.ToString method. Чтобы при вызове клиентским приложением метода Exception.ToString возвращалось строковое значение, необходимо вызывать исключение System.ServiceModel.FaultException внутри операции и передавать строку конструктору.To have the string value returned when the client application calls Exception.ToString, throw a System.ServiceModel.FaultException exception inside the operation and pass the string to the constructor.
В общем случае рекомендуется, чтобы типы сведений представляли собой пользовательские сериализуемые типы, соответствующие ошибке, а не System.String.In general, it is recommended that detail types be custom serializable types appropriate to the fault and not a System.String.

Конструкторы

FaultException<TDetail>(SerializationInfo, StreamingContext)

Инициализирует новый экземпляр класса FaultException<TDetail> на основе указанных сведений о сериализации и контекста при десериализации потока в объект FaultException.Initializes a new instance of the FaultException<TDetail> class using the specified serialization information and context when deserializing a stream into a FaultException object.

FaultException<TDetail>(TDetail)

Инициализирует новый экземпляр класса FaultException<TDetail>, использующий указанный объект сведений.Initializes a new instance of the FaultException<TDetail> class that uses the specified detail object.

FaultException<TDetail>(TDetail, FaultReason)

Инициализирует новый экземпляр класса FaultException<TDetail>, использующий указанные объект сведений и причину ошибки.Initializes a new instance of the FaultException<TDetail> class that uses the specified detail object and fault reason.

FaultException<TDetail>(TDetail, FaultReason, FaultCode)

Инициализирует новый экземпляр класса FaultException<TDetail>, использующий указанные объект сведений, причину ошибки и код ошибки.Initializes a new instance of the FaultException<TDetail> class that uses the specified detail object, fault reason, and fault code.

FaultException<TDetail>(TDetail, FaultReason, FaultCode, String)

Инициализирует новый экземпляр класса FaultException<TDetail>, использующий указанные объект сведений, причину ошибки SOAP и значения кода и действий.Initializes a new instance of the FaultException<TDetail> class that uses the specified detail object, and SOAP fault reason, code and action values.

FaultException<TDetail>(TDetail, String)

Инициализирует новый экземпляр класса FaultException<TDetail>, использующий указанные объект сведений и причину ошибки.Initializes a new instance of the FaultException<TDetail> class that uses the specified detail and fault reason.

FaultException<TDetail>(TDetail, String, FaultCode)

Инициализирует новый экземпляр класса FaultException<TDetail>, использующий указанные объект сведений, причину ошибки и код ошибки.Initializes a new instance of the FaultException<TDetail> class that uses the specified detail object, fault reason, and fault code.

FaultException<TDetail>(TDetail, String, FaultCode, String)

Инициализирует новый экземпляр класса FaultException<TDetail>, использующий указанные объект сведений, причину ошибки SOAP и значения кода и действий.Initializes a new instance of the FaultException<TDetail> class that uses the specified detail object, and SOAP fault reason, code and action values.

Свойства

Action

Возвращает значение действия SOAP для сообщения об ошибке.Gets the value of the SOAP action for the fault message.

(Унаследовано от FaultException)
Code

Возвращает код ошибки для ошибки SOAP.Gets the fault code for the SOAP fault.

(Унаследовано от FaultException)
Data

Возвращает коллекцию пар «ключ-значение», предоставляющую дополнительные сведения об исключении.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Унаследовано от Exception)
Detail

Возвращает объект, содержащий сведения об ошибке.Gets the object that contains the detail information of the fault condition.

HelpLink

Получает или задает ссылку на файл справки, связанный с этим исключением.Gets or sets a link to the help file associated with this exception.

(Унаследовано от Exception)
HResult

Возвращает или задает HRESULT — кодированное числовое значение, присвоенное определенному исключению.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Унаследовано от Exception)
InnerException

Возвращает экземпляр класса Exception, который вызвал текущее исключение.Gets the Exception instance that caused the current exception.

(Унаследовано от Exception)
Message

Возвращает сообщение исключения.Gets the message for the exception.

(Унаследовано от FaultException)
Reason

Возвращает причину FaultReason для ошибки SOAP.Gets the FaultReason for the SOAP fault.

(Унаследовано от FaultException)
Source

Возвращает или задает имя приложения или объекта, вызывавшего ошибку.Gets or sets the name of the application or the object that causes the error.

(Унаследовано от Exception)
StackTrace

Получает строковое представление непосредственных кадров в стеке вызова.Gets a string representation of the immediate frames on the call stack.

(Унаследовано от Exception)
TargetSite

Возвращает метод, создавший текущее исключение.Gets the method that throws the current exception.

(Унаследовано от Exception)

Методы

CreateMessageFault()

Создает объект MessageFault, который можно использовать для создания объекта Message, представляющего ошибку SOAP.Creates a MessageFault object that can be used to create a Message that represents the SOAP fault.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Унаследовано от Object)
GetBaseException()

При переопределении в производном классе возвращает исключение Exception, которое является первопричиной одного или нескольких последующих исключений.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Унаследовано от Exception)
GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Унаследовано от Object)
GetObjectData(SerializationInfo, StreamingContext)

Реализация метода GetObjectData(SerializationInfo, StreamingContext), вызываемая при сериализации объекта в поток.Implementation of the GetObjectData(SerializationInfo, StreamingContext) method that is called when the object is serialized into a stream.

GetObjectData(SerializationInfo, StreamingContext)

Реализация метода GetObjectData(SerializationInfo, StreamingContext), вызываемая при сериализации объекта в поток.Implementation of the GetObjectData(SerializationInfo, StreamingContext) method that is called when the object is serialized into a stream.

(Унаследовано от FaultException)
GetType()

Возвращает тип среды выполнения текущего экземпляра.Gets the runtime type of the current instance.

(Унаследовано от Exception)
MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)
ToString()

Возвращает строку для объекта FaultException<TDetail>.Returns a string for the FaultException<TDetail> object.

События

SerializeObjectState

Возникает, когда исключение сериализовано для создания объекта состояния исключения, содержащего сериализованные данные об исключении.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Унаследовано от Exception)

Применяется к