ServiceBehaviorAttribute.IncludeExceptionDetailInFaults Propriété
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Obtient ou définit une valeur qui spécifie que les exceptions d’exécution non gérées générales doivent être converties en un FaultException<TDetail> type ExceptionDetail et envoyées en tant que message d’erreur. Définissez cette valeur true uniquement pendant le développement pour résoudre les problèmes d’un 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
Valeur de propriété
true si des exceptions non gérées doivent être retournées en tant qu’erreurs SOAP ; sinon, false. La valeur par défaut est false.
Exemples
L’exemple de code suivant illustre les ServiceBehaviorAttribute propriétés. La BehaviorService classe utilise l’attribut ServiceBehaviorAttribute pour indiquer que :
Les méthodes d’implémentation sont appelées sur le thread d’interface utilisateur.
Il existe un objet de service pour chaque session.
Le service est monothread et ne prend pas en charge les appels reentrants.
En outre, au niveau de l’opération, les OperationBehaviorAttribute valeurs indiquent que la TxWork méthode s’inscrit automatiquement dans les transactions en flux ou crée une nouvelle transaction pour effectuer le travail, et que la transaction est validée automatiquement si une exception non gérée ne se produit pas.
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
La liaison sous-jacente doit prendre en charge les transactions transmises pour que l’exemple de code suivant s’exécute correctement. Pour prendre en charge les transactions transmises à l’aide de la WSHttpBindingpropriété, par exemple, définissez la propriété true dans le TransactionFlow code ou dans un fichier de configuration d’application. L’exemple de code suivant montre le fichier de configuration de l’exemple précédent.
<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>
Remarques
Définissez IncludeExceptionDetailInFaults pour true activer les informations d’exception à transmettre aux clients à des fins de débogage. Cette propriété nécessite une liaison qui prend en charge la réponse à la demande ou la messagerie duplex.
Dans toutes les applications gérées, les erreurs de traitement sont représentées par Exception des objets. Dans les applications SOAP telles que les applications WCF, les méthodes qui implémentent les opérations de service communiquent des informations d’erreur à l’aide de messages d’erreur SOAP. Étant donné que les applications WCF s’exécutent sous les deux types de systèmes d’erreur, toutes les informations d’exception managées qui doivent être envoyées au client doivent être converties à partir d’exceptions en erreurs SOAP. Pour plus d’informations, consultez Spécification et gestion des erreurs dans les contrats et les services.
Pendant le développement, vous souhaiterez peut-être que votre service renvoie également d’autres exceptions au client pour vous aider à déboguer. Il s’agit d’une fonctionnalité de développement uniquement et ne doit pas être utilisée dans les services déployés.
Pour faciliter le débogage, définissez la valeur true dans le IncludeExceptionDetailInFaults code ou à l’aide d’un fichier de configuration d’application.
Lorsqu’il est activé, le service retourne automatiquement des informations d’exception plus sûres à l’appelant. Ces erreurs apparaissent au client en tant qu’objets FaultException<TDetail> de type ExceptionDetail.
Important
Paramètre IncludeExceptionDetailInFaults permettant aux true clients d’obtenir des informations sur les exceptions de méthode de service interne ; il est recommandé uniquement de déboguer temporairement une application de service. En outre, le WSDL pour une méthode qui retourne des exceptions managées non gérées de cette façon ne contient pas le contrat pour le FaultException<TDetail> type ExceptionDetail. Les clients doivent s’attendre à la possibilité d’une erreur SOAP inconnue pour obtenir correctement les informations de débogage.
La définition de cette propriété true peut également être effectuée à l’aide d’un fichier de configuration d’application et de l’élément <serviceDebug> , comme l’illustre l’exemple de code suivant.
<serviceBehaviors>
<behavior name="metadataAndDebugEnabled">
<serviceDebug
includeExceptionDetailInFaults="true"
/>
<serviceMetadata
httpGetEnabled="true"
httpGetUrl=""
/>
</behavior>
</serviceBehaviors>