ServiceBehaviorAttribute.IncludeExceptionDetailInFaults Özellik
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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
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>