다음을 통해 공유


종단 간 추적 상관 관계를 위한 동작 추적 및 전파

이 항목에서는 디버깅을 지원하기 위해 동작 추적 및 전파를 사용할 수 있는 방법에 대해 설명합니다.

동작 추적 개요

WCF(Windows Communication Foundation)에서는 디버거를 사용하지 않고도 응용 프로그램 문제 해결을 위한 계측 기능을 제공합니다. WCF 진단에는 이벤트, 추적(동작 추적 포함) 및 메시지 로깅이라는 네 개의 구성 요소가 있습니다.

진단 기능 대상 사용자 목적

이벤트

IT 전문가

시스템에서 발생한 오류를 봅니다.

추적

IT 전문가 및 개발자

시스템의 긍정적 이벤트와 부정적 이벤트 둘 다를 자세한 정도의 여러 수준에서 봄으로써 문제를 진단하거나 적절한 동작을 확인합니다.

메시지 로깅

IT 전문가 및 개발자

연결을 통해 전달 및/또는 사용자 코드로 디스패치되는 실제 메시지의 로그를 봄으로써 문제를 진단하거나 적절한 동작을 확인합니다.

동작 추적(추적 기능의 하위 집합)

IT 전문가 및 개발자

오류의 근본 원인을 찾기 위해 추적 상관 관계를 사용합니다.

이 항목에서는 동작 추적에 대해 설명하며, 동작 추적은 오류의 근본 원인을 진단하는 데 도움이 되는 추적 상관 관계를 제공합니다. WCF에서는 동작, 전파 및 전송의 세 가지 상관 관계 메커니즘을 제공합니다.

동작

동작은 실패의 범위를 줄이도록 돕는 처리 단위입니다. 동일한 동작에서 발생하는 오류는 직접적으로 관련됩니다. 예를 들어 메시지 암호 해독이 실패하면 작업이 실패합니다. 작업 실패와 메시지 암호 해독 실패 둘 다에 대한 추적은 동일한 동작에서 나타나며, 암호 해독 오류와 요청 오류 사이의 직접적인 상관 관계를 보여 줍니다. WCF에서는 응용 프로그램 처리를 위해 미리 정의된 동작을 제공합니다. 사용자 추적을 그룹화하기 위해 프로그래밍 방식으로 동작을 정의할 수도 있습니다.

런타임에 동작 추적을 내보내려면 다음 구성 코드에 나타난 것처럼 System.ServiceModel에 대한 ActivityTracing 설정 또는 다른 사용자 지정 추적 소스를 사용합니다.

<source name="System.ServiceModel" switchValue="Verbose,ActivityTracing">

사용 중인 구성 요소 및 특성에 대한 자세한 내용은 추적 구성 항목을 참조하십시오.

WCF 또는 사용자 정의 항목을 비롯하여 모든 추적 소스에 동작 추적을 사용하도록 설정할 수 있습니다.

WCF 처리가 시작되기 전에 사용자 코드(System.Diagnostics 사용)에서 동작을 정의할 수 있습니다. 이러한 동작을 앰비언트 동작이라고 합니다.

Service Trace Viewer Tool에서 동작과 해당 유틸리티를 볼 수 있습니다. 이 도구는 추적을 사용하여 동작을 기준으로 이들을 정렬합니다. ActivityTracing을 사용하도록 설정하면 추적 전송도 볼 수 있습니다. 추적 전송은 여러 가지 동작이 서로 어떻게 관련되는지를 나타냅니다. 다른 동작이 시작되게 한 특정 동작을 볼 수 있습니다. 예를 들어 메시지 요청이 보안 대화 토큰을 가져오기 위해 보안 핸드셰이크를 시작합니다. 자세한 내용 및 Service Trace Viewer 도구의 그래픽 보기를 보려면 Service Trace Viewer ToolService Trace Viewer를 사용하여 상호 관련된 추적 보기 및 문제 해결을 참조하십시오.

전파

전파는 응용 프로그램 끝점 간 동일한 처리 단위(예: 요청)에 대한 오류 추적의 직접적인 상관 관계를 제공합니다. 동일한 처리 단위(예: 요청)에 대해 서로 다른 끝점에서 내보내진 오류들은 응용 프로그램 도메인에서도 동일한 동작에서 그룹화됩니다. 이는 메시지 헤더에서 동작 ID의 전파를 통해 수행됩니다. 그러므로 서버의 내부 오류로 인해 클라이언트의 시간이 초과되면 직접 상관 관계에 대해 두 오류 모두 동일한 동작에서 표시됩니다.

