Поделиться через


FaultException<TDetail> Класс

Определение

Используется в клиентских приложениях для перехвата заданных в контракте ошибок SOAP.

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

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

TDetail

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

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

Примеры

В следующем примере кода показано использование в службе типа FaultException<TDetail> для вызова управляемого исключения, которое преобразуется в ошибку SOAP, заданную атрибутом 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).

В следующем примере кода показано, как клиент может перехватывать тип FaultException<TDetail>, представляющий пользовательскую ошибку SOAP, заданную в контракте операции.

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, которая была договорно указана в контракте операции.

Как правило, в рабочих версиях служб используется атрибут FaultContractAttribute для формального задания всех ошибок SOAP, которые клиент может получить в ходе нормальной работы приложения. Сведения об ошибке в отображаются в FaultContractAttribute виде FaultException<TDetail> (где typeparameter — это сериализуемый объект ошибки, указанный в операции FaultContractAttribute), когда он поступает в клиентское приложение. Атрибут FaultContractAttribute можно использовать для задания ошибок SOAP как для двусторонних методов служб, так и для пар асинхронных методов.

Поскольку объект FaultException<TDetail> является также объектом класса FaultException и, следовательно, объектом класса CommunicationException, для перехвата заданных ошибок SOAP необходимо перехватывать типы FaultException<TDetail> до типов FaultException и CommunicationException или обрабатывать заданные исключения в обработчике одного из этих исключений.

Примечание

При использовании атрибута System.ServiceModel.FaultContractAttribute для задания FaultException<TDetail> с параметром типа System.String строковое значение присваивается свойству Detail в клиентском приложении; клиенты не могут извлекать эту строку путем вызова метода FaultException<TDetail>.ToString. Чтобы при вызове клиентским приложением метода Exception.ToString возвращалось строковое значение, необходимо вызывать исключение System.ServiceModel.FaultException внутри операции и передавать строку конструктору. В общем случае рекомендуется, чтобы типы сведений представляли собой пользовательские сериализуемые типы, соответствующие ошибке, а не System.String.

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

FaultException<TDetail>(SerializationInfo, StreamingContext)

Инициализирует новый экземпляр класса FaultException<TDetail> на основе указанных сведений о сериализации и контекста при десериализации потока в объект FaultException.

FaultException<TDetail>(TDetail)

Инициализирует новый экземпляр класса FaultException<TDetail>, использующий указанный объект сведений.

FaultException<TDetail>(TDetail, FaultReason)

Инициализирует новый экземпляр класса FaultException<TDetail>, использующий указанные объект сведений и причину ошибки.

FaultException<TDetail>(TDetail, FaultReason, FaultCode)

Инициализирует новый экземпляр класса FaultException<TDetail>, использующий указанные объект сведений, причину ошибки и код ошибки.

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

Инициализирует новый экземпляр класса FaultException<TDetail>, использующий указанные объект сведений, причину ошибки SOAP и значения кода и действий.

FaultException<TDetail>(TDetail, String)

Инициализирует новый экземпляр класса FaultException<TDetail>, использующий указанные объект сведений и причину ошибки.

FaultException<TDetail>(TDetail, String, FaultCode)

Инициализирует новый экземпляр класса FaultException<TDetail>, использующий указанные объект сведений, причину ошибки и код ошибки.

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

Инициализирует новый экземпляр класса FaultException<TDetail>, использующий указанные объект сведений, причину ошибки SOAP и значения кода и действий.

Свойства

Action

Возвращает значение действия SOAP для сообщения об ошибке.

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

Возвращает код ошибки для ошибки SOAP.

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

Возвращает коллекцию пар «ключ-значение», предоставляющую дополнительные сведения об исключении.

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

Возвращает объект, содержащий сведения об ошибке.

HelpLink

Получает или задает ссылку на файл справки, связанный с этим исключением.

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

Возвращает или задает HRESULT — кодированное числовое значение, присвоенное определенному исключению.

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

Возвращает экземпляр класса Exception, который вызвал текущее исключение.

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

Возвращает сообщение исключения.

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

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

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

Возвращает или задает имя приложения или объекта, вызывавшего ошибку.

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

Получает строковое представление непосредственных кадров в стеке вызова.

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

Возвращает метод, создавший текущее исключение.

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

Методы

CreateMessageFault()

Создает объект MessageFault, который можно использовать для создания объекта Message, представляющего ошибку SOAP.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

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

При переопределении в производном классе возвращает исключение Exception, которое является первопричиной одного или нескольких последующих исключений.

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

Служит хэш-функцией по умолчанию.

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

Реализация метода GetObjectData(SerializationInfo, StreamingContext), вызываемая при сериализации объекта в поток.

GetObjectData(SerializationInfo, StreamingContext)
Устаревшие..

Реализация метода GetObjectData(SerializationInfo, StreamingContext), вызываемая при сериализации объекта в поток.

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

Возвращает тип среды выполнения текущего экземпляра.

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

Создает неполную копию текущего объекта Object.

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

Возвращает строку для объекта FaultException<TDetail>.

События

SerializeObjectState
Устаревшие..

Возникает, когда исключение сериализовано для создания объекта состояния исключения, содержащего сериализованные данные об исключении.

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

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