이 페이지가 유용했습니까?
이 콘텐츠에 대한 여러분의 의견은 중요합니다. 의견을 알려주십시오.
추가 의견
1500자 남음
내보내기(0) 인쇄
모두 확장

Service Bus 문제 해결

업데이트 날짜: 2015년 7월

다음 섹션에서는 Microsoft Azure 서비스 버스용 응용 프로그램을 작성할 때 발생할 수 있는 문제와 해결 방법에 대해 설명합니다.

다음 섹션에서는 서비스 버스 응용 프로그램의 문제를 해결하는 방법을 설명합니다.

증상

서비스 버스 응용 프로그램이 배포 패브릭에서는 오류 없이 실행되는데 역할로 서버에 배포하고 나면 작동이 중단됩니다.

원인

서비스 버스 어셈블리는 현재 역할로 플랫폼으로 통합되어 있지 않습니다. 따라서 응용 프로그램은 서버에 없는 어셈블리에 액세스하려고 하게 됩니다.

해결 방법

서비스 버스 어셈블리를 배포 패키지에 추가합니다. 예를 들어 어셈블리를 로컬 복사본으로 설정합니다. 이처럼 어셈블리를 수동으로 업데이트해야 합니다.

증상

끝점을 프로그래밍 방식으로 설정하면 응용 프로그램이 작동하는데 같은 구성 설정을 연결된 App.config 파일에 저장하면 오류가 발생합니다. 응용 프로그램에서 다음 오류가 생성됩니다.

System.Configuration.ConfigurationErrorsException: 구성 바인딩 확장 'system.serviceModel/bindings/netTcpRelayBinding'을 찾을 수 없습니다. 이 바인딩 확장이 system.serviceModel/extensions/bindingExtensions에 제대로 등록되었는지, 맞춤법이 올바른지 확인하십시오.

원인

서비스 버스 어셈블리는 현재 역할로 플랫폼으로 통합되어 있지 않습니다. 로컬 컴퓨터에 역할로 SDK가 설치되어 있으면 Machine.config 파일이 수정되어 NetTcpRelayBinding 등의 여러 WCF(Windows Communication Foundation) 확장이 추가됩니다. 그러면 응용 프로그램이 Machine.config 파일의 netTcpRelayBinding 섹션 등에서 관련 정보를 찾을 수 있습니다. 그러나 역할로 플랫폼에서는 이 작업이 수행되지 않으므로 응용 프로그램이 관련 정보를 찾을 수 없습니다.

해결 방법

구성이 역할로에서 작동하도록 하려면 로컬 Machine.config 파일의 확장을 App.config 파일에 복사합니다. 이렇게 하지 않으면 netTcpRelayBinding 등의 태그가 인식되지 않습니다. 그러나 이 작업을 수행하면 확장이 중복되므로 응용 프로그램이 로컬에서 실행되지 않습니다. 따라서 App.config 파일의 두 가지 버전(로컬에 하나, 역할로용으로 하나)을 유지해야 합니다. 이 특정 작업은 프로그래밍 방식으로 수행하는 것이 좋습니다.

다음 문제 해결 항목에는 서비스 버스에 연결하는 방법에 대한 정보가 포함되어 있습니다. 이 섹션 뒷부분에서 해결 방법을 찾을 수 없으면 다음 가능성 중 하나를 고려해야 할 수 있습니다.

  • 네트워크 추적 실행 - 네트워크의 작동이 중지되었을 수 있습니다. 네트워크 모니터를 사용하여 네트워크 상태를 확인하면 문제를 디버그하는 데 도움이 될 수 있습니다.

증상

클라이언트 응용 프로그램을 사용하여 서비스 버스에 연결하려고 하면 다음 오류가 표시됩니다.

처리되지 않은 예외: System.ServiceModel.EndpointNotFoundException: 끝점을 찾을 수 없습니다. HTTP 포트 80 및 TCP 포트 808을 사용하여 인터넷에 연결할 수 있는지 확인하십시오.

원인

이 오류에는 여러 가지 원인이 있습니다.