이 작업을 수행하려면 앞의 예제에서 설명한 대로 ActivityTracing 설정을 사용하십시오. 또한 System.ServiceModel 추적 소스에 대해 propagateActivity 특성을 설정하십시오.

<source name="System.ServiceModel" switchValue="Verbose,ActivityTracing" propagateActivity=”true” >

동작 전파는 WCF가 TLS에 동작 ID를 포함한 아웃바운드 메시지에 헤더를 추가하도록 구성할 수 있는 기능입니다. 서버 측의 후속 추적에 이를 포함함으로써 클라이언트 및 서버 동작을 상호 연결할 수 있습니다.

전송

동작 간 전송은 끝점 내의 관련 동작에 있는 이벤트 간의 인과 관계를 나타냅니다. 두 가지 동작은 컨트롤이 이러한 동작 간에 이동할 때(예: 동작 경계를 넘나드는 메서드 호출) 전송과 관련됩니다. WCF에서는 서비스에서 바이트가 들어올 때 수신 대기 동작이 메시지 개체가 만들어지는 바이트 수신 동작으로 전송됩니다.

Transfer 추적을 내보내려면 앞의 예제에서 설명한 대로 추적 소스에서 ActivityTracing 설정을 사용하십시오.

종단 간 추적 시나리오 목록, 해당 동작 및 추적 디자인에 대한 자세한 내용은 종단 간 추적 시나리오를 참조하십시오.

E2E 추적 모델

이 단원에서는 동작과 해당 경계, 전파를 통한 끝점 간 동작의 상관 관계, 전송을 통한 끝점 내 동작의 상관 관계 및 동작 프로파일링에 대해 정의합니다. 또한 모든 동작 추적의 형식에 대한 요약을 제공하고, 유효한 추적 시퀀스를 형성하기 위해 이들을 함께 사용하는 방법을 보여 줍니다.

활동

정의 및 범위

동작은 로컬 및 전역 식별자를 가집니다. 이는 디자인 시에 정의되며 작업의 논리 단위를 나타냅니다. 동일한 동작 식별자로 내보낸 추적은 동일한 동작의 일부이므로 직접적으로 관련됩니다. 동작(예: 요청)이 끝점 경계를 넘나들 수 있기 때문에 동작에 대해 두 가지 범위가 정의됩니다.

  • 응용 프로그램별 전역 범위. 이 범위에서는 동작이 128비트 gAId(Globally Unique Activity Identifier)에 의해 식별됩니다. gAid는 끝점 간에 전파됩니다.
  • 추적 소스 및 프로세스별 로컬 범위. 이 범위에서는 동작이 동작 추적 및 프로세스 ID를 내보내는 추적 소스 이름과 함께 gAId에 의해 식별됩니다. 이 세 가지가 로컬 동작 ID인 lAId를 구성합니다. lAId는 동작의 (로컬) 경계를 정의하는 데 사용합니다.

동작은 세 개의 lAId(ProcessId, TraceSourceName, gAId)에 의해 추적 소스에서 로컬로 식별되고, 해당 gAId에 의해 응용 프로그램에서 전역으로 식별됩니다.

스키마

추적은 Microsoft 플랫폼을 통해 스키마를 사용하여 내보낼 수 있으며, 이때 "e2e"("종단 간") 스키마라고 하는 일반 스키마를 사용합니다. 이 스키마에는 추적 소스, 프로세스, 추적 소스 이름 및 프로세스 ID 내에서 고유 128비트 식별자(동작 식별자)가 포함됩니다. AID(동작 식별자)를 통해 내보낸 추적을 상호 연결시킬 수 있습니다. 동일한 AID로 내보낸 추적은 동일한 동작의 일부이므로 직접적으로 관련되기 때문입니다. 관리 코드에서는 XmlWriterTraceListener가 E2E 스키마에서 추적을 내보냅니다.

개발자는 TLS(스레드 로컬 저장소)에서 Guid를 사용하여 ActivityId 속성을 설정함으로써 추적과 함께 내보내는 AID를 설정할 수 있습니다. 다음은 이에 대한 예입니다.

// set the current Activity ID to a new GUID.
CorrelationManager.ActivityId = Guid.NewGuid();

