Aracılığıyla paylaş


ServiceBehaviorAttribute.IncludeExceptionDetailInFaults Özellik

Tanım

Genel işlenmeyen yürütme özel durumlarının bir türe ExceptionDetail dönüştürülmesini ve hata iletisi olarak gönderilmesini belirten bir FaultException<TDetail> değer alır veya ayarlar. Bir hizmetle ilgili sorunları gidermek için bunu true yalnızca geliştirme sırasında olarak ayarlayın.

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

Özellik Değeri

true İşlenmeyen özel durumlar SOAP hatası olarak döndürülecekse; aksi takdirde , false. Varsayılan değer: false.

Örnekler

Aşağıdaki kod örneği özellikleri gösterir ServiceBehaviorAttribute . sınıfı, BehaviorService aşağıdakileri belirtmek için özniteliğini ServiceBehaviorAttribute kullanır:

  • Uygulama yöntemleri ui iş parçacığında çağrılır.

  • Her oturum için bir hizmet nesnesi vardır.

  • Hizmet tek iş parçacıklıdır ve yeniden gelen çağrıları desteklemez.

Ayrıca, işlem düzeyinde değerler yöntemin OperationBehaviorAttributeTxWork akan işlemlere otomatik olarak kaydolduğunu veya işi yapmak için yeni bir işlem oluşturduğunu ve işlenmeyen bir özel durum oluşmazsa işlemin otomatik olarak işlendiğini gösterir.

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

Aşağıdaki kod örneğinin düzgün yürütülmesi için temel bağlamanın akışlı işlemleri desteklemesi gerekir. kullanarak akışlı işlemleri WSHttpBindingdesteklemek için örneğin, özelliğini true kodda veya uygulama yapılandırma dosyasında olarak ayarlayınTransactionFlow. Aşağıdaki kod örneği, önceki örneğin yapılandırma dosyasını gösterir.

<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>

Açıklamalar

true Hata ayıklama amacıyla istemcilere özel durum bilgilerinin akışını etkinleştirmek için olarak ayarlayınIncludeExceptionDetailInFaults. Bu özellik, istek yanıt veya çift yönlü mesajlaşmayı destekleyen bir bağlama gerektirir.

Tüm yönetilen uygulamalarda işleme hataları nesneler tarafından Exception temsil edilir. WCF uygulamaları gibi SOAP tabanlı uygulamalarda, hizmet işlemlerini uygulayan yöntemler SOAP hata iletilerini kullanarak hata bilgilerini iletir. WCF uygulamaları her iki tür hata sistemi altında yürütüldüğünden, istemciye gönderilmesi gereken tüm yönetilen özel durum bilgileri özel durumlardan SOAP hatalarına dönüştürülmelidir. Daha fazla bilgi için bkz. Sözleşmelerde ve Hizmetlerde Hataları Belirtme ve İşleme.

Geliştirme sırasında, hizmetinizin hata ayıklamada size yardımcı olması için istemciye başka özel durumlar da göndermesini isteyebilirsiniz. Bu yalnızca geliştirme özelliğidir ve dağıtılan hizmetlerde çalıştırılmamalıdır.

Hata ayıklama geliştirmeyi kolaylaştırmak için öğesini kod içinde veya bir uygulama yapılandırma dosyası kullanarak olarak ayarlayın IncludeExceptionDetailInFaultstrue .

Etkinleştirildiğinde hizmet, arayana otomatik olarak daha güvenli özel durum bilgileri döndürür. Bu hatalar istemciye türünde ExceptionDetailnesneler olarak FaultException<TDetail> görünür.

Önemli

true ayarıIncludeExceptionDetailInFaults, istemcilerin iç hizmet yöntemi özel durumları hakkında bilgi almasını sağlar; yalnızca bir hizmet uygulamasında geçici olarak hata ayıklama yöntemi olarak önerilir. Ayrıca, bu şekilde ele alınmayan yönetilen istisnaları döndüren bir yöntemin WSDL'sinde, türü FaultException<TDetail> olan ExceptionDetail için sözleşme bulunmaz. İstemciler, hata ayıklama bilgilerini düzgün bir şekilde elde etmek için bilinmeyen bir SOAP hatası olasılığını beklemelidir.

Bu özelliği olarak true ayarlamak, aşağıdaki kod örneğinde gösterildiği gibi bir uygulama yapılandırma dosyası ve <serviceDebug> öğesi kullanılarak da yapılabilir.

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

Şunlara uygulanır