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