다음 예제에서와 같이 TLS에서의 gAId 설정은 추적 소스를 사용하여 추적을 내보낼 때 확인할 수 있습니다.

TraceSource traceSource = new TraceSource("myTraceSource");
traceSource.TraceEvent(TraceEventType.Warning, eventId, "Information");

내보낸 추적에는 현재 TLS에 있는 gAId, 매개 변수로 추적 소스의 생성자에게 전달된 추적 소스 이름 및 현재 프로세스 ID가 포함됩니다.

Service Trace Viewer에서 동작 상호 연결

Service Trace Viewer 도구는 다음과 같이 동작의 두 가지 보기를 제공합니다.

  • 목록 보기: gAId를 사용하여 추적 소스와 프로세스 간에 추적을 직접적으로 상호 연결시킵니다. 클라이언트, 서비스 등의 여러 추적 소스로부터 전달되었으나 동일한 gAId를 가진 추적은 동일한 동작으로 그룹화됩니다. 그러므로 서비스에서 발생하는 오류 및 이로 인해 발생하는 클라이언트의 오류는 해당 도구의 동일한 동작 보기에 둘 다 표시됩니다.
  • 그래프 보기: 프로세스별로 동작을 그룹화합니다. 이 보기에서 gAId는 동일하고 lAId는 다른 클라이언트 및 서비스(이 둘은 각각 다른 프로세스에 있으므로)는 서로 다른 동작에서 서로 다른 추적을 가지게 됩니다. 서로 다른 프로세스에서 동일한 gAId를 가진 동작을 상호 연결시키기 위해 도구에서 관련 동작 간 메시지 흐름을 보여 줍니다.

동작 수명

  • Start: 동작의 시작을 나타냅니다. “Start” 추적은 새 처리 중요 시점의 시작에 대한 레코드를 제공합니다. 여기에는 항상 주어진 프로세스에서의 주어진 추적 소스에 대한 새 AID가 포함됩니다. 단, 동작 ID가 동일한 추적 소스 이름(예: System.ServiceModel)을 사용하는 끝점을 통해 전파되고, 동일한 프로세스에서 실행되는 경우는 제외됩니다. 새 동작의 시작에 대한 예제에는 처리에 대한 새 스레드 만들기 또는 새 public 메서드 입력이 포함됩니다.
  • Stop: 동작의 종료를 나타냅니다. “Stop” 추적은 기존 처리의 중요 시점 종료에 대한 레코드를 제공합니다. 여기에는 항상 주어진 프로세스에서의 주어진 추적 소스에 대한 새 AID가 포함됩니다. 단, 동작 ID가 동일한 추적 소스 이름(예: System.ServiceModel)을 사용하는 끝점을 통해 전파되고, 동일한 프로세스에서 실행되는 경우는 제외됩니다. Examples of stopping an activity include terminating a processing thread, or exiting a method whose beginning was denoted with a “Start” trace.
  • Suspend: 동작 처리가 일시 중단됨을 나타냅니다. "Suspend" 추적에는 처리가 나중에 다시 시작되도록 하는 기존 AID가 포함됩니다. 현재 추적 소스로부터 일시 중단 및 다시 시작 이벤트 간에 이 AID와 함께 내보낸 추적이 없습니다. 예제에는 외부 라이브러리 함수로 호출할 때나 I/O 완료 포트와 같은 리소스를 대기할 때 동작을 일시 중지하는 작업이 포함됩니다.
  • Resume: 동작을 다시 처리하기 시작함을 나타냅니다. "Resume" 추적에는 현재 추적 소스로부터 마지막으로 내보낸 추적이 "Suspend" 추적인 기존 AID가 포함됩니다. 예제에는 호출로부터 외부 라이브러리 함수로 반환하는 경우 또는 I/O 완료 포트와 같은 리소스를 통해 처리를 다시 시작하기 위해 신호를 받는 경우가 포함됩니다.
  • Transfer: 일부 동작은 다른 동작에 의해 유발되거나 다른 동작과 관련이 있으므로, “Transfer” 추적을 통해 동작을 다른 동작과 연관시킬 수 있습니다. 전송은 한 동작이 다른 동작으로 리디렉션된 관계를 기록합니다.

동작 추적 사용에 대한 지침

