다음을 통해 공유


파이프라인 구성 요소에서 들어오는 데이터 스트림 처리

BizTalk Server 파이프라인 구성 요소에 대한 사용자 지정 디스어셈블러 코드를 작성할 때 다음 사항을 고려해야 합니다.

사용자 지정 디스어셈블러 코드의 들어오는 데이터 스트림을 닫지 않음

BizTalk Server 파이프라인 구성 요소에 대한 사용자 지정 디스어셈블러 코드를 작성하는 경우 디스어셈블러 코드에서 들어오는 데이터 스트림을 닫지 않도록 합니다. 입력 메시지에서 들어오는 스트림은 공유 리소스입니다. 들어오는 스트림은 BizTalk Server 메시지 엔진의 메시지 본문 추적 구성 요소에서도 사용됩니다.

들어오는 스트림을 암시적으로 또는 명시적으로 닫으면 추적 데이터가 손실될 수 있으며 BizTalk Server 메시지 이벤트 및 서비스 instance 추적을 사용하여 스트림 데이터를 검사할 수 없습니다.

Stream 클래스의 Seek 메서드를 사용하여 데이터 스트림 포인터를 스트림의 시작으로 설정

스트림의 끝에 도달할 때까지 들어오는 데이터 스트림을 읽습니다. 예를 들어 사용자 지정 코드에서 300KB 데이터에 대한 읽기 요청을 작성한 경우 코드가 34KB의 데이터만 수신하면 스트림의 끝에 도달했다고 가정하지 않습니다. 사용자 지정 코드는 항상 0바이트가 반환될 때까지 들어오는 스트림을 읽습니다.

사용자 지정 구성 요소 논리에서 데이터 스트림을 반환하기 전에 데이터 스트림 포인터를 다시 스트림의 시작으로 설정하십시오. 예를 들어 이 코드는 스트림을 반환하기 전에 스트림의 시작을 가리키도록 Seek 메서드를 사용하는 논리를 보여 줍니다.

myDataStream.Seek(0, SeekOrigin.Begin);  
return myDataStream;  

이를 수행하지 않고 현재 구성 요소의 끝까지 스트림을 읽으면 데이터 스트림 포인터가 스트림의 시작으로 설정되지 않았기 때문에 빈 스트림으로 나타날 항목을 다음 구성 요소에서 수신합니다. 이렇게 되면 후속 파이프라인 구성 요소에 예기치 않은 구문 분석 및 유효성 검사 오류가 발생할 수 있습니다.