Condividi tramite


Gestire le eccezioni nel codice

 

Data di pubblicazione: gennaio 2017

Si applica a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

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 365 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 365 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 365 (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 365 (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 365 e Microsoft Dynamics 365 (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

Microsoft Dynamics 365

© 2017 Microsoft. Tutti i diritti sono riservati. Copyright