다음은 ActivityTracing 추적(Start, Stop, Suspend, Resume 및 Transfer) 사용에 대한 지침입니다.

  • 추적은 트리가 아닌 리디렉션된 순환 그래프입니다. 앞의 예제에서처럼 동작을 생성한 동작에 대한 컨트롤을 반환할 수 있습니다.
  • 동작은 시스템 관리자 또는 지원 가능성에 의미가 있을 수 있는 처리 경계를 나타냅니다.
  • 클라이언트와 서버 둘 다에 있는 각 WCF 메서드는 새 동작을 시작하고 작업이 완료된 후에 새 작업을 끝내고 앰비언트 동작으로 돌아가도록 하는 데 사용됩니다.
  • 연결 수신 또는 메시지 대기와 같은 장기 실행(진행 중) 동작은 해당 시작/중지 마커로 표시됩니다.
  • 메시지 수신 또는 처리에 의해 트리거된 동작은 추적 경계로 표시됩니다.
  • 동작은 개체를 나타내는 것이 아니라 동작을 나타냅니다. 동작은 "이는 (의미 있는 추적 내보내기가 발생할 때) 발생했습니다."로 해석되어야 합니다.

동작 경계 표시를 위해 Start 및 Stop 사용

엄격한 의미에서 동작의 증명은 내보낸 추적에서 lAId를 처음 사용할 때 시작되고, 내보낸 추적에서 lAId를 마지막으로 사용할 때 끝납니다.

동작의 수명은 내보낸 추적에서 lAId를 처음 사용할 때 시작되고, 내보낸 추적에서 lAId를 마지막으로 사용할 때 끝납니다. Start 및 Stop이라는 두 가지 추적 형식을 사용하는 System.Diagnostics에서 미리 정의된 추적 형식의 설정을 제공하여 명시적으로 동작 경계를 표시합니다.

Start - 동작의 시작

“Start” 추적은 새 처리 중요 시점의 시작에 대한 레코드를 제공합니다. 여기에는 항상 주어진 프로세스에서의 주어진 추적 소스에 대한 새 IAId가 포함됩니다. 단, 동작 ID가 동일한 추적 소스 이름(예: System.ServiceModel)을 사용하는 끝점을 통해 전파되고, 동일한 프로세스에서 실행되는 경우는 제외됩니다. 또는 동일한 gAId가 동일한 끝점을 통해 두 번 이상 전파되는 경우(예: WCF에서 보안 동작 설정)입니다. 요청이 동기 방식이고 순차인 경우에만 후자를 수행하는 것이 좋습니다. 이러한 경우 각 끝점에 대해 동일한 gAId를 사용하여 Start 및 Stop 추적이 표시됩니다. 전파에 대한 자세한 내용은 "전파" 단원을 참조하십시오. WCF에서는 시작 추적을 통해 동작의 이름을 설정합니다.

새 동작의 시작에 대한 예제에는 처리에 대한 새 스레드 만들기 또는 새 public 메서드 입력이 포함됩니다.

Stop - 동작의 종료

“Stop” 추적은 기존 처리의 중요 시점 종료에 대한 레코드를 제공합니다. 여기에는 항상 주어진 프로세스에서의 주어진 추적 소스에 대해 다시 표시되지 않는 IAId가 포함됩니다. 단, 동작 ID가 동일한 추적 소스 이름(예: System.ServiceModel)을 사용하는 끝점을 통해 전파되고, 동일한 프로세스에서 실행되는 경우는 제외됩니다. 또는 동일한 gAId가 동일한 끝점을 통해 두 번 이상 전파되는 경우(WCF에서 보안 동작 설정)입니다. 요청이 동기 방식이고 순차인 경우에만 후자를 수행하는 것이 좋습니다. 이러한 경우 각 끝점에 대해 동일한 gAId를 사용하여 Start 및 Stop 추적이 표시됩니다. 전파에 대한 자세한 내용은 "전파" 단원을 참조하십시오.

  • 동작 중지에 관한 예제에는 처리 스레드 종료 또는 시작이 “Start” 추적으로 표시된 메서드 종료 등이 포함됩니다.

gAId가 상관 관계를 위해 끝점을 통해 전파될 경우 각 추적 소스에는 해당 gAId와 함께 Start 및 Stop 추적이 있습니다.

Start 및 Stop 추적 사용

Start 및 Stop 추적은 상관 관계에 중요하지 않습니다. 그러나 성능 향상, 프로파일링 및 동작 범위의 유효성 검사에 도움이 될 수 있습니다.

