ServiceBehaviorAttribute.IncludeExceptionDetailInFaults ServiceBehaviorAttribute.IncludeExceptionDetailInFaults ServiceBehaviorAttribute.IncludeExceptionDetailInFaults ServiceBehaviorAttribute.IncludeExceptionDetailInFaults Property

定義

一般的な未処理の実行例外を FaultException<TDetail> 型の ExceptionDetail に変換してエラー メッセージとして送信するように指定する値を取得または設定します。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. この属性は、開発時にサービスのトラブルシューティングを行う場合にのみ、true に設定します。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

プロパティ値

未処理の例外を SOAP エラーとして返す場合は true、それ以外の場合は falsetrue if unhandled exceptions are to be returned as SOAP faults; otherwise, false. 既定値は、false です。The default is false.

次のコード例は、ServiceBehaviorAttribute プロパティを示しています。The following code example demonstrates the ServiceBehaviorAttribute properties. BehaviorService クラスは、次のことを示すために ServiceBehaviorAttribute 属性を使用します。The BehaviorService class uses the ServiceBehaviorAttribute attribute to indicate that:

  • 実装メソッドは、UI スレッド上で起動します。Implementation methods are invoked on the UI thread.

  • セッションごとに 1 つのサービス オブジェクトが存在します。There is one service object for each session.

  • サービスはシングル スレッドであり、再入呼び出しをサポートしません。The service is single-threaded and does not support reentrant calls.

さらに、OperationBehaviorAttribute 値は操作レベルで、TxWork メソッドがフロー トランザクションに自動的に登録するかまたはこの処理のための新しいトランザクションを作成するかどうか、および未処理の例外が発生しない場合にトランザクションが自動的にコミットされるかどうかを示します。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

次のコード例が適切に動作するには、基になるバインドでフロー トランザクションがサポートされている必要があります。The underlying binding must support flowed transactions for the following code example to execute properly. たとえば、WSHttpBinding を使用するフロー トランザクションをサポートするには、コードまたはアプリケーション構成ファイル内で TransactionFlow プロパティを true に設定します。To support flowed transactions using the WSHttpBinding, for example, set the TransactionFlow property to true in code or in an application configuration file. 次のコード例は、前のサンプルの構成ファイルを示しています。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>

注釈

デバッグを目的として、例外情報をクライアントにフローできるようにするには、IncludeExceptionDetailInFaultstrue に設定します。Set IncludeExceptionDetailInFaults to true to enable exception information to flow to clients for debugging purposes. このプロパティは、要求 - 応答または双方向のメッセージングのいずれかをサポートするバインドを必要とします。This property requires a binding that supports either request-response or duplex messaging.

すべてのマネージド アプリケーションで、操作エラーは Exception オブジェクトにより表されます。In all managed applications, processing errors are represented by Exception objects. WCF アプリケーションなどの SOAP ベースのアプリケーション、サービス操作を実装するメソッドは、SOAP エラー メッセージを使用して、エラー情報を通信します。In SOAP-based applications such as WCF applications, methods that implement service operations communicate error information using SOAP fault messages. WCF アプリケーションは、両方の種類のエラー システムで実行、ため、クライアントに送信する必要があるマネージ例外情報を例外から 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. 詳細については、次を参照してください。を指定すると処理のエラー コントラクトおよびサービスのします。For more information, see Specifying and Handling Faults in Contracts and Services.

開発中は、デバッグを支援するために、その他の例外もクライアントに返すようにサービスを設定することができます。During development, you may want your service to also send other exceptions back to the client to assist you in debugging. これは開発専用の機能なので、展開されたサービスで使用しないでください。This is a development-only feature and should not be employed in deployed services.

デバッグの開発を容易にするには設定、IncludeExceptionDetailInFaultstrueコードまたはアプリケーション構成ファイルを使用しています。To facilitate debugging development, set the IncludeExceptionDetailInFaults to true either in code or using an application configuration file.

有効な場合は、サービスが自動的に安全な例外情報を呼び出し元に返します。When enabled, the service automatically returns safer exception information to the caller. このようなエラーは、FaultException<TDetail> 型の ExceptionDetail オブジェクトとしてクライアントに表示されます。These faults appear to the client as FaultException<TDetail> objects of type ExceptionDetail.

重要

設定IncludeExceptionDetailInFaultstrueサービス メソッド例外に関する内部情報を取得できるようにクライアントは、サービス アプリケーションを一時的にデバッグの手段としてのみお勧めします。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. さらに、このようにして未処理のマネージド例外を返すメソッドの WSDL には、FaultException<TDetail> 型の 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. クライアントは、デバッグ情報を適切に取得するために、不明な SOAP エラーの可能性について想定しておく必要があります。Clients must expect the possibility of an unknown SOAP fault to obtain the debugging information properly.

このプロパティを設定true実行することも、アプリケーション構成ファイルを使用して、 <serviceDebug> 要素は、次のコード例に示すよう。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>

適用対象