ServiceBehaviorAttribute.IncludeExceptionDetailInFaults Vlastnost

Definice

Získává nebo nastavuje hodnotu, která určuje, že obecné neošetřené výjimky spuštění mají být převedeny na FaultException<TDetail> typ ExceptionDetail a odeslány jako chybová zpráva.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. Tuto hodnotu nastavte true jenom během vývoje, abyste mohli řešit potíže se službou.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

Hodnota vlastnosti

Boolean

true Pokud se neošetřené výjimky vrátí jako chyby protokolu SOAP; v opačném případě false .true if unhandled exceptions are to be returned as SOAP faults; otherwise, false. Výchozí formát je false.The default is false.

Příklady

Následující příklad kódu ukazuje ServiceBehaviorAttribute Vlastnosti.The following code example demonstrates the ServiceBehaviorAttribute properties. BehaviorServiceTřída používá ServiceBehaviorAttribute atribut k označení toho, že:The BehaviorService class uses the ServiceBehaviorAttribute attribute to indicate that:

  • Metody implementace jsou vyvolány ve vlákně uživatelského rozhraní.Implementation methods are invoked on the UI thread.

  • Pro každou relaci existuje jeden objekt služby.There is one service object for each session.

  • Služba je tvořená jedním vláknem a nepodporuje znovu zadaná volání.The service is single-threaded and does not support reentrant calls.

Na úrovni operace OperationBehaviorAttribute hodnoty navíc označují, že TxWork Metoda automaticky zařadí transakce v toku, nebo vytvoří novou transakci pro provedení práce a transakce je potvrzena automaticky, pokud k neošetřené výjimce nedochází.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

Podkladová vazba musí podporovat Flow transakce pro následující příklad kódu pro správné provedení.The underlying binding must support flowed transactions for the following code example to execute properly. Pro podporu toků transakcí pomocí, například WSHttpBinding , nastavte TransactionFlow vlastnost na hodnotu true v kódu nebo v konfiguračním souboru aplikace.To support flowed transactions using the WSHttpBinding, for example, set the TransactionFlow property to true in code or in an application configuration file. Následující příklad kódu ukazuje konfigurační soubor pro předchozí vzorek.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>

Poznámky

Nastavte IncludeExceptionDetailInFaults na true , chcete-li povolit informace o výjimkách pro účely ladění klientům.Set IncludeExceptionDetailInFaults to true to enable exception information to flow to clients for debugging purposes. Tato vlastnost vyžaduje vazbu, která podporuje buď požadavek-odpověď, nebo duplexní přenos zpráv.This property requires a binding that supports either request-response or duplex messaging.

Ve všech spravovaných aplikacích jsou chyby zpracování reprezentovány Exception objekty.In all managed applications, processing errors are represented by Exception objects. V aplikacích založených na protokolu SOAP, jako jsou aplikace WCF, metody, které implementují operace služby, komunikují informace o chybě pomocí zpráv o chybách protokolu SOAP.In SOAP-based applications such as WCF applications, methods that implement service operations communicate error information using SOAP fault messages. Vzhledem k tomu, že aplikace WCF jsou spouštěny v obou typech chybových systémů, musí být všechny spravované informace o výjimce, které je třeba odeslat klientovi, převedeny z výjimek na chyby 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. Další informace najdete v tématu určení a zpracování chyb v kontraktech a službách.For more information, see Specifying and Handling Faults in Contracts and Services.

Během vývoje můžete chtít, aby služba také odesílala jiné výjimky zpátky klientovi, což vám pomůže při ladění.During development, you may want your service to also send other exceptions back to the client to assist you in debugging. Tato funkce je jenom pro vývoj a neměla by se jednat o nasazené služby.This is a development-only feature and should not be employed in deployed services.

Pro usnadnění vývoje ladění nastavte na IncludeExceptionDetailInFaults true buď v kódu, nebo pomocí konfiguračního souboru aplikace.To facilitate debugging development, set the IncludeExceptionDetailInFaults to true either in code or using an application configuration file.

Když je tato funkce povolená, služba automaticky vrátí do volajícího informace o bezpečnější výjimce.When enabled, the service automatically returns safer exception information to the caller. Tyto chyby se zobrazí klientovi jako FaultException<TDetail> objekty typu ExceptionDetail .These faults appear to the client as FaultException<TDetail> objects of type ExceptionDetail.

Důležité

Nastavením IncludeExceptionDetailInFaults true této možnosti umožníte klientům získat informace o výjimkách metod interních služeb. doporučuje se pouze jako dočasné ladění aplikace služby.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. Kromě toho WSDL pro metodu, která vrací neošetřené spravované výjimky tímto způsobem, neobsahuje kontrakt pro FaultException<TDetail> 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. Aby klienti mohli správně získat informace o ladění, musí mít klienti možnost očekávat neznámou chybu protokolu SOAP.Clients must expect the possibility of an unknown SOAP fault to obtain the debugging information properly.

Nastavení této vlastnosti na true může být také provedeno pomocí konfiguračního souboru aplikace a elementu < > serviceDebug , jak ukazuje následující příklad kódu.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>

Platí pro