도구에서는 이러한 형식을 사용하여 동일한 동작의 관련 이벤트 또는 관련 동작에서의 이벤트(도구가 Transfer 추적을 따를 경우)를 즉각적으로 찾기 위해 추적 로그 탐색을 최적화합니다. 예를 들어 도구는 Start/Stop 추적을 볼 때 제공된 동작에 대한 로그의 구문 분석을 중지합니다.

도구는 작업 식별자로 lAId를 사용하지만 로드된 파일을 통해 관련된 동작을 식별하기 위해서는 gAId를 사용할 수 있습니다.

이러한 추적 형식은 프로파일링에도 사용할 수 있습니다. 시작 및 중지 마커 간에 사용되는 리소스는 포함된 논리 동작을 비롯하여 동작의 포괄 시간을 나타냅니다. Suspend 추적과 Resume 추적 간의 시간 간격을 빼면 실제 동작 시간을 구할 수 있습니다.

Stop 추적은 특히 구현된 동작의 범위에 대한 유효성을 검사하는 데 유용합니다. 처리되는 일부 추적이 주어진 동작 내에서가 아니라 Stop 추적 이후에 나타난다면 이는 코드 오류일 수 있습니다.

ActivityTracing 특성이 추적 소스에 대해 설정되면 Start 및 Stop 추적이 내보내집니다.

전파를 통해 끝점 내의 동작 상호 연결

동작은 추적 소스가 동일한 로컬 처리 단위와 관련된 추적에 대해 직접적인 상관 관계를 제공합니다. WCF에서는 끝점을 통해 동일한 논리 처리 단위(예: 요청)의 일부인 추적을 연관시키기 위해 gAId를 전파합니다. 상호 연결될 때 구별된 끝점의 동일한 gAId를 가진 동작으로부터 전달된 추적은 동일한 동작으로 병합할 수 있습니다.

다음 조건이 모두 충족되면 동작 M의 gAId가 동작 N에 전파됩니다.

  • N은 M으로 인해 만들어집니다.
  • M의 gAId가 N에 알려집니다.
  • N의 gAId가 M의 gAId와 같습니다.

다음 XML 스키마에 설명된 것처럼 gAId는 ActivityId 메시지 헤더를 통해 전파됩니다.

<xsd:element name=”ActivityId” type=”integer” minOccurs=”0”>
  <xsd:attribute name=”CorrelationId” type=”integer” minOccurs=”0”/>
</xsd:element>

다음은 메시지 헤더의 예제입니다.

<MessageLogTraceRecord>
  <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"   
                      xmlns:a="http://www.w3.org/2005/08/addressing">
    <s:Header>
      <a:Action s:mustUnderstand="1">http://Microsoft.ServiceModel.Samples/ICalculator/Subtract
      </a:Action>
      <a:MessageID>urn:uuid:f0091eae-d339-4c7e-9408-ece34602f1ce
      </a:MessageID>
      <ActivityId CorrelationId="f94c6af1-7d5d-4295-b693-4670a8a0ce34" 
                          
               xmlns="https://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">
        17f59a29-b435-4a15-bf7b-642ffc40eac8
      </ActivityId>
      <a:ReplyTo>
          <a:Address>http://www.w3.org/2005/08/addressing/anonymous
          </a:Address>
      </a:ReplyTo>
      <a:To s:mustUnderstand="1">net.tcp://localhost/servicemodelsamples/service</a:To>
   </s:Header>
   <s:Body>
     <Subtract xmlns="http://Microsoft.ServiceModel.Samples">
       <n1>145</n1>
       <n2>76.54</n2>
     </Subtract>
   </s:Body>
  </s:Envelope>
</MessageLogTraceRecord>

전파 및 동작 경계

System.ServiceModel에서는 사용자가 양측의 구성에서 propagateActivity=true로 설정할 경우 동작 ID가 끝점을 통해 전파됩니다.

동작 ID가 끝점을 통해 전파되는 경우 메시지 수신자는 해당(전파된) 동작 ID를 사용하여 Start 및 Stop 추적을 내보냅니다. 따라서 각 추적 소스의 해당 gAId를 가진 Start 및 Stop 추적이 있습니다. 끝점이 동일한 프로세스에 있고 동일한 추적 소스 이름을 사용하는 경우 동일한 lAId(동일한 gAId, 동일한 추적 소스, 동일한 프로세스)를 가진 여러 Start 및 Stop 추적이 만들어집니다.

