ServiceBehaviorAttribute.IncludeExceptionDetailInFaults Propriété

Définition

Obtient ou définit une valeur qui indique que les exceptions d'exécution générales non prises en charge doivent être converties en FaultException<TDetail> de type ExceptionDetail et envoyées en tant que message d'erreur.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. Affectez la valeur true uniquement lors du développement afin de dépanner un service.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

Valeur de propriété

true si les exceptions non gérées doivent être retournées en tant qu'erreurs SOAP ; sinon, false.true if unhandled exceptions are to be returned as SOAP faults; otherwise, false. La valeur par défaut est false.The default is false.

Exemples

L'exemple de code suivant illustre les propriétés ServiceBehaviorAttribute.The following code example demonstrates the ServiceBehaviorAttribute properties. La classe BehaviorService utilise l'attribut ServiceBehaviorAttribute pour indiquer que :The BehaviorService class uses the ServiceBehaviorAttribute attribute to indicate that:

  • Les méthodes d'implémentation sont appelées sur le thread d'interface utilisateur.Implementation methods are invoked on the UI thread.

  • Il existe un objet du service pour chaque session.There is one service object for each session.

  • Le service est monothread et ne prend pas en charge les appels réentrants.The service is single-threaded and does not support reentrant calls.

En outre, au niveau de l’opération, les valeurs OperationBehaviorAttribute indiquent que la méthode TxWork s’inscrit automatiquement dans les transactions passées ou crée une transaction pour faire le travail, et que la transaction est validée automatiquement si aucune exception non gérée ne se produit.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

La liaison sous-jacente doit prendre en charge les transactions passées pour l’exemple de code suivant pour s’exécuter correctement.The underlying binding must support flowed transactions for the following code example to execute properly. Pour prendre en charge les transactions passées à l’aide de WSHttpBinding, par exemple, affectez la valeur TransactionFlow à la propriété true dans le code ou dans un fichier de configuration de l’application.To support flowed transactions using the WSHttpBinding, for example, set the TransactionFlow property to true in code or in an application configuration file. L'exemple de code suivant montre le fichier de configuration pour l'exemple précédent :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>

Remarques

Affectez la valeur IncludeExceptionDetailInFaults à true pour permettre aux informations sur les exceptions d'être transmises aux clients à des fins de débogage.Set IncludeExceptionDetailInFaults to true to enable exception information to flow to clients for debugging purposes. Cette propriété requiert une liaison qui prend en charge la messagerie en mode demande-réponse ou duplex.This property requires a binding that supports either request-response or duplex messaging.

Dans toutes les applications managées, les erreurs de traitement sont représentées par des objets Exception.In all managed applications, processing errors are represented by Exception objects. Dans les applications basées sur SOAP telles que les applications WCF, les méthodes qui implémentent des opérations de service communiquent des informations d’erreur à l’aide de messages d’erreur SOAP.In SOAP-based applications such as WCF applications, methods that implement service operations communicate error information using SOAP fault messages. Étant donné que les applications WCF s’exécutent sous les deux types de systèmes d’erreur, toutes les informations sur les exceptions managées qui doivent être envoyées au client doivent être converties des exceptions en erreurs SOAP.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. Pour plus d’informations, consultez spécification et gestion des erreurs dans les contrats et les services.For more information, see Specifying and Handling Faults in Contracts and Services.

Durant le développement, vous pouvez souhaiter que votre service renvoie également d'autres exceptions au client afin de vous aider lors du débogage.During development, you may want your service to also send other exceptions back to the client to assist you in debugging. Cette fonctionnalité est réservée au développement et ne doit être pas employée dans le cadre de services déployés.This is a development-only feature and should not be employed in deployed services.

Pour faciliter le développement du débogage, affectez true la valeur dans le code ou à l’aide d’un fichier de configuration de l' IncludeExceptionDetailInFaults application.To facilitate debugging development, set the IncludeExceptionDetailInFaults to true either in code or using an application configuration file.

En cas d'activation, le service retourne automatiquement des informations plus sûres sur les exceptions à l'appelant.When enabled, the service automatically returns safer exception information to the caller. Ces erreurs apparaissent au client sous la forme d'objets FaultException<TDetail> de type ExceptionDetail.These faults appear to the client as FaultException<TDetail> objects of type ExceptionDetail.

Important

L' IncludeExceptionDetailInFaults affectation true de la valeur à permet aux clients d’obtenir des informations sur les exceptions de méthode de service interne; il est recommandé uniquement pour déboguer temporairement une application de service.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. De plus, le WSDL pour une méthode qui retourne des exceptions managées non prises en charge de cette façon ne contient pas le contrat pour le FaultException<TDetail> de type 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. Les clients doivent attendre une erreur SOAP inconnue pour obtenir correctement les informations de débogage.Clients must expect the possibility of an unknown SOAP fault to obtain the debugging information properly.

L’affectation de la true valeur à cette propriété peut également être effectuée à l’aide d’un fichier de configuration d’application et de l' <élément serviceDebug> , comme le montre l’exemple de code suivant.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>

S’applique à