FaultException<TDetail> Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Используется в клиентском приложении для перехвата договорно указанных ошибок SOAP.
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
Тип сведений об ошибке сериализуемой версии.
- Наследование
- Наследование
- Производный
- Атрибуты
Примеры
В следующем примере кода показано, как служба использует 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> (где типпараметр является сериализуемым объектом ошибки, указанным в операции FaultContractAttribute) при поступлении в клиентское приложение. Можно FaultContractAttribute использовать для указания ошибок SOAP для двухсторонняя служба и для пар асинхронных методов.
Так как FaultException<TDetail> это и то FaultExceptionCommunicationException, и другое, чтобы поймать указанные ошибки 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, FaultReason, FaultCode, String) |
Инициализирует новый экземпляр класса, использующего указанный объект детализации FaultException<TDetail> , и причины сбоя SOAP, значения кода и действия. |
| FaultException<TDetail>(TDetail, FaultReason, FaultCode) |
Инициализирует новый экземпляр класса, использующего указанный объект детализации FaultException<TDetail> , причину сбоя и код сбоя. |
| FaultException<TDetail>(TDetail, FaultReason) |
Инициализирует новый экземпляр класса, использующего указанный объект детализации FaultException<TDetail> и причину сбоя. |
| FaultException<TDetail>(TDetail, String, FaultCode, String) |
Инициализирует новый экземпляр класса, использующего указанный объект детализации FaultException<TDetail> , и причины сбоя SOAP, значения кода и действия. |
| FaultException<TDetail>(TDetail, String, FaultCode) |
Инициализирует новый экземпляр класса, использующего указанный объект детализации FaultException<TDetail> , причину сбоя и код сбоя. |
| FaultException<TDetail>(TDetail, String) |
Инициализирует новый экземпляр FaultException<TDetail> класса, использующего указанные сведения и причину сбоя. |
| FaultException<TDetail>(TDetail) |
Инициализирует новый экземпляр класса, использующего указанный объект сведений FaultException<TDetail> . |
Свойства
| Имя | Описание |
|---|---|
| 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) Реализация метода, вызываемого при сериализации объекта в поток. |
| GetType() |
Возвращает тип среды выполнения текущего экземпляра. (Унаследовано от Exception) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| ToString() |
Возвращает строку для FaultException<TDetail> объекта. |
События
| Имя | Описание |
|---|---|
| SerializeObjectState |
Устаревшие..
Происходит при сериализации исключения для создания объекта состояния исключения, содержащего сериализованные данные об исключении. (Унаследовано от Exception) |