동기화

메시지 헤더에서 ActivityId의 Correlation 특성을 설정함으로써 컴퓨터를 통해 끝점 추적의 동기화를 사용하도록 설정할 수 있습니다.

서로 다른 컴퓨터에서 실행되는 끝점에서 이벤트를 동기화하기 위해 CorrelationId가 메시지에 전파되는 ActivityId 헤더에 추가됩니다. 도구에서 이 ID를 사용하여 클럭이 일치하지 않는 시스템 간의 이벤트를 동기화할 수 있습니다. 특히 Service Trace Viewer 도구는 이 ID를 사용하여 끝점 간의 메시지 흐름을 표시합니다.

끝점 내에서 동작을 상호 연결하기 위해 전송 사용

M과 N 간에 컨트롤의 흐름이 있을 때 Transfer 추적이 동작 M으로부터 동작 N으로 내보내집니다. 예를 들어 동작의 경계를 넘나드는 메서드 호출로 인해 N은 M에 대한 일부 작업을 수행합니다.

N이 이미 존재하거나 만들어졌을 수 있습니다. N이 M에 대한 일부 작업을 수행하는 새 동작일 경우 N이 M에 의해 생성됩니다.

M으로부터 N으로 전송되더라도 다시 N으로부터 M으로의 전송이 발생하지 않을 수도 있습니다. 이는 M이 N에서의 일부 작업을 생성할 수 있으며 N이 해당 작업을 완료할 때 추적하지 않기 때문입니다. 실제로, M은 N이 해당 작업을 완료하기 전에 종료될 수 있습니다. 이는 수신기 동작(N)을 생성하고 종료하는 “Open ServiceHost” 동작(M)에서 발생합니다.

N에서 M으로 다시 전송한다는 것은 N이 M과 관련된 작업을 완료했음을 의미합니다.

N은 M과 연관되지 않은 다른 처리(예: 여러 로그인 동작으로부터 로그인 요청(M) 수신을 유지하는 기존 인증자 동작(N))를 계속 수행할 수 있습니다.

동작 간 전송은 관련 동작에 있는 이벤트 간의 인과 관계를 나타냅니다. 동작 및 전송은 사용자가 오류의 근본 원인을 찾도록 도와줍니다. 예를 들어 동작 M과 N 간에 각각 구성 요소 M과 N에서 전송을 주고 받을 때 M으로 전송을 되돌린 직후에 N에서 충돌이 발생하면 M으로 보내는 N의 전달 데이터로 인해 오류가 발생했다고 결론을 내릴 수 있습니다.

동작 M과 N 사이에 반드시 중첩된 관계가 존재하는 것은 아닙니다. 이는 두 가지 이유 때문일 수 있습니다. 첫 번째 이유는 동작 M이 N을 시작했더라도 M이 N에서 수행되는 실제 처리를 모니터링하지 않았기 때문이며, 두 번째 이유는 N이 이미 존재하기 때문입니다.

다음은 두 가지 전송 예제입니다.

  • 서비스 호스트를 만들 때 생성자가 호출 코드로부터 컨트롤을 얻거나 호출 코드가 생성자에게 전송됩니다. 생성자는 실행을 마치면 컨트롤을 호출 코드로 반환하거나 호출 코드로 다시 전송합니다. 이는 중첩된 관계의 경우입니다.
  • 수신기가 전송 데이터 처리를 시작하면 새 스레드를 만들고, 처리를 위해 적절한 컨텍스트를 바이트 수신 동작(예: 컨트롤 및 데이터 전달)으로 전달합니다. 스레드가 요청 처리를 완료하면 바이트 수신 동작은 수신기로 아무 것도 전달하지 않습니다. 이 경우 새 스레드 동작 내에는 전송이 있지만 외부에는 전송이 없습니다. 두 개의 동작은 연관되지만 중첩되지는 않습니다.

동작 전송 시퀀스

올바른 형식의 동작 전송 시퀀스에는 다음 단계가 포함됩니다.

  1. 새 gAId 선택으로 구성된 새 동작 시작
  2. 현재 동작 ID로부터 새 gAId에 대한 Transfer 추적 내보내기
  3. TLS에서 새 ID 설정
  4. 새 동작의 시작을 나타내기 위해 Start 추적 내보내기
  5. 원래 동작으로 돌아가기는 다음으로 구성됩니다.
  6. 원래 gAId로 Transfer 추적 내보내기
  7. 새 동작의 종료를 나타내기 위해 Stop 추적 내보내기
  8. 이전 gAId로 TLS 설정

