共用方式為


使用錯誤處理

在 Windows Communication Foundation (WCF) 錯誤處理時,除非擲回 FaultException (或子類型) 擲回或實作 FaultContract ,否則不會傳回例外狀況訊息給用戶端。 因此,您只能在這些情況下的錯誤訊息本身追蹤資料。 回呼實作中的例外狀況會自動回復為 ServerFaultClientFault 追蹤點的錯誤訊息。 不過,它一定會傳回具有泛型訊息的泛型錯誤。 如需 WCF 錯誤合約的詳細資訊,請參閱 https://go.microsoft.com/fwlink/?LinkId=83132

您也可以透過錯誤追蹤點來追蹤常數和內容屬性。

如果使用 IncludeExceptionDetailInFaults 屬性在錯誤中傳回例外狀況詳細資料,您可以透過 XPath 擷取實際的例外狀況訊息。

錯誤處理是由 GetServiceContractCallPoint中定義的錯誤追蹤點所提供:

  • ServiceFault

  • ClientFault

  • CallbackFault

    使用這些錯誤追蹤點時,即使是以交易為基礎的實例作業,錯誤資料都會保存下來。 系統會針對所有非錯誤的追蹤資料維護其交易整合性,同時回復非錯誤的追蹤資料來回應該錯誤。

注意

這些追蹤點會套用至回復路徑,並僅適用于 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>

另請參閱

設定 WCF 配接器攔截 BAM 資料