다음을 통해 공유


코드에서 예외 처리

 

게시 날짜: 2017년 1월

적용 대상: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Microsoft Dynamics 365 웹 서비스 메서드 호출에서 반환될 수 있는 예외가 여러 가지 있습니다. 응용 프로그램 디자인에서 찾아내고 이러한 예외를 적절하게 처리해야 합니다.Microsoft Dynamics 365 SDK에서 모든 웹 서비스 메서드 호출은 WCF(Windows Communication Foundation) 기술을 기반으로 하는 서버에 대한 통신 채널을 사용합니다. WCF 용어로 채널에서 반환된 예외를 오류라고 합니다.

이 항목의 내용

일반적인 예외 및 오류

비즈니스 규칙의 사용자 지정 오류

예외에 대한 추가 정보

일반적인 예외 및 오류

다음 코드는 대부분의 Microsoft Dynamics 365 SDK 샘플에 사용됩니다. 응용 프로그램 디자인에서 처리해야 하는 일반적인 오류와 예외를 강조 표시합니다.


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

참고

검색 웹 서비스에 액세스할 경우 코드는 앞에서 표시된 OrganizationServiceFault 오류 대신DiscoveryServiceFault를 찾아내야 합니다.

이러한 예외 및 오류뿐만 아니라 코드는 다음 예외를 처리해야 합니다.

Microsoft Dynamics 365(온라인)에 연결할 때 유효한 Microsoft 계정를 사용하지만 계정이 Microsoft Dynamics 365(온라인) 조직에 연결되어 있지 않을 경우 SecurityAccessDeniedException 예외가 발생할 수 있습니다.Microsoft 계정가 유효하지 않거나 인증 시패가 있는 경우 MessageSecurityException가 throw될 수 있습니다.

비즈니스 규칙의 사용자 지정 오류

Microsoft Dynamics 365 및 Microsoft Dynamics 365(온라인)를 사용하여 사용자 지정자는 서버에서 평가되는 비즈니스 규칙을 만들 수 있습니다. 사용자 지정자는 비즈니스 규칙에서 설정한 조건에 따라 오류 메시지를 throw할 수 있습니다. 개발자는 이러한 예외를 찾아내고 처리하기 위해 코드에 강력한 오류 처리 기능을 포함시켜야 합니다.

다음은 이러한 오류 중 하나가 “Name of Entity Scope Business Rule returning Error”라는 비즈니스 규칙에서 반환되고 오류 메시지가 “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>

추가 정보:TechNet: 비지니스 규칙 만들기 및 편집.

예외에 대한 추가 정보

사용자에게 볼 수 있는 권한이 없는 중요한 정보가 포함된 찾아내지 못한 예외가 발생하면 예외의 중요한 정보는 사용자에게 숨겨지고 참조 번호가 제공됩니다. 이 참조 번호는 관련 서버 이벤트 로그 항목과 서버 추적 항목을 참조합니다. 시스템 관리자는 해당 항목을 찾아 예외에 대한 자세한 정보를 찾을 수 있습니다.

참고 항목

문제 해결 및 오류 처리
문제 해결 팁
Web service error codes
플러그 인의 예외 처리
.NET Framework 개발자 센터

Microsoft Dynamics 365

© 2017 Microsoft. All rights reserved. 저작권 정보