Utilizzo della gestione degli errori
Durante la gestione degli errori di Windows Communication Foundation (WCF) non viene restituito un messaggio di eccezione al client, a meno che non venga generata un'eccezione (o un sottotipo) o venga implementato un erroreContract . In questi scenari è pertanto possibile tenere traccia solo dei dati del messaggio di errore. Un'eccezione nelle implementazioni di callback torna automaticamente come messaggio di errore per i punti di traccia ServerFault e ClientFault . Tuttavia, verrà sempre restituito un errore generico con un messaggio generico. Per altre informazioni sui contratti di errore WCF, vedere https://go.microsoft.com/fwlink/?LinkId=83132.
È inoltre possibile tenere traccia delle costanti e delle proprietà del contesto attraverso i track point degli errori.
Se i dettagli dell'eccezione vengono restituiti negli errori usando l'attributo IncludeExceptionDetailInFaults , estrarre il messaggio di eccezione effettivo tramite XPath.
La gestione degli errori viene fornita dai punti di traccia di errore definiti in GetServiceContractCallPoint:
ServiceFault
ClientFault
CallbackFault
Quando si utilizzano questi track point degli errori, i dati relativi agli errori vengono sempre mantenuti, anche se si opera in uno scenario basato sulle transazioni. L'integrità transazionale viene garantita per tutti i dati rilevati non di errore, dei quali viene inoltre eseguito il rollback come risposta all'errore.
Nota
Questi punti di traccia vengono applicati al percorso di risposta e si applicano solo ai punti di chiamata del contratto di servizio ServiceReply, ClientReply e CallbackReply forniti da GetServiceContractCallPoint.
Esempio di configurazione degli errori
Nell'esempio seguente viene illustrato il rilevamento del messaggio di eccezione in un ServiceFault quando il servizio genera un erroreException nell'evento AuthorizationServiceFault ; in caso contrario, tiene traccia dell'espressione booleana restituita dall'operazione nell'evento AuthorizationServiceReply . AuthorizationServiceReply OnEvent o AuthorizationServiceFault OnEvent viene persistente.
Nota
L'implementazione di questo esempio dimostra che i track point ServiceReply e ServiceFault si escludono a vicenda.
<ic:OnEvent IsBegin ="true" IsEnd="false" Name="AuthorizationServiceReply" Source="ESCreditCardService">
<ic:Filter>
<ic:Expression>
<wcf:Operation Name="GetServiceContractCallPoint"/>
<ic:Operation Name ="Constant">
<ic:Argument>ServiceReply</ic:Argument>
</ic:Operation>
<ic:Operation Name ="Equals"/>
<wcf:Operation Name="GetOperationName" />
<ic:Operation Name="Constant">
<ic:Argument>AuthorizeWithDataContract</ic:Argument>
</ic:Operation>
<ic:Operation Name ="Equals" />
<ic:Operation Name ="And" />
</ic:Expression>
</ic:Filter>
<ic:CorrelationID>
<ic:Expression>
<wcf:Operation Name="AutoGenerateCorrelationToken"/>
</ic:Expression>
</ic:CorrelationID>
<ic:Update DataItemName="Status" Type="NVARCHAR">
<ic:Expression>
<ic:Operation Name="Constant">
<ic:Argument>Success</ic:Argument>
</ic:Operation>
</ic:Expression>
</ic:Update>
<ic:Update DataItemName="Result" Type="NVARCHAR">
<ic:Expression>
<wcf:Operation Name ="XPath">
<wcf:Argument>//s:Body/ccservice:*/ccservice:AuthorizeWithDataContractResult</wcf:Argument>
</wcf:Operation>
</ic:Expression>
</ic:Update>
<ic:Update DataItemName ="Service Call Date" Type ="DATETIME">
<ic:Expression>
<wcf:Operation Name ="GetContextProperty">
<wcf:Argument>EventTime</wcf:Argument>
</wcf:Operation>
</ic:Expression>
</ic:Update>
</ic:OnEvent>
<ic:OnEvent IsBegin ="true" IsEnd="false" Name="AuthorizationServiceFault" Source="ESCreditCardService">
<ic:Filter>
<ic:Expression>
<wcf:Operation Name="GetServiceContractCallPoint"/>
<ic:Operation Name ="Constant">
<ic:Argument>ServiceFault</ic:Argument>
</ic:Operation>
<ic:Operation Name ="Equals"/>
<wcf:Operation Name="GetOperationName" />
<ic:Operation Name="Constant">
<ic:Argument>AuthorizeWithDataContract</ic:Argument>
</ic:Operation>
<ic:Operation Name ="Equals" />
<ic:Operation Name ="And" />
</ic:Expression>
</ic:Filter>
<ic:CorrelationID>
<ic:Expression>
<wcf:Operation Name="AutoGenerateCorrelationToken"/>
</ic:Expression>
</ic:CorrelationID>
<ic:Update DataItemName="Status" Type="NVARCHAR">
<ic:Expression>
<ic:Operation Name="Constant">
<ic:Argument>Fault</ic:Argument>
</ic:Operation>
</ic:Expression>
</ic:Update>
<ic:Update DataItemName="Source" Type="NVARCHAR">
<ic:Expression>
<wcf:Operation Name ="XPath">
<wcf:Argument>//s:Body/Fault/Reason/Text</wcf:Argument>
</wcf:Operation>
</ic:Expression>
</ic:Update>
<ic:Update DataItemName ="Service Call Date" Type ="DATETIME">
<ic:Expression>
<wcf:Operation Name ="GetContextProperty">
<wcf:Argument>EventTime</wcf:Argument>
</wcf:Operation>
</ic:Expression>
</ic:Update>
</ic:OnEvent>
Vedere anche
Configurazione dell'adapter WCF per l'intercettazione dei dati BAM