내보내기(0) 인쇄
모두 확장

부록: 메시징 예외

업데이트 날짜: 2014년 4월

이 섹션에서는 Microsoft Azure 서비스 버스 메시징 API를 통해 생성되는 다양한 예외에 대해 소개합니다. 이 참조는 변경될 수 있으므로 이후 업데이트된 내용이 있는지 다시 확인하시기 바랍니다.

메시징 API는 다음 범주에 속할 수 있는 예외를 생성합니다. 아래에서는 예외를 해결하기 위해 수행할 수 있는 관련 작업이 예외와 함께 제공됩니다.

  1. 사용자 코드 오류(ArgumentException, InvalidOperationException, OperationCanceledException, SerializationException). 일반 작업: 계속하기 전에 코드를 수정합니다.

  2. 설치/구성 오류(MessagingEntityNotFoundException, UnauthorizedAccessException. 일반 작업: 구성을 검토하고 필요한 경우 변경합니다.

  3. 일시적 예외(MessagingException, ServerBusyException, MessagingCommunicationException). 일반 작업: 작업을 다시 시도하거나 사용자에게 알립니다.

  4. 기타 예외(TransactionException, TimeoutException, MessageLockLostException/SessionLockLostException). 일반 작업: 일반적으로는 정리 또는 중단을 수행하기 위해 이러한 예외를 처리하지 않습니다. 이러한 예외는 추적용으로 사용될 수 있습니다.

아래 표에는 메시징 예외 종류 및 해당 원인과 예외에 대해 수행할 수 있는 권장 작업이 나와 있습니다.

 

예외 종류 설명/원인/예제 권장 작업 자동/즉시 다시 시도 참고 사항

TimeoutException

서버가 OperationTimeout을 통해 제어되는 지정된 시간 이내에 요청된 작업에 응답하지 않았습니다. 서버에서 요청된 작업을 완료했을 수 있으며, 네트워크 또는 기타 인프라 지연으로 인해 이러한 현상이 발생할 수 있습니다.

시스템 상태에 일관성이 있는지 확인하고 필요한 경우 요청을 다시 시도합니다.

다시 시도하면 문제가 해결되는 경우가 있습니다. 코드에 다시 시도 논리를 추가해 보십시오.

InvalidOperationException

요청된 사용자 작업이 서버 또는 서비스 내에서 허용되지 않습니다. 자세한 내용은 예외 메시지를 참조하십시오. 예를 들어 ReceiveAndDelete 모드에서 메시지가 수신되면 Complete가 이 예외를 생성합니다.

코드와 설명서를 확인합니다. 요청된 작업이 유효한지 확인합니다.

다시 시도를 통해서는 문제가 해결되지 않습니다.

OperationCanceledException

이미 닫혔거나 중단되었거나 삭제된 개체에 대해 작업을 호출하려고 했습니다. 드물지만 주변 트랜잭션이 이미 삭제된 경우가 있습니다.

삭제된 개체에 대한 작업이 호출되지 않는지 코드를 확인합니다.

다시 시도를 통해서는 문제가 해결되지 않습니다.

UnauthorizedAccessException

TokenProvider 개체가 토큰을 가져올 수 없거나, 토큰이 잘못되었거나, 작업 수행에 필요한 클레임이 토큰에 포함되어 있지 않습니다.

토큰 공급자가 올바른 값을 사용하여 만들어지는지 확인합니다. 액세스 제어 서비스의 구성을 확인합니다.

다시 시도하면 문제가 해결되는 경우가 있습니다. 코드에 다시 시도 논리를 추가해 보십시오.

ArgumentException

ArgumentNullException

ArgumentOutOfRangeException

  • 메서드에 제공된 인수 하나 이상이 잘못되었습니다.

  • NamespaceManager 또는 Create에 제공된 URI가 경로 세그먼트를 포함합니다.

  • NamespaceManager 또는 Create에 제공된 URI 스키마가 잘못되었습니다.

  • 속성 값이 32KB보다 큽니다.

인수가 올바른지 호출 코드를 확인합니다.

다시 시도를 통해서는 문제가 해결되지 않습니다.

MessagingEntityNotFoundException

작업과 연결된 엔터티가 없거나 삭제되었습니다.

엔터티가 있는지 확인합니다.

다시 시도를 통해서는 문제가 해결되지 않습니다.

MessageNotFoundException

특정 시퀀스 번호를 가진 메시지를 수신하려고 하지만 해당 메시지가 없습니다.

이미 수신된 메시지가 아닌지 확인합니다. 배달 못한 메시지인지 확인하려면 배달 못한 편지 큐를 확인하십시오.

다시 시도를 통해서는 문제가 해결되지 않습니다.

MessagingCommunicationException

클라이언트가 Service Bus에 대한 연결을 설정할 수 없습니다.

제공된 호스트 이름이 올바르며 호스트에 연결할 수 있는지 확인합니다.

일시적인 연결 문제가 발생한 경우에는 다시 시도를 통해 문제가 해결될 수 있습니다.

ServerBusyException

서비스가 현재 요청을 처리할 수 없습니다.

클라이언트는 잠시 동안 기다렸다가 작업을 다시 시도할 수 있습니다.

일정 시간 이후에 클라이언트가 다시 시도할 수 있습니다. 다시 시도했을 때 다른 예외가 발생하면 해당 예외의 다시 시도 동작을 확인하십시오.

MessageLockLostException

메시지와 연결된 잠금 토큰이 만료되었거나 잠금 토큰을 찾을 수 없습니다.

메시지를 삭제합니다.

다시 시도를 통해서는 문제가 해결되지 않습니다.

SessionLockLostException

해당 세션과 연결된 잠금이 손실되었습니다.

MessageSession 개체를 중단합니다.

다시 시도를 통해서는 문제가 해결되지 않습니다.

MessagingException

다음과 같은 경우 발생할 수 있는 일반 메시징 예외입니다.

  • 항목 등의 다른 엔터티 유형에 속하는 이름이나 경로를 사용하여 QueueClient를 만들려고 했습니다.

  • 256KB보다 큰 메시지를 보내려고 했습니다.

  • 요청을 처리하는 동안 서버 또는 서비스에서 오류가 발생했습니다. 자세한 내용은 예외 메시지를 참조하십시오. 이 경우 일반적으로 일시적 예외입니다.

  • 메시지 본문에 직렬화할 수 있는 개체만 사용되는지 코드를 확인하거나, 사용자 지정 직렬화기를 사용합니다.

  • 설명서에서 지원되는 속성 값 형식을 확인하고 지원되는 형식만 사용합니다.

  • IsTransient 속성을 확인하십시오. true이면 작업을 다시 시도할 수 있습니다.

다시 시도 동작은 정의되지 않으며 문제 해결에 도움이 되지 않습니다.

MessagingEntityAlreadyExistsException

해당 서비스 네임스페이스의 다른 엔터티에서 이미 사용된 이름으로 엔터티를 만들려고 합니다.

기존 엔터티를 삭제하거나 다른 이름으로 엔터티를 만듭니다.

다시 시도를 통해서는 문제가 해결되지 않습니다.

QuotaExceededException

메시징 엔터티의 크기가 허용 가능한 최대 크기에 도달했습니다.

엔터티나 하위 큐로부터 메시지를 수신하여 엔터티 내에 공간을 만듭니다.

그 사이에 메시지가 제거된 경우 다시 시도하면 문제가 해결될 수 있습니다.

RuleActionException

잘못된 규칙 동작을 만들려는 경우 Service Bus에서 이 예외를 반환합니다. 이 메시지에 대한 규칙 동작을 처리할 때 오류가 발생하면 Service Bus는 배달 못한 메시지에 이 예외를 첨부합니다.

규칙 동작을 확인하여 바로잡습니다.

다시 시도를 통해서는 문제가 해결되지 않습니다.

FilterException

잘못된 필터를 만들려는 경우 Service Bus에서 이 예외를 반환합니다. 이 메시지에 대한 필터를 처리할 때 오류가 발생하면 Service Bus는 배달 못한 메시지에 이 예외를 첨부합니다.

필터를 확인하여 바로잡습니다.

다시 시도를 통해서는 문제가 해결되지 않습니다.

SessionCannotBeLockedException

특정 ID의 세션을 받아들이려고 하지만 해당 세션이 현재 다른 클라이언트에 의해 잠겨 있습니다.

다른 클라이언트가 해당 세션을 잠금 해제했는지 확인합니다.

그 사이에 세션이 릴리스된 경우 다시 시도하면 문제가 해결될 수 있습니다.

TransactionSizeExceededException

트랜잭션의 작업이 너무 많습니다.

이 트랜잭션에 포함된 작업 수를 줄입니다.

다시 시도를 통해서는 문제가 해결되지 않습니다.

MessagingEntityDisabledException

사용하지 않도록 설정된 엔터티에 대해 런타임 작업을 요청합니다.

해당 엔터티를 활성화합니다.

그 사이에 엔터티가 활성화된 경우 다시 시도하면 문제가 해결될 수 있습니다.

NoMatchingSubscriptionException

사전 필터링 기능을 사용하지만 일치하는 필터가 없는 항목에 메시지를 보낼 경우 Service Bus에서 이 예외를 반환합니다.

일치하는 필터가 하나 이상 있어야 합니다.

다시 시도를 통해서는 문제가 해결되지 않습니다.

MessageSizeExceededException

메시지 페이로드가 256K 제한을 초과합니다. 256K 제한은 전체 메시지 크기로, 시스템 속성 및 .NET 오버헤드를 포함할 수 있습니다.

메시지 페이로드의 크기를 줄인 다음 작업을 다시 시도합니다.

다시 시도를 통해서는 문제가 해결되지 않습니다.

TransactionException

주변 트랜잭션(Current)이 잘못되었습니다. 해당 트랜잭션이 완료되었거나 중단되었을 수 있습니다. 내부 예외에서 추가 정보가 제공될 수 있습니다.

다시 시도를 통해서는 문제가 해결되지 않습니다.

TransactionInDoubtException

확실하지 않은 트랜잭션에 대해 작업을 시도했거나, 트랜잭션을 커밋하려고 하여 트랜잭션이 확실하지 않은 상태가 되었습니다.

트랜잭션이 이미 커밋되었을 수 있으므로 응용 프로그램에서 이 예외를 특수한 사례로 처리해야 합니다.

표시:
© 2014 Microsoft