Windows Communication Foundation (WCF) のエラー処理において、 FaultException(またはそのサブタイプ)がスローされるか、FaultContract が実装されている場合でなければ、例外メッセージはクライアントに返されません。 そのため、これらのシナリオでは、エラー メッセージ自体からのデータのみを追跡できます。 コールバック実装の例外は、ServerFault と ClientFault の両方のトラックポイントに対するエラーメッセージとして自動的に返されます。 ただし、常に汎用メッセージを含む汎用エラーが返されます。 WCF エラー コントラクトの詳細については、「 https://go.microsoft.com/fwlink/?LinkId=83132」を参照してください。
障害追跡ポイントを使用して、定数とコンテキスト プロパティを追跡することもできます。
IncludeExceptionDetailInFaults 属性を使用してエラーで例外の詳細が返された場合は、XPath を使用して実際の例外メッセージを抽出します。
エラー処理は、 GetServiceContractCallPoint で定義されている障害追跡ポイントによって提供されます。
サービス障害
クライアントエラー
コールバックエラー
これらの障害追跡ポイントを使用する場合、トランザクション ベースのシナリオで動作している場合でも、障害データは常に保持されます。 トランザクションの整合性は、障害追跡されていないすべてのデータで維持され、非障害追跡データは障害への応答としてロールバックされます。
注
これらのトラック ポイントは応答パスに適用され、 GetServiceContractCallPoint によって提供される ServiceReply、ClientReply、CallbackReply サービス コントラクト呼び出しポイントにのみ適用されます。
故障設定サンプル
次の例は、サービスが AuthorizationServiceFault イベントで FaultException をスローしたときに ServiceFault で例外メッセージを追跡する方法を示しています。それ以外の場合は、AuthorizationServiceReply イベントの操作によって返されるブール式を追跡します。 AuthorizationServiceReply OnEvent または AuthorizationServiceFault OnEvent のいずれかが永続化されます。
注
このサンプルの実装は、ServiceReply と ServiceFault トラックポイントの相互排他性を示しています。
<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>