해결 방법

  • 호스트가 실행 중인지를 확인합니다. 호스트가 실행되고 있지 않으면 연결할 끝점이 없는 것입니다. 아래의 두 가지 절차 중 하나를 사용하여 서비스를 실행할 수 있습니다.

    1. 디버그 모드 - Visual Studio 솔루션 탐색기에서 서비스 프로젝트를 마우스 오른쪽 단추로 클릭하고 디버그를 클릭한 다음 새 인스턴스 시작을 클릭합니다. 서비스가 시작되고 나면 클라이언트에 대해 이 절차를 반복합니다. 서비스가 이미 실행되고 있더라도 클라이언트를 디버그할 수 있습니다.

    2. 디버그 이외 모드 - 서비스 프로젝트를 시작 프로젝트로 설정합니다. 디버그 메뉴에서 디버깅하지 않고 시작을 클릭합니다. 이렇게 하면 서비스 응용 프로그램을 실행해도 Visual Studio에는 영향을 주지 않습니다. 서비스가 시작되고 나면 클라이언트 프로젝트를 시작 프로젝트로 설정하고 실행합니다.

  • Visual Studio에서 Microsoft.ServiceBus.dll 어셈블리에 대해 로컬 복사 속성을 true로 설정했는지 확인합니다. 클라우드 서버에 Azure SDK가 설치되어 있지 않습니다. 따라서 패키지에 어셈블리를 포함해야 합니다. 이렇게 하지 않으면 작업자 역할이 올바르게 실행되지 않습니다.

  • 실제로 HTTP 포트 80 및 TCP 포트 808을 사용하여 인터넷에 연결할 수 있는지 확인합니다.

증상

응용 프로그램이 서비스 버스에 연결할 수 없으며 대신 다음 오류 메시지를 반환합니다.

"클라이언트가 구성된 제한 시간(00:01:00) 내에 보안 협상을 끝낼 수 없습니다. 현재 협상 레그는 1(00:00:59.9429968)입니다."

원인

인증 자격 증명이 잘못 설정되었을 수 있습니다.

해결 방법

클라이언트를 인증할 수 있는지 확인합니다. 구체적으로는 RelayClientAuthenticationTypeNone으로 설정했는지 확인합니다. 기본적으로 해당 값은 RelayAccessToken입니다. 이 값을 사용하는 경우 공유 암호 등의 인증 클레임을 제공해야 합니다. 그러나 값을 None으로 수동 설정하는 경우 클라이언트는 인증을 제공해서는 안 됩니다.

인증 유형을 설정하지 않은 경우에는 RelayClientAuthenticationType이 기본값인 RelayAccessToken으로 설정되어 있을 가능성이 높습니다. 이 경우에는 인증 클레임이 올바르게 지정되었는지 확인합니다. 자세한 내용은 TechNet의 서비스 버스 연결 보안 및 인증.

증상

서비스 버스에 연결하려고 하면 다음 오류가 표시됩니다.

"메시지에 대한 보안을 확인하는 동안 오류가 발생했습니다."

원인

이 오류의 가능한 원인 중 하나는 로컬 컴퓨터의 UTC 시간이 서비스 버스 서버의 UTC 시간보다 빠른 경우입니다. 예를 들어 로컬 UTC 타임스탬프는 8:06인데 서버 타임스탬프는 8:05일 수 있습니다. 서버는 이러한 차이를 잘못된 타임스탬프로 간주하여 "증상" 섹션에 나와 있는 오류 메시지를 생성합니다.

해결 방법

로컬 컴퓨터의 UTC 시간이 올바른지 확인하고 필요한 경우 수동으로 시간을 몇 분 뒤로 돌려 설정합니다. 서비스 버스에서는 약간 오래된 메시지는 보안 위반으로 간주하지 않으며 먼 이후 시간에서 수신되는 이미지만 보안 위반으로 간주합니다.

증상

서비스가 정상적으로 실행되고 있는데 ATOM 피드에서 서비스를 찾을 수 없습니다.

원인

서비스 레지스트리의 기본 동작이 ATOM 피드를 통해 서비스를 표시하도록 설정되어 있지 않습니다.

해결 방법

방법: 서비스 버스 레지스트리에 서비스 게시의 설명에 따라 끝점을 검색 가능하도록 설정합니다.

표시:
© 2015 Microsoft