Del via


Håndtere undtagelser i din kode

 

Udgivet: januar 2017

Gælder for: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Der er en række undtagelser, der kan returneres fra et metodekald til en Microsoft Dynamics 365-webtjeneste. Dit programdesign skal opfange og korrekt håndtere disse undtagelser. I Microsoft Dynamics 365-SDK bruger alle metodekald til webtjenester en kommunikationskanal til serveren, som er baseret på WCF (Windows Communication Foundation)-teknologien. I WCF-begreber, kaldes undtagelser, der er returneret fra kanalen, fejl.

Dette emne indeholder

Almindelige undtagelser og fejl

Brugerdefinerede fejlmeddelelser fra forretningsregler

Flere oplysninger om undtagelser

Almindelige undtagelser og fejl

Følgende kode bruges i de fleste Microsoft Dynamics 365-SDK-eksempler. Den fremhæver de almindelige fejl og undtagelser, der skal håndteres af dit programdesign.


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

Bemærk

Hvis du har adgang til registreringswebtjenesten, skal koden opfange DiscoveryServiceFault i stedet for fejlen OrganizationServiceFault, der er vist tidligere.

Ud over disse undtagelser og fejl, skal koden kunne håndtere følgende undtagelser:

Når du opretter forbindelse til Microsoft Dynamics 365 (online), kan der opstå en SecurityAccessDeniedException-undtagelse, hvis du bruger et gyldigt Microsoft-konto, og din konto ikke er tilknyttet en Microsoft Dynamics 365 (online)-organisation. Der kan opstå en MessageSecurityException kan være opstået, hvis dit Microsoft-konto er ikke gyldigt, eller der opstod en godkendelsesfejl.

Brugerdefinerede fejlmeddelelser fra forretningsregler

Med Microsoft Dynamics 365 og Microsoft Dynamics 365 (online) kan systemtilpassere oprette forretningsregler, der evalueres på serveren. Systemtilpassere kan udløse fejlmeddelelser baseret på betingelser, der er angivet i forretningsreglen. Udviklere skal sørge for at medtage robust fejlhåndtering i deres kode for at fange og håndtere disse undtagelser.

Følgende er et eksempel på den sporingslog, der produceres, når en af disse fejl returneres fra en forretningsregel, der hedder "Name of Entity Scope Business Rule returning Error", og fejlmeddelelsen er "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>

Flere oplysninger:TechNet: Oprette og redigere forretningsregler.

Flere oplysninger om undtagelser

Når der opstår en ikke-opfanget undtagelse, der indeholder følsomme oplysninger, som brugeren ikke har tilladelse til at se, skjules de følsomme oplysninger i undtagelsen for brugeren, og der vises et referencenummer. Dette referencenummer henviser til den relaterede serverhændelseslogpost og serversporingspost. En systemadministrator kan søge efter disse poster og få flere oplysninger om undtagelsen.

Se også

Fejlfinding og fejlhåndtering
Tip til fejlfinding
Web service error codes
Håndtering af undtagelser i plug-ins
.NET Framework Developer Center

Microsoft Dynamics 365

© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret