Partager via


Gérer les exceptions dans votre code

Plusieurs exceptions peuvent être retournées à partir d’un appel de méthode du service Web Microsoft Dataverse. La conception de votre application doit intercepter et gérer correctement ces exceptions. Dans les assemblys SDK .NET, tous les appels de méthode du service Web utilisent un canal de communication avec le serveur basé sur la technologie Windows Communication Foundation. En termes WCF, les exceptions retournées par le canal sont appelées défauts.

Exceptions et défauts courants

Le code suivant est utilisé dans la plupart des exemples de services web Dataverse. Il décrit les défauts et exceptions courants que la conception de votre application doit gérer.

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");
        }
    }
}

Notes

Si vous accédez au service Web de découverte, votre code doit intercepter DiscoveryServiceFault au lieu du défaut OrganizationServiceFault indiqué précédemment.

Outre ces exceptions et défauts, votre code doit gérer les exceptions suivantes :

Lors de la connexion à Dataverse, une exception SecurityAccessDeniedException peut être levée si vous utilisez un compte Microsoft valide et que votre compte Windows Live n’est pas associé à une organisation Dataverse. Une exception MessageSecurityException peut être levée si votre compte Microsoft n’est pas valide ou qu’il existe une erreur d’authentification.

Erreurs personnalisées des règles d’entreprise

Avec Dataverse, les personnalisateurs peuvent créer des règles d’entreprise qui sont évaluées sur le serveur. Les personnalisateurs peuvent déclencher des messages d’erreur sur les conditions définies dans la règle métier. Les développeurs doivent être sûrs d’inclure une gestion fiable des erreurs pour attraper et gérer ces exceptions.

Ci-après figure un exemple du journal des traces produit lorsqu’une de ces erreurs est retournée d’une règle métier nommée Nom de l’entité Etendue de la Règle métier renvoyant une erreur et que le message d’erreur est message d’erreur personnalisé.

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="https://www.w3.org/2001/XMLSchema-instance" xmlns="https://schemas.microsoft.com/xrm/2011/Contracts">  
  <ErrorCode>-2147220891</ErrorCode>  
  <ErrorDetails xmlns:d2p1="https://schemas.datacontract.org/2004/07/System.Collections.Generic">  
    <KeyValuePairOfstringanyType>  
      <d2p1:key>OperationStatus</d2p1:key>  
      <d2p1:value xmlns:d4p1="https://www.w3.org/2001/XMLSchema" i:type="d4p1:string">0</d2p1:value>  
    </KeyValuePairOfstringanyType>  
    <KeyValuePairOfstringanyType>  
      <d2p1:key>SubErrorCode</d2p1:key>  
      <d2p1:value xmlns:d4p1="https://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>  

Pour plus d’informations : Créer une règle métier pour une table

Informations supplémentaires sur les exceptions

Lorsqu’une exception non interceptée contenant des informations confidentielles que l’utilisateur n’est pas autorisé à voir est levée, ces informations confidentielles dans l’exception sont masquées à l’utilisateur et un numéro de référence est fourni. Ce numéro de référence fait référence à l’entrée du journal des événements du serveur et à l’entrée de suivi du serveur associées. Un administrateur système peut rechercher ces entrées et trouver des informations supplémentaires sur l’exception.

Voir aussi

Codes d’erreur du service Web
Gérer les exceptions dans les plug-ins
Centre de développement .NET Framework

Notes

Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)

Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).