Gestire le eccezioni nel codice
Data di pubblicazione: novembre 2016
Si applica a: Dynamics CRM 2015
Esistono diverse eccezioni che è possibile restituite da una chiamata al metodo del servizio Web di Microsoft Dynamics 365. Il progetto dell'applicazione deve recuperare e gestire in modo appropriato tali eccezioni. In Microsoft Dynamics CRM SDK, tutte le chiamate del metodo di servizio Web utilizzano un canale di comunicazione con il server in base alla tecnologia Windows Communication Foundation (WCF). Nelle condizioni di WCF, le eccezioni restituite dal canale sono chiamate errori.
In questo argomento
Eccezioni ed errori comuni
Errori personalizzati dalle regole di business
Informazioni aggiuntive relative alle eccezioni
Eccezioni ed errori comuni
Il codice seguente viene utilizzato nella maggior parte degli esempi di Microsoft Dynamics CRM SDK ed evidenzia gli errori e le eccezioni comuni che il progetto dell'applicazione deve gestire.
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");
}
}
}
Nota
Se si sta eseguendo l'accesso al servizio Web di individuazione, il codice dovrebbe rilevare l'errore DiscoveryServiceFault anziché l'errore OrganizationServiceFault indicato in precedenza.
Oltre a queste eccezioni e a questi errori, il codice deve gestire le eccezioni seguenti:
Quando si esegue la connessone a Microsoft Dynamics CRM Online, è possibile che venga generata un'eccezione SecurityAccessDeniedException se si utilizza un Account Microsoft valido e il proprio account non è associato a un'organizzazione Microsoft Dynamics CRM Online. È possibile generare l'eccezione MessageSecurityException se il Account Microsoft non è valido o se si verifica un errore di autenticazione.
Errori personalizzati dalle regole di business
Con Microsoft Dynamics CRM 2015 e Microsoft Dynamics CRM Online, le personalizzazioni possono creare le regole di business valutate nel server. Gli addetti alla personalizzazione possono generare messaggi di errore in base alle condizioni impostate nella regola business. Gli sviluppatori devono essere sicuri di includere la gestione degli errori gravi nel codice per intercettare e gestire tali eccezioni.
Viene di seguito riportato un esempio del registro di traccia prodotto quando uno di questi errori è restituito da una regola di business denominata "Name of Entity Scope Business Rule returning Error" e il messaggio di errore si trova in "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>
Ulteriori informazioni:TechNet: Creare e modificare le regole di business.
Informazioni aggiuntive relative alle eccezioni
Quando viene generata un'eccezione non rilevata contenente le informazioni riservate che l'utente non è autorizzato a visualizzare, le informazioni riservate nell'eccezione vengono nascoste dall'utente e viene specificato un numero di riferimento. Il numero fa riferimento alla voce del registro eventi del server correlata e alla voce di traccia del server. Un amministratore di sistema può cercare tali voci e trovare ulteriori informazioni sull'eccezione.
Vedere anche
Risoluzione dei problemi e gestione degli errori
Suggerimenti per la risoluzione dei problemi
Web service error codes
Gestire le eccezioni nei plug-in
Centro per sviluppatori di .NET Framework
© 2017 Microsoft. Tutti i diritti sono riservati. Copyright