處理程式碼中的意外
發佈日期: 2016年11月
適用對象: Dynamics CRM 2015
您可以使用可以自 Microsoft Dynamics 365 Web 服務方法呼叫傳回的一些例外。 您的應用程式設計必須捉住並正確地處理這些例外。 在 Microsoft Dynamics CRM SDK 中,所有 Web 服務方法呼叫都使用通訊管道通往使用 Windows Communication Foundation (WCF) 技術的伺服器。 用 WCF 時,從管道傳回的例外稱為劣勢。
本主題內容
一般例外和劣勢
商務規則的自訂錯誤
額外關於例外的其他資訊
一般例外和劣勢
下列程式碼用於大多數的 Microsoft Dynamics CRM 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 CRM Online 時,如果您使用有效 Microsoft 帳號 且您的帳戶未與任何 Microsoft Dynamics CRM Online 組織建立關聯,可能會擲回 SecurityAccessDeniedException 例外。 如果您的 Microsoft 帳號 不是有效的或驗證失敗,可能會擲回 MessageSecurityException。
商務規則的自訂錯誤
在 Microsoft Dynamics CRM 2015 和 Microsoft Dynamics CRM Online,自訂員可以建立在伺服器評估的商務規則。 自訂員可以根據商務規則中設定的條件來擲回錯誤訊息。 開發人員應該在其程式碼務必包括健全錯誤處理,以攔截和處理這些例外。
下列追蹤記錄範例是在其中一個錯誤從名為「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 開發人員中心
© 2017 Microsoft. 著作權所有,並保留一切權利。 著作權