共用方式為


使用錯誤處理

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

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

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

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

  • 服務錯誤

  • 客戶錯誤

  • 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 數據