다음 코드 예제에서는 이 작업을 수행하는 방법을 보여 줍니다. 이 샘플은 차단 호출이 새 동작으로 전송 중일 때 만들어지며, Suspend/Resume 추적을 포함한다고 가정합니다.

// 0. Create a trace source
TraceSource ts = new TraceSource(“myTS”);
// 1. remember existing (“ambient”) activity for clean up
Guid oldGuid = Trace.CorrelationManager.ActivityId;
// this will be our new activity
Guid newGuid = Guid.NewGuid(); 
// 2. call transfer, indicating that we are switching to the new AID
ts.TraceTransfer(667, "Transferring.", newGuid);
// 3. Suspend the current activity.
ts.TraceEvent(TraceEventType.Suspend, 667, "Suspend: Activity " + i-1);
// 4. set the new AID in TLS
Trace.CorrelationManager.ActivityId = newGuid;
// 5. Emit the start trace
ts.TraceEvent(TraceEventType.Start, 667, "Boundary: Activity " + i);
// trace something
ts.TraceEvent(TraceEventType.Information, 667, "Hello from activity " + i);
// Perform Work
// some work.
// Return
ts.TraceEvent(TraceEventType.Information, 667, "Work complete on activity " + i); 
// 6. Emit the transfer returning to the original activity
ts.TraceTransfer(667, "Transferring Back.", oldGuid);
// 7. Emit the End trace
ts.TraceEvent(TraceEventType.Stop, 667, "Boundary: Activity " + i);
// 8. Change the tls variable to the original AID
Trace.CorrelationManager.ActivityId = oldGuid;  
// 9. Resume the old activity
ts.TraceEvent(TraceEventType.Resume, 667, "Resume: Activity " + i-1);

추적 형식 요약

추적 경계와 동작 전송 이벤트의 출력을 전환하는 ActivityTracing 플래그에 대한 설명과 Critical, Error, Warning, Information 및 Verbose 등의 다양한 추적 수준에 대한 자세한 내용은 소스 수준(영문 페이지일 수 있음)을 참조하십시오.

System.Diagnostics에서 내보낼 수 있는 추적의 형식에 대한 내용은 TraceEventType(영문 페이지일 수 있음)을 참조하십시오. 다음 표에서는 가장 중요한 항목을 보여 줍니다.

추적 형식 설명

Critical

오류 또는 응용 프로그램 충돌

Error

복구할 수 있는 오류

Warning

알림 메시지 

Information

중요하지 않은 문제 

Verbose

추적 디버깅 

Start

처리의 논리 단위 시작 

Suspend

처리의 논리 단위 일시 중단 

Resume

처리의 논리 단위 다시 시작 

Stop

처리의 논리 단위 중지 

Transfer

상관 관계 ID의 변경 

동작은 위의 추적 형식의 조합으로 정의됩니다.

다음은 로컬(추적 소스) 범위에서 이상적인 동작을 정의하는 정규식입니다.

R = Start ( (Critical | Error | Warning | Information | Verbose | Transfer)* (Transfer Suspend Transfer Resume)* )* Stop

이는 동작이 다음 조건을 만족해야 함을 의미합니다.

  • Start 및 Stop 추적에 의해 각각 시작되고 중지되어야 합니다.
  • Suspend 추적 또는 Resume 추적의 바로 앞에 Transfer 추적이 있어야 합니다.
  • Suspend 추적 및 Resume 추적이 존재할 경우 이 사이에 추적이 있으면 안 됩니다.
  • 위와 같은 조건이 충족되는 한 Critical/Error/Warning/Information/Verbose/Transfer 추적은 여러 개가 있을 수 있습니다.

다음은 전역 범위에서 이상적인 동작을 정의하는 정규식입니다.

R+ 

로컬 범위에서 동작에 대한 정규식인 R을 포함합니다. 이는 다음으로 변환됩니다.

[R+ = Start ( (Critical | Error | Warning | Information | Verbose | Transfer)* (Transfer Suspend Transfer Resume)* )* Stop]+

참고 항목

개념

추적 구성
Service Trace Viewer를 사용하여 상호 관련된 추적 보기 및 문제 해결
종단 간 추적 시나리오

기타 리소스

Service Trace Viewer Tool