Håndtere undtagelser i din kode
Udgivet: november 2016
Gælder for: Dynamics CRM 2015
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 CRM 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 CRM 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 CRM Online, kan der opstå en SecurityAccessDeniedException-undtagelse, hvis du bruger et gyldigt Microsoft-konto, og din konto ikke er tilknyttet en Microsoft Dynamics CRM 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 CRM 2015 og Microsoft Dynamics CRM 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
© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret