다음을 통해 공유


Advanced Error Handling

이 샘플에서는 WCF(Windows Communication Foundation) 라우팅 서비스를 보여 줍니다. 라우팅 서비스는 응용 프로그램에 내용 기반 라우터를 손쉽게 포함할 수 있게 해 주는 WCF 구성 요소입니다. 이 샘플에서는 라우팅 서비스가 트랜잭션과 멀티캐스트 같은 보다 복잡한 다른 메시징 개념을 사용하여 오류에서 적절하게 복구하는 방법을 보여 줍니다.

Ee667251.Important(ko-kr,VS.100).gif 참고:
컴퓨터에 이 샘플이 이미 설치되어 있을 수도 있습니다. 계속하기 전에 다음(기본) 디렉터리를 확인하십시오.

<InstallDrive>:\WF_WCF_Samples

이 디렉터리가 없으면 Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4로 이동하여 WCF(Windows Communication Foundation) 및 WF 샘플을 모두 다운로드하십시오. 이 샘플은 다음 디렉터리에 있습니다.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\RoutingServices\AdvancedErrorHandling

샘플 세부 정보

이 샘플에서 라우팅 서비스는 MSMQ 큐에서 메시지를 읽고 이 메시지를 두 개의 큐 목록에 멀티캐스트하도록 구성되어 있습니다. 한 목록은 서비스 큐에 사용되고 다른 목록은 로깅 큐에 사용됩니다.

기본적으로 라우팅 서비스에서 사용하도록 구성된 MSMQ 바인딩은 트랜잭션 사용을 지원하므로 라우팅 서비스에서는 메시지가 성공적으로 라우트되었음을 인바운드 큐(InQ)에 보고하기 전에 메시지가 트랜잭션 메시지이며 각 목록의 하나 이상의 큐에서 받은 메시지인지를 확인합니다. 따라서 서비스 큐 또는 로깅 큐를 모두 사용할 수 없는 경우 라우팅 서비스에서는 메시지를 라우트할 수 없으므로 인바운드 큐에서 적절한 작업을 수행해야 함을 보고합니다. 이 작업에는 메시지를 배달 못한 시스템 큐로 이동하는 작업이 포함됩니다.

이 샘플을 사용하려면

  1. Ee667251.Important(ko-kr,VS.100).gif 참고:
    이 샘플을 실행하기 전에 MSMQ를 설치합니다. MSMQ가 설치되어 있지 않은 경우 이 샘플을 실행하면 예외 메시지가 반환됩니다. MSMQ 설치 지침은 메시지 큐(MSMQ) 설치에 있습니다.

    Visual Studio 2010에서 AdvancedErrorHandling.sln을 엽니다.

  2. Visual Studio에서 F5 또는 F6 키를 누릅니다.

    1. F6 키를 사용하여 응용 프로그램을 빌드하는 경우에는 ./RoutingService/bin/debug/RoutingService.exe에서 응용 프로그램을 시작해야 합니다.
  3. 콘솔 창에서 Enter 키를 눌러 클라이언트를 시작합니다.

  4. 클라이언트는 각 사례마다 큐에 대한 통계를 다르게 반환합니다.

    1. 다음은 사례 1(오류 없음)에 대해 반환되는 출력입니다.

      The inbound queue has 0 messages.
      The primary service queue has 1 messages.
      The backup service queue has 0 messages.
      The primary logging queue has 1 messages.
      The backup logging queue has 0 messages.
      Press <Enter> to continue

    2. 다음은 사례 3(기본 서비스 및 로깅 큐 오류)에 대해 반환되는 출력입니다.

      The inbound queue has 0 messages. 
      The primary service queue does not exist.
      The backup service queue has 1 messages.
      The primary logging queue does not exist.
      The backup logging queue has 1 messages.
      Press <ENTER> to continue.

    3. 다음은 사례 4(기본 서비스 큐와 기본 및 백업 로깅 큐 오류)에 대해 반환되는 출력입니다.

      The inbound queue has 0 messages. 
      The primary service queue does not exist.
      The backup service queue has 0 messages.
      The primary logging queue does not exist.
      The backup logging queue does not exist.
      The System Dead Letter queue has 1 messages.
      Press <ENTER> to Quit.

    4. 다음은 사례 2(기본 서비스 큐 오류)에 대해 반환되는 출력입니다.

      The inbound queue has 0 messages. 
      The primary service queue does not exist.
      The backup service queue has 1 messages.
      The primary logging queue has 1 messages.
      The backup logging queue has 0 messages.
      Press <ENTER> to continue.

코드 또는 App.config를 통해 구성 가능

이 샘플은 App.config 파일을 사용하여 라우터 동작을 정의하도록 구성되어 있습니다. RoutingService\App.config 파일이 인식되지 않도록 이 파일의 이름을 다른 이름으로 바꾸고 RoutingService\Program.cs의 configDriven 필드 값을 false로 변경하여 코드에 정의된 구성을 사용할 수도 있습니다. 어떤 방법을 사용하든 라우터 동작은 동일합니다.

시나리오

이 샘플에서는 라우팅 서비스에서 트랜잭션 및 받기 컨텍스트와 같은 고급 메시징 기능을 처리하고 이러한 기능을 올바른 처리 오류 처리 시나리오의 일부로 사용하는 방법을 보여 줍니다.

실제 시나리오

Contoso에서는 라우팅 서비스를 통한 트랜잭션 수신을 사용하여 오류가 발생하더라도 필요한 모든 서비스에서 정보를 받을 수 있도록 하려고 합니다. 또한 메시지를 배달할 수 없으면 오류 처리 논리가 사용되는 경우라도 오류가 올바르게 자동 처리되고 보고되도록 하려고 합니다. 이를 위해 필요한 경우 라우팅 서비스가 특정 끝점으로 장애 조치되도록 구성하며, 라우팅 서비스에서는 트랜잭션/수신 컨텍스트의 작성, 완료 및 롤백/중단을 포함하여 오류 상황을 처리합니다.