FaultException<TDetail> Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Používá se v klientské aplikaci k zachycení smluvně zadaných chyb 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
Parametry typu
- TDetail
Typ podrobností o serializovatelné chybě.
- Dědičnost
- Dědičnost
- Odvozené
- Atributy
Příklady
Následující příklad kódu ukazuje, jak služba používá FaultException<TDetail> typ k vyvolání spravované výjimky, která se převede na chybu SOAP určenou 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
Následující příklad kódu ukazuje, jak vypadá klientský kód při importu klienta pomocí nástroje ServiceModel Metadata Utility (Svcutil.exe).
Následující příklad kódu ukazuje, jak klient může zachytit FaultException<TDetail> typ, který představuje vlastní chybu SOAP zadanou v kontraktu operace.
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
Poznámky
FaultException<TDetail> Zachyťte objekt v klientské aplikaci WCF (Windows Communication Foundation) pro zpracování chyby PROTOKOLU SOAP, která byla smluvně zadána v kontraktu operace.
Typické nasazené služby používají FaultContractAttribute k formálnímu určení všech chyb PROTOKOLU SOAP, které klient může očekávat v normálním průběhu operace. Informace o chybě v objektu FaultContractAttribute se zobrazí jako FaultException<TDetail> (kde typeparameter je serializovatelný objekt chyby zadaný v operaci FaultContractAttribute) při příchodu do klientské aplikace. Dá FaultContractAttribute se použít k určení chyb PROTOKOLU SOAP pro obousměrné metody služby i pro páry asynchronních metod.
Vzhledem k tomu FaultException<TDetail> , že je to jak , FaultException tak CommunicationExceptioni , zachytit zadané chyby SOAP ujistěte se, že jste zachytáli FaultException<TDetail> typy před FaultException a typy nebo CommunicationException zpracovat zadané výjimky v jednom z těchto obslužných rutin výjimek.
Note
Pokud použijete System.ServiceModel.FaultContractAttribute k určení FaultException<TDetail> , kde je System.Stringparametr typu , je řetězcová hodnota přiřazena vlastnosti Detail v klientské aplikaci; klienti nemohou tento řetězec načíst voláním FaultException<TDetail>.ToString metody. Chcete-li, aby se řetězcová hodnota vrátila při volání Exception.ToStringklientské aplikace , vyvolá System.ServiceModel.FaultException výjimku uvnitř operace a předejte řetězec konstruktoru. Obecně se doporučuje, aby podrobné typy byly vlastní serializovatelné typy vhodné pro chybu, a nikoli System.String.
Konstruktory
| Name | Description |
|---|---|
| FaultException<TDetail>(SerializationInfo, StreamingContext) |
Inicializuje novou instanci FaultException<TDetail> třídy pomocí zadaných serializačních informací a kontextu při deserializaci datového proudu do objektu FaultException . |
| FaultException<TDetail>(TDetail, FaultReason, FaultCode, String) |
Inicializuje novou instanci FaultException<TDetail> třídy, která používá zadaný objekt podrobností a důvod chyby SOAP, kód a akční hodnoty. |
| FaultException<TDetail>(TDetail, FaultReason, FaultCode) |
Inicializuje novou instanci FaultException<TDetail> třídy, která používá zadaný detail objekt, důvod chyby a kód chyby. |
| FaultException<TDetail>(TDetail, FaultReason) |
Inicializuje novou instanci FaultException<TDetail> třídy, která používá zadaný detail objektu a důvodu chyby. |
| FaultException<TDetail>(TDetail, String, FaultCode, String) |
Inicializuje novou instanci FaultException<TDetail> třídy, která používá zadaný objekt podrobností a důvod chyby SOAP, kód a akční hodnoty. |
| FaultException<TDetail>(TDetail, String, FaultCode) |
Inicializuje novou instanci FaultException<TDetail> třídy, která používá zadaný detail objekt, důvod chyby a kód chyby. |
| FaultException<TDetail>(TDetail, String) |
Inicializuje novou instanci FaultException<TDetail> třídy, která používá zadaný detail a důvod chyby. |
| FaultException<TDetail>(TDetail) |
Inicializuje novou instanci FaultException<TDetail> třídy, která používá zadaný detail objekt. |
Vlastnosti
| Name | Description |
|---|---|
| Action |
Získá hodnotu akce SOAP pro chybovou zprávu. (Zděděno od FaultException) |
| Code |
Získá kód chyby pro chybu SOAP. (Zděděno od FaultException) |
| Data |
Získá kolekci párů klíč/hodnota, které poskytují další uživatelem definované informace o výjimce. (Zděděno od Exception) |
| Detail |
Získá objekt, který obsahuje podrobné informace o stavu chyby. |
| HelpLink |
Získá nebo nastaví odkaz na soubor nápovědy přidružený k této výjimce. (Zděděno od Exception) |
| HResult |
Získá nebo nastaví HRESULT, kódovanou číselnou hodnotu, která je přiřazena ke konkrétní výjimce. (Zděděno od Exception) |
| InnerException |
Exception Získá instanci, která způsobila aktuální výjimku. (Zděděno od Exception) |
| Message |
Získá zprávu pro výjimku. (Zděděno od FaultException) |
| Reason |
FaultReason Získá chybu SOAP. (Zděděno od FaultException) |
| Source |
Získá nebo nastaví název aplikace nebo objektu, který způsobuje chybu. (Zděděno od Exception) |
| StackTrace |
Získá řetězcové znázornění okamžitých rámců v zásobníku volání. (Zděděno od Exception) |
| TargetSite |
Získá metodu, která vyvolá aktuální výjimku. (Zděděno od Exception) |
Metody
| Name | Description |
|---|---|
| CreateMessageFault() |
Vytvoří MessageFault objekt, který lze použít k vytvoření Message , který představuje chybu SOAP. |
| Equals(Object) |
Určuje, zda je zadaný objekt roven aktuálnímu objektu. (Zděděno od Object) |
| GetBaseException() |
Při přepsání v odvozené třídě vrátí Exception to, že je původní příčinou jedné nebo více následných výjimek. (Zděděno od Exception) |
| GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
GetObjectData(SerializationInfo, StreamingContext) Implementace metody, která je volána při serializaci objektu do datového proudu. |
| GetType() |
Získá typ modulu runtime aktuální instance. (Zděděno od Exception) |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| ToString() |
Vrátí řetězec objektu FaultException<TDetail> . |
Událost
| Name | Description |
|---|---|
| SerializeObjectState |
Zastaralé.
Nastane, když je výjimka serializována vytvořit objekt stavu výjimky, který obsahuje serializovaná data o výjimce. (Zděděno od Exception) |