Aaron H. Kim Fearless Integration Maniac

Orchestration ID가져오기

2007-07-03
Aaron Kim

Orchestration ID를 가져오는 방법에 대해 말씀드리기 전에.. Orchestration ID를 가져와야 하는 시나리오에 대해 생각해봅시다.

여러분은 Debugging시 DebugView 를 사용하시나요? 저는 Debugging의 원활함을 위해 모든 프로젝트에서 Debugview 를 사용합니다.(현재 Microsoft사에 의해 인수됨.)

다음은 OrchestrationID를 가져와야 하는 설정을 위해 만든 Orchestration Sample입니다.
Debug나 Trace 메시지 출력시 Expression Shape 안에서 다음과 같이 코딩해주시면 됩니다.

System.Diagnostics.Trace.WriteLine(“Trace Msg”);
System.Diagnostics.Debug.WriteLine(“Debug Msg”);

  1. dummy 메시지를 수신한다. (단순히 Orchestration을 Instantiate하는 역할)
  2. 오케스트레이션이 시작되었음을 로그를 남긴다.
  3. 30초를 기다린다. (동시에 여러 인스턴스가 실행되도록)
  4. 오케스트레이션이 끝났음을 알리는 로그를 남긴다.

그리고 다음은 DebugView를 통해 모니터링한 결과입니다.

[OrcSample]은 같은 서버에서 돌고 있는 다른 Orchestration이 출력하는 메시지와 구분을 위해 넣은 해당 Orchestration명입니다.

그다음에 나오는 guid가 바로 OrchestrationID인데 만약 이 OrchestrationID를 구분해주지 않는다면 같은 Orchestration인데 서로 다른 Instance들이 출력하는 메시지들과는 구분할 길이 없어집니다.

자 그럼 OrchestrationID는 어떻게 가져올까요?

Microsoft.XLANGs.Core.Service.RootService.ServiceId.ToString() 이건 제가 확인한 바로 오케스트레이션 instance ID가 아니라, 오케스트레이션 자체의 ID를 가져오는 듯 합니다. 같은 오케스트레이션의 서로 다른 인스턴스에서 같은 ID를 생성하는 것을 확인할 수 있었습니다.

또는
OrcName(Microsoft.XLANGs.BaseTypes.InstanceId)

와 같이 가져오면 됩니다.

만약 Orchestration이 long-running일 때 Debugging을 위해 사용하시면 좋을 것입니다.


Similar Posts

Comments