ServiceBehaviorAttribute.IncludeExceptionDetailInFaults Eigenschaft

Definition

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.Gets or sets a value that specifies that general unhandled execution exceptions are to be converted into a FaultException<TDetail> of type ExceptionDetail and sent as a fault message. Legen Sie dieses Attribut nur während der Entwicklung auf true fest, um Fehler in einem Dienst zu beheben.Set this to true only during development to troubleshoot a service.

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.true if unhandled exceptions are to be returned as SOAP faults; otherwise, false. Die Standardeinstellung ist false.The default is false.

Beispiele

Im folgenden Codebeispiel werden die ServiceBehaviorAttribute-Eigenschaften veranschaulicht.The following code example demonstrates the ServiceBehaviorAttribute properties. Die BehaviorService-Klasse verwendet das ServiceBehaviorAttribute-Attribut, um Folgendes anzugeben:The BehaviorService class uses the ServiceBehaviorAttribute attribute to indicate that:

  • Implementierungsmethoden werden auf dem UI-Thread aufgerufen.Implementation methods are invoked on the UI thread.

  • Es gibt ein Dienstobjekt für jede Sitzung.There is one service object for each session.

  • Der Dienst ist ein Singlethread und unterstützt keine wiedereintrittsfähigen Aufrufe.The service is single-threaded and does not support reentrant calls.

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.Furthermore, at the operation level, the OperationBehaviorAttribute values indicate that the TxWork method automatically enlists in flowed transactions or creates a new transaction to do the work, and that the transaction is committed automatically if an unhandled exception does not occur.

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.The underlying binding must support flowed transactions for the following code example to execute properly. Um Transaktionsflüsse mit WSHttpBinding zu unterstützen, legen Sie zum Beispiel die TransactionFlow-Eigenschaft im Code oder in einer Anwendungskonfigurationsdatei auf true fest.To support flowed transactions using the WSHttpBinding, for example, set the TransactionFlow property to true in code or in an application configuration file. Das folgende Codebeispiel zeigt die Konfigurationsdatei für das vorhergehende Beispiel.The following code example shows the configuration file for the preceding sample.

<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.Set IncludeExceptionDetailInFaults to true to enable exception information to flow to clients for debugging purposes. Diese Eigenschaft erfordert eine Bindung, die entweder Anforderungs-/Antwort- oder Duplexnachrichten unterstützt.This property requires a binding that supports either request-response or duplex messaging.

In allen verwalteten Anwendungen werden Verarbeitungsfehler durch Exception-Objekte dargestellt.In all managed applications, processing errors are represented by Exception objects. In SOAP-basierten Anwendungen wie z. b. WCF-Anwendungen übermitteln Methoden, die Dienst Vorgänge implementieren, Fehlerinformationen mithilfe von SOAP-Fehlermeldungen.In SOAP-based applications such as WCF applications, methods that implement service operations communicate error information using SOAP fault messages. Da WCF-Anwendungen unter beiden fehlersystem Typen ausgeführt werden, müssen alle an den Client zu sendenden verwalteten Ausnahme Informationen von Ausnahmen in SOAP-Fehler konvertiert werden.Because WCF applications execute under both types of error systems, any managed exception information that needs to be sent to the client must be converted from exceptions into SOAP faults. Weitere Informationen finden Sie unter angeben und behandeln von Fehlern in Verträgen und Diensten.For more information, see Specifying and Handling Faults in Contracts and Services.

Während der Entwicklung sollen möglicherweise auch anderen Ausnahmen an den Client zurückgesendet werden, um Ihnen das Debuggen zu erleichtern.During development, you may want your service to also send other exceptions back to the client to assist you in debugging. Dies ist eine reine Entwicklungsfunktion, die nicht in bereitgestellten Diensten eingesetzt werden sollte.This is a development-only feature and should not be employed in deployed services.

Um das IncludeExceptionDetailInFaults Debuggen zu vereinfachen, true legen Sie im Code oder mithilfe einer Anwendungs Konfigurationsdatei auf fest.To facilitate debugging development, set the IncludeExceptionDetailInFaults to true either in code or using an application configuration file.

Bei Aktivierung gibt der Dienst automatisch sicherere Ausnahmeinformationen an den Aufrufer zurück.When enabled, the service automatically returns safer exception information to the caller. Diese Fehler werden den Clients als FaultException<TDetail>-Objekte des Typs ExceptionDetail angezeigt.These faults appear to the client as FaultException<TDetail> objects of type ExceptionDetail.

Wichtig

Durch IncludeExceptionDetailInFaults festlegen true von auf können Clients Informationen zu internen Dienst Methoden Ausnahmen abrufen. es wird nur empfohlen, eine Dienst Anwendung temporär zu debuggen.Setting IncludeExceptionDetailInFaults to true enables clients to obtain information about internal service method exceptions; it is only recommended as a way of temporarily debugging a service application. 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.In addition, the WSDL for a method that returns unhandled managed exceptions in this way does not contain the contract for the FaultException<TDetail> of type ExceptionDetail. Clients müssen die Wahrscheinlichkeit eines unbekannten SOAP-Fehlers erwarten, um die Debuginformationen richtig zu erhalten.Clients must expect the possibility of an unknown SOAP fault to obtain the debugging information properly.

Das Festlegen dieser Eigenschaft true auf kann auch mithilfe einer Anwendungs Konfigurationsdatei und des <serviceDebug> -Elements erfolgen, wie im folgenden Codebeispiel gezeigt.Setting this property to true can also be done using an application configuration file and the <serviceDebug> element, as the following code example shows.

<serviceBehaviors>
  <behavior name="metadataAndDebugEnabled">
    <serviceDebug
      includeExceptionDetailInFaults="true"
    />
    <serviceMetadata
      httpGetEnabled="true"
      httpGetUrl=""
    />
  </behavior>
</serviceBehaviors>

Gilt für: