Uitzonderingen afhandelen in uw code

 

Gepubliceerd: januari 2017

Is van toepassing op: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Er is een aantal uitzonderingen dat kan worden geretourneerd door een aanroep van een Microsoft Dynamics 365-webservicemethode. Uw toepassingsontwerp moet deze uitzonderingen op de juiste wijze afvangen en afhandelen. In de Microsoft Dynamics 365 SDK gebruiken alle aanroepen van webservicemethoden een communicatiekanaal naar de server op basis van de Windows Communication Foundation (WCF)-technologie. In WCF-terminologie worden uitzonderingen die vanuit het kanaal worden geretourneerd, fouten genoemd.

In dit onderwerp

Veelvoorkomende uitzonderingen en fouten

Aangepaste fouten van bedrijfsregels

Aanvullende informatie over uitzonderingen

Veelvoorkomende uitzonderingen en fouten

De volgende code wordt gebruikt in de meeste Microsoft Dynamics 365 SDK-voorbeelden. De code markeert de veel voorkomende fouten en uitzonderingen die het ontwerp van uw toepassingen moet afhandelen.


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

Notitie

Als u toegang hebt tot de Discovery-webservice, moet uw code DiscoveryServiceFault afvangen in plaats van de eerder weergegeven fout OrganizationServiceFault.

Naast deze uitzonderingen en fouten moet uw code de volgende uitzonderingen afhandelen:

Wanneer verbinding wordt gemaakt met Microsoft Dynamics 365 (online), kan een SecurityAccessDeniedException-uitzondering optreden als u een geldige Microsoft-account gebruikt en uw account niet is gekoppeld aan een Microsoft Dynamics 365 (online)-organisatie. Een MessageSecurityException kan optreden als uw Microsoft-account niet geldig is of als zich een verificatiefout heeft voorgedaan.

Aangepaste fouten van bedrijfsregels

Met Microsoft Dynamics 365 en Microsoft Dynamics 365 (online) kunnen aanpassers bedrijfsregels maken die op de server worden geëvalueerd. Systeemaanpassers kunnen foutberichten weergeven op basis van de voorwaarden die in de bedrijfsregel zijn ingesteld. Ontwikkelaars moeten ervoor zorgen dat zijn robuuste foutafhandeling in de code opnemen om deze uitzondering af te vangen en af te handelen.

Hieronder volgt een voorbeeld van het traceerlogboek dat wordt geproduceerd als een van de volgende fouten wordt geretourneerd door een bedrijfsregel genaamd "Name of Entity Scope Business Rule returning Error" en het foutbericht "custom error message" is.

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>

Meer informatie:TechNet: Bedrijfsregels maken en bewerken.

Aanvullende informatie over uitzonderingen

Wanneer een niet-afgevangen uitzondering optreedt die vertrouwelijke informatie bevat die de gebruiker niet mag zien, wordt de vertrouwelijke informatie in de uitzondering verborgen van de gebruiker en wordt een referentienummer verschaft. Dit referentienummer verwijst naar de gerelateerde vermelding in het servergebeurtenislogboek en de servertraceervermelding. Een systeembeheerder kan deze vermeldingen opzoeken en meer informatie vinden over de uitzondering.

Zie ook

Probleemoplossing en foutafhandeling
Tips voor probleemoplossing
Web service error codes
Uitzonderingen in invoegtoepassingen afhandelen
.NET Framework Developer Center

Microsoft Dynamics 365

© 2017 Microsoft. Alle rechten voorbehouden. Auteursrecht