处理代码中的异常
发布日期: 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 Service,您的代码应该捕获 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。 保留所有权利。 版权