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 hizmette sorun gidermek için true bunu 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

Boolean

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 kullanır ServiceBehaviorAttribute :

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

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

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

Ayrıca, işlem düzeyinde değerler, OperationBehaviorAttribute yöntemin akışı yapılan işlemlere otomatik olarak listelendiğini TxWork 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 alınan bağlamanın akışlı işlemleri desteklemesi gerekir. kullanarak akışı yapılan 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 request-response veya çift yönlü mesajlaşmayı destekleyen bir bağlama gerektirir.

Tüm yönetilen uygulamalarda işleme hataları nesnelerle 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 yönetilen özel durum bilgilerinin özel durumlardan SOAP hatalarına dönüştürülmesi gerekir. Daha fazla bilgi için bkz. Sözleşmelerde ve Hizmetlerde Hataları Belirtme ve İşleme.

Geliştirme sırasında, hata ayıklamada size yardımcı olması için hizmetinizin 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 IncludeExceptionDetailInFaults true .

Etkinleştirildiğinde hizmet, çağırana 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 işlenmeyen yönetilen özel durumlar döndüren bir yöntemin WSDL'i türü ExceptionDetailiçin FaultException<TDetail> sözleşmeyi içermez. İ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