ServiceBehaviorAttribute.IncludeExceptionDetailInFaults Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ruft einen Wert ab bzw. legt ihn fest, der angibt, dass allgemeine nicht behandelte Ausführungsausnahmen in eine FaultException<TDetail> vom Typ ExceptionDetail konvertiert und als Fehlermeldung gesendet werden. Legen Sie dieses Attribut nur während der Entwicklung auf true
fest, um Fehler in einem Dienst zu beheben.
public:
property bool IncludeExceptionDetailInFaults { bool get(); void set(bool value); };
public bool IncludeExceptionDetailInFaults { get; set; }
member this.IncludeExceptionDetailInFaults : bool with get, set
Public Property IncludeExceptionDetailInFaults As Boolean
Eigenschaftswert
true
, wenn nicht behandelte Ausnahmen als SOAP-Fehler zurückgegeben werden sollen, andernfalls false
. Der Standardwert ist false
.
Beispiele
Im folgenden Codebeispiel werden die ServiceBehaviorAttribute-Eigenschaften veranschaulicht. Die BehaviorService
-Klasse verwendet das ServiceBehaviorAttribute-Attribut, um Folgendes anzugeben:
Implementierungsmethoden werden auf dem UI-Thread aufgerufen.
Es gibt ein Dienstobjekt für jede Sitzung.
Der Dienst ist ein Singlethread und unterstützt keine wiedereintrittsfähigen Aufrufe.
Darüber hinaus geben die OperationBehaviorAttribute-Werte auf Vorgangsebene an, dass die TxWork
-Methode automatisch in Transaktionsflüsse eingetragen wird oder eine neue Transaktion zum Durchführen der Aufgaben erstellt, und dass für die Transaktion automatisch ein Commit ausgeführt wird, wenn keine nicht behandelte Ausnahme auftritt.
using System;
using System.ServiceModel;
using System.Transactions;
namespace Microsoft.WCF.Documentation
{
[ServiceContract(
Namespace="http://microsoft.wcf.documentation",
SessionMode=SessionMode.Required
)]
public interface IBehaviorService
{
[OperationContract]
string TxWork(string message);
}
// Note: To use the TransactionIsolationLevel property, you
// must add a reference to the System.Transactions.dll assembly.
/* The following service implementation:
* -- Processes messages on one thread at a time
* -- Creates one service object per session
* -- Releases the service object when the transaction commits
*/
[ServiceBehavior(
ConcurrencyMode=ConcurrencyMode.Single,
InstanceContextMode=InstanceContextMode.PerSession,
ReleaseServiceInstanceOnTransactionComplete=true
)]
public class BehaviorService : IBehaviorService, IDisposable
{
Guid myID;
public BehaviorService()
{
myID = Guid.NewGuid();
Console.WriteLine(
"Object "
+ myID.ToString()
+ " created.");
}
/*
* The following operation-level behaviors are specified:
* -- The executing transaction is committed when
* the operation completes without an
* unhandled exception
* -- Always executes under a flowed transaction.
*/
[OperationBehavior(
TransactionAutoComplete = true,
TransactionScopeRequired = true
)]
[TransactionFlow(TransactionFlowOption.Mandatory)]
public string TxWork(string message)
{
// Do some transactable work.
Console.WriteLine("TxWork called with: " + message);
// Display transaction information.
TransactionInformation info = Transaction.Current.TransactionInformation;
Console.WriteLine("The distributed tx ID: {0}.", info.DistributedIdentifier);
Console.WriteLine("The tx status: {0}.", info.Status);
return String.Format("Hello. This was object {0}.",myID.ToString()) ;
}
public void Dispose()
{
Console.WriteLine(
"Service "
+ myID.ToString()
+ " is being recycled."
);
}
}
}
Imports System.ServiceModel
Imports System.Transactions
Namespace Microsoft.WCF.Documentation
<ServiceContract(Namespace:="http://microsoft.wcf.documentation", SessionMode:=SessionMode.Required)> _
Public Interface IBehaviorService
<OperationContract> _
Function TxWork(ByVal message As String) As String
End Interface
' Note: To use the TransactionIsolationLevel property, you
' must add a reference to the System.Transactions.dll assembly.
' The following service implementation:
' * -- Processes messages on one thread at a time
' * -- Creates one service object per session
' * -- Releases the service object when the transaction commits
'
<ServiceBehavior(ConcurrencyMode:=ConcurrencyMode.Single, InstanceContextMode:=InstanceContextMode.PerSession, _
ReleaseServiceInstanceOnTransactionComplete:=True)> _
Public Class BehaviorService
Implements IBehaviorService, IDisposable
Private myID As Guid
Public Sub New()
myID = Guid.NewGuid()
Console.WriteLine("Object " & myID.ToString() & " created.")
End Sub
'
' * The following operation-level behaviors are specified:
' * -- The executing transaction is committed when
' * the operation completes without an
' * unhandled exception
' * -- Always executes under a flowed transaction.
'
<OperationBehavior(TransactionAutoComplete:=True, TransactionScopeRequired:=True), TransactionFlow(TransactionFlowOption.Mandatory)> _
Public Function TxWork(ByVal message As String) As String Implements IBehaviorService.TxWork
' Do some transactable work.
Console.WriteLine("TxWork called with: " & message)
' Display transaction information.
Dim info As TransactionInformation = Transaction.Current.TransactionInformation
Console.WriteLine("The distributed tx ID: {0}.", info.DistributedIdentifier)
Console.WriteLine("The tx status: {0}.", info.Status)
Return String.Format("Hello. This was object {0}.", myID.ToString())
End Function
Public Sub Dispose() Implements IDisposable.Dispose
Console.WriteLine("Service " & myID.ToString() & " is being recycled.")
End Sub
End Class
End Namespace
Die zugrunde liegende Bindung muss Transaktionsflüsse unterstützen, damit das folgende Codebeispiel ordnungsgemäß ausgeführt wird. Um Transaktionsflüsse mit WSHttpBinding zu unterstützen, legen Sie zum Beispiel die TransactionFlow-Eigenschaft im Code oder in einer Anwendungskonfigurationsdatei auf true
fest. Das folgende Codebeispiel zeigt die Konfigurationsdatei für das vorhergehende Beispiel.
<configuration>
<system.serviceModel>
<services>
<service
name="Microsoft.WCF.Documentation.BehaviorService"
behaviorConfiguration="metadataAndDebugEnabled"
>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/SampleService"/>
</baseAddresses>
</host>
<!--
Note:
This example code uses the WSHttpBinding to support transactions using the
WS-AtomicTransactions (WS-AT) protocol. WSHttpBinding is configured to use the
protocol, but the protocol is not enabled on some computers. Use the xws_reg -wsat+
command to enable the WS-AtomicTransactions protocol in the MSDTC service.
-->
<endpoint
contract="Microsoft.WCF.Documentation.IBehaviorService"
binding="wsHttpBinding"
bindingConfiguration="wsHttpBindingWithTXFlow"
address="http://localhost:8080/BehaviorService"
/>
<endpoint
contract="Microsoft.WCF.Documentation.IBehaviorService"
binding="netTcpBinding"
bindingConfiguration="netTcpBindingWithTXFlow"
address="net.tcp://localhost:8081/BehaviorService"
/>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="metadataAndDebugEnabled">
<serviceDebug
includeExceptionDetailInFaults="true"
/>
<serviceMetadata
httpGetEnabled="true"
httpGetUrl=""
/>
</behavior>
</serviceBehaviors>
</behaviors>
<!-- binding configuration - configures a WSHttpBinding to require transaction flow -->
<bindings>
<wsHttpBinding>
<binding name="wsHttpBindingWithTXFlow" transactionFlow="true" />
</wsHttpBinding>
<netTcpBinding>
<binding name="netTcpBindingWithTXFlow" transactionFlow="true" />
</netTcpBinding>
</bindings>
</system.serviceModel>
</configuration>
Hinweise
Legen Sie IncludeExceptionDetailInFaults auf true
fest, um zu ermöglichen, dass Ausnahmeinformationen zu Debuggingzwecken an Clients übermittelt werden können. Diese Eigenschaft erfordert eine Bindung, die entweder Anforderungs-/Antwort- oder Duplexnachrichten unterstützt.
In allen verwalteten Anwendungen werden Verarbeitungsfehler durch Exception-Objekte dargestellt. In SOAP-basierten Anwendungen wie WCF-Anwendungen kommunizieren Methoden, die Dienstvorgänge implementieren, Fehlerinformationen mithilfe von SOAP-Fehlernachrichten. Da WCF-Anwendungen unter beiden Arten von Fehlersystemen ausgeführt werden, müssen alle verwalteten Ausnahmeinformationen, die an den Client gesendet werden müssen, aus Ausnahmen in SOAP-Fehler konvertiert werden. Weitere Informationen finden Sie unter Angeben und Behandeln von Fehlern in Verträgen und Diensten.
Während der Entwicklung sollen möglicherweise auch anderen Ausnahmen an den Client zurückgesendet werden, um Ihnen das Debuggen zu erleichtern. Dies ist eine reine Entwicklungsfunktion, die nicht in bereitgestellten Diensten eingesetzt werden sollte.
Um die Debugentwicklung zu erleichtern, legen Sie den Code oder die IncludeExceptionDetailInFaults true
Verwendung einer Anwendungskonfigurationsdatei fest.
Bei Aktivierung gibt der Dienst automatisch sicherere Ausnahmeinformationen an den Aufrufer zurück. Diese Fehler werden den Clients als FaultException<TDetail>-Objekte des Typs ExceptionDetail angezeigt.
Wichtig
true
Durch Die Einstellung IncludeExceptionDetailInFaults können Clients Informationen zu Ausnahmen der internen Dienstmethode abrufen. Es wird nur als Möglichkeit zum vorübergehenden Debuggen einer Dienstanwendung empfohlen. Außerdem beinhaltet die WSDL für eine Methode, die nicht behandelte verwaltete Ausnahmen auf diese Weise zurückgibt, keinen Vertrag für die FaultException<TDetail> vom Typ ExceptionDetail. Clients müssen die Wahrscheinlichkeit eines unbekannten SOAP-Fehlers erwarten, um die Debuginformationen richtig zu erhalten.
Wenn Sie diese Eigenschaft true
festlegen, können Sie auch eine Anwendungskonfigurationsdatei und das ServiceDebug-Element> verwenden, wie das< folgende Codebeispiel zeigt.
<serviceBehaviors>
<behavior name="metadataAndDebugEnabled">
<serviceDebug
includeExceptionDetailInFaults="true"
/>
<serviceMetadata
httpGetEnabled="true"
httpGetUrl=""
/>
</behavior>
</serviceBehaviors>