FaultException<TDetail> Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Används i ett klientprogram för att fånga avtalsenligt angivna SOAP-fel.
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
Typparametrar
- TDetail
Den serialiserbara felinformationstypen.
- Arv
- Arv
- Härledda
- Attribut
Exempel
Följande kodexempel visar hur en tjänst använder FaultException<TDetail> typen för att utlösa ett hanterat undantag som konverteras till SOAP-felet som anges av 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
Följande kodexempel visar hur klientkoden ser ut när den importeras av klienten med hjälp av Verktyget för ServiceModel-metadata (Svcutil.exe).
Följande kodexempel visar hur en klient kan fånga den FaultException<TDetail> typ som representerar det anpassade SOAP-fel som anges i åtgärdskontraktet.
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
Kommentarer
Fånga FaultException<TDetail>-objektet i ett Windows Communication Foundation-klientprogram (WCF) för att hantera ett SOAP-fel som har angetts enligt avtal i ett åtgärdskontrakt.
Typiska distribuerade tjänster använder FaultContractAttribute för att formellt ange alla SOAP-fel som en klient kan förvänta sig att ta emot under en normal åtgärd. Felinformation i en FaultContractAttribute visas som en FaultException<TDetail> (där typeparametern är det serialiserbara felobjektet som anges i åtgärdens FaultContractAttribute) när det kommer till ett klientprogram. FaultContractAttribute Kan användas för att ange SOAP-fel för både tvåvägstjänstmetoder och för asynkrona metodpar.
Eftersom FaultException<TDetail> är både en FaultException och därför en CommunicationException, för att fånga angivna SOAP-fel kontrollerar du att FaultException du fångar typerna FaultException<TDetail> före och CommunicationException skriver eller hanterar de angivna undantagen i någon av dessa undantagshanterare.
Note
Om du använder System.ServiceModel.FaultContractAttribute för att ange en FaultException<TDetail> där typparametern är en System.Stringtilldelas strängvärdet till Detail egenskapen i klientprogrammet. Klienter kan inte hämta strängen FaultException<TDetail>.ToString genom att anropa metoden. Om du vill att strängvärdet ska returneras när klientprogrammet anropar Exception.ToStringgenererar du ett System.ServiceModel.FaultException undantag i åtgärden och skickar strängen till konstruktorn. I allmänhet rekommenderar vi att detaljtyper är anpassade serialiserbara typer som är lämpliga för felet och inte en System.String.
Konstruktorer
| Name | Description |
|---|---|
| FaultException<TDetail>(SerializationInfo, StreamingContext) |
Initierar en ny instans av FaultException<TDetail> klassen med den angivna serialiseringsinformationen och kontexten när en ström deserialiseras till ett FaultException objekt. |
| FaultException<TDetail>(TDetail, FaultReason, FaultCode, String) |
Initierar en ny instans av FaultException<TDetail> klassen som använder det angivna detaljobjektet och SOAP-felorsaks-, kod- och åtgärdsvärden. |
| FaultException<TDetail>(TDetail, FaultReason, FaultCode) |
Initierar en ny instans av FaultException<TDetail> klassen som använder det angivna detaljobjektet, felorsaken och felkoden. |
| FaultException<TDetail>(TDetail, FaultReason) |
Initierar en ny instans av FaultException<TDetail> klassen som använder det angivna detaljobjektet och felorsaken. |
| FaultException<TDetail>(TDetail, String, FaultCode, String) |
Initierar en ny instans av FaultException<TDetail> klassen som använder det angivna detaljobjektet och SOAP-felorsaks-, kod- och åtgärdsvärden. |
| FaultException<TDetail>(TDetail, String, FaultCode) |
Initierar en ny instans av FaultException<TDetail> klassen som använder det angivna detaljobjektet, felorsaken och felkoden. |
| FaultException<TDetail>(TDetail, String) |
Initierar en ny instans av FaultException<TDetail> klassen som använder den angivna informationen och felorsaken. |
| FaultException<TDetail>(TDetail) |
Initierar en ny instans av FaultException<TDetail> klassen som använder det angivna detaljobjektet. |
Egenskaper
| Name | Description |
|---|---|
| Action |
Hämtar värdet för SOAP-åtgärden för felmeddelandet. (Ärvd från FaultException) |
| Code |
Hämtar felkoden för SOAP-felet. (Ärvd från FaultException) |
| Data |
Hämtar en samling nyckel/värde-par som ger ytterligare användardefinierad information om undantaget. (Ärvd från Exception) |
| Detail |
Hämtar objektet som innehåller information om feltillståndet. |
| HelpLink |
Hämtar eller anger en länk till hjälpfilen som är associerad med det här undantaget. (Ärvd från Exception) |
| HResult |
Hämtar eller anger HRESULT, ett kodat numeriskt värde som har tilldelats ett specifikt undantag. (Ärvd från Exception) |
| InnerException |
Hämtar den Exception instans som orsakade det aktuella undantaget. (Ärvd från Exception) |
| Message |
Hämtar meddelandet för undantaget. (Ärvd från FaultException) |
| Reason |
FaultReason Hämtar för SOAP-felet. (Ärvd från FaultException) |
| Source |
Hämtar eller anger namnet på programmet eller objektet som orsakar felet. (Ärvd från Exception) |
| StackTrace |
Hämtar en strängrepresentation av de omedelbara ramarna i anropsstacken. (Ärvd från Exception) |
| TargetSite |
Hämtar den metod som utlöser det aktuella undantaget. (Ärvd från Exception) |
Metoder
| Name | Description |
|---|---|
| CreateMessageFault() |
Skapar ett MessageFault objekt som kan användas för att skapa ett Message som representerar SOAP-felet. |
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| GetBaseException() |
När den åsidosätts i en härledd klass returnerar den Exception som är rotorsaken till ett eller flera efterföljande undantag. (Ärvd från Exception) |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
Implementering av metoden GetObjectData(SerializationInfo, StreamingContext) som anropas när objektet serialiseras till en dataström. |
| GetType() |
Hämtar körningstypen för den aktuella instansen. (Ärvd från Exception) |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| ToString() |
Returnerar en sträng för FaultException<TDetail> objektet. |
Händelser
| Name | Description |
|---|---|
| SerializeObjectState |
Inträffar när ett undantag serialiseras för att skapa ett undantagstillståndsobjekt som innehåller serialiserade data om undantaget. (Ärvd från Exception) |