共用方式為


處理程式碼中的意外

 

發行︰ 2017年1月

適用於: Dynamics 365 (online)、Dynamics 365 (on-premises)、Dynamics CRM 2016、Dynamics CRM Online

您可以使用可以自 Microsoft Dynamics 365 Web 服務方法呼叫傳回的一些例外。 您的應用程式設計必須捉住並正確地處理這些例外。 在 Microsoft Dynamics 365 SDK 中,所有 Web 服務方法呼叫都使用通訊管道通往使用 Windows Communication Foundation (WCF) 技術的伺服器。 用 WCF 時,從管道傳回的例外稱為劣勢

本主題內容

一般例外和劣勢

商務規則的自訂錯誤

額外關於例外的其他資訊

一般例外和劣勢

下列程式碼用於大多數的 Microsoft Dynamics 365 SDK 範例。 它會標記應用程式設計要處理的一般劣勢和例外。


catch (FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault> ex)
{
    Console.WriteLine("The application terminated with an error.");
    Console.WriteLine("Timestamp: {0}", ex.Detail.Timestamp);
    Console.WriteLine("Code: {0}", ex.Detail.ErrorCode);
    Console.WriteLine("Message: {0}", ex.Detail.Message);
    Console.WriteLine("Inner Fault: {0}",
        null == ex.Detail.InnerFault ? "No Inner Fault" : "Has Inner Fault");
}
catch (System.TimeoutException ex)
{
    Console.WriteLine("The application terminated with an error.");
    Console.WriteLine("Message: {0}", ex.Message);
    Console.WriteLine("Stack Trace: {0}", ex.StackTrace);
    Console.WriteLine("Inner Fault: {0}",
        null == ex.InnerException.Message ? "No Inner Fault" : ex.InnerException.Message);
}
catch (System.Exception ex)
{
    Console.WriteLine("The application terminated with an error.");
    Console.WriteLine(ex.Message);

    // Display the details of the inner exception.
    if (ex.InnerException != null)
    {
        Console.WriteLine(ex.InnerException.Message);

        FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault> fe = ex.InnerException
            as FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>;
        if (fe != null)
        {
            Console.WriteLine("Timestamp: {0}", fe.Detail.Timestamp);
            Console.WriteLine("Code: {0}", fe.Detail.ErrorCode);
            Console.WriteLine("Message: {0}", fe.Detail.Message);
            Console.WriteLine("Trace: {0}", fe.Detail.TraceText);
            Console.WriteLine("Inner Fault: {0}",
                null == fe.Detail.InnerFault ? "No Inner Fault" : "Has Inner Fault");
        }
    }
}

注意

如果要存取 Discovery Web Servcice,您的程式碼應該攔截 DiscoveryServiceFault 而不是以上顯示的 OrganizationServiceFault 錯誤。

除了這些例外和劣勢之外,您的程式碼必須處理下列例外:

在連線至 Microsoft Dynamics 365 (線上) 時,如果您使用有效 Microsoft 帳號 且您的帳戶未與任何 Microsoft Dynamics 365 (線上) 組織建立關聯,可能會擲回 SecurityAccessDeniedException 例外。 如果您的 Microsoft 帳號 不是有效的或驗證失敗,可能會擲回 MessageSecurityException

商務規則的自訂錯誤

在 Microsoft Dynamics 365 和 Microsoft Dynamics 365 (線上),自訂員可以建立在伺服器評估的商務規則。 自訂員可以根據商務規則中設定的條件來擲回錯誤訊息。 開發人員應該在其程式碼務必包括健全錯誤處理,以攔截和處理這些例外。

下列追蹤記錄範例是在其中一個錯誤從名為「Name of Entity Scope Business Rule returning Error」的商務規則傳回時產生的,而錯誤訊息是「custom error message」。

Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: custom error messageDetail: 
<OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://schemas.microsoft.com/xrm/2011/Contracts">
  <ErrorCode>-2147220891</ErrorCode>
  <ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic">
    <KeyValuePairOfstringanyType>
      <d2p1:key>OperationStatus</d2p1:key>
      <d2p1:value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:string">0</d2p1:value>
    </KeyValuePairOfstringanyType>
    <KeyValuePairOfstringanyType>
      <d2p1:key>SubErrorCode</d2p1:key>
      <d2p1:value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:string">-2146233088</d2p1:value>
    </KeyValuePairOfstringanyType>
  </ErrorDetails>
  <Message>custom error message</Message>
  <Timestamp>2014-09-04T17:43:16.8197965Z</Timestamp>
  <InnerFault i:nil="true" />
  <TraceText>

[Microsoft.Crm.ObjectModel: Microsoft.Crm.ObjectModel.SyncWorkflowExecutionPlugin]
[cf6a25a9-5a34-e411-80b9-00155dd8c20f: ]
Starting sync workflow 'Name of Entity Scope Business Rule returning Error', Id: c76a25a9-5a34-e411-80b9-00155dd8c20f
Entering ConditionStep1_step: 
Entering SetMessage_step: 
Sync workflow 'Name of Entity Scope Business Rule returning Error' terminated with error 'custom error message'

</TraceText>
</OrganizationServiceFault>

其他資訊:TechNet:建立和編輯商務規則

額外關於例外的其他資訊

當包含敏感性資訊 (使用者無權檢視) 的遺漏意外被捨去時,例外中的敏感性資訊會被隱藏 (使用者看不到),且會提供參照數字。 此參考數字參照相關伺服器事件項目與伺服器追蹤選項。 系統管理員可以查詢這些選項並找到有關例外的詳細資訊。

另請參閱

疑難排解和錯誤處理
疑難排解提示
Web service error codes
在外掛程式中處理例外
.NET Framework 開發人員中心

Microsoft Dynamics 365

© 2017 Microsoft. 著作權所有,並保留一切權利。 著作權