2010-07-20 4 views
2

저는 BizTalk를 처음 사용하고 사용자 지정 파이프 라인 구성 요소를 만드는 방법에 익숙합니다. 다음과 비슷한 코드 예제를 보았습니다.BizTalk 파이프 라인 구성 요소에 스트림을 처리 하시겠습니까?

public void Disassemble(IPipelineContext pContext, IBaseMessage pInMsg) 
{ 

    Stream originalDataStream = pInMsg.BodyPart.GetOriginalDataStream(); 
    StreamReader strReader = new StreamReader(originalDataStream); 

    string strOriginalData = strReader.ReadToEnd(); 

    byte[] bufferOriginalMessage = new byte[strOriginalData.Length]; 
    bufferOriginalMessage = ASCIIEncoding.Default.GetBytes(strOriginalData); 

    Stream ms = new MemoryStream(); 
    ms.Write(bufferOriginalMessage, 0, strOriginalD 

    //other stuff here 

    ms.Seek(0, SeekOrigin.Begin); 
    pInMsg.BodyPart.Data = ms; 
} 

그러나이 메서드는 StreamReader를 닫거나 처리하지 않습니다. 이 방법은 단순히 종료됩니다.

일반적으로 StreamReader 및 다른 클래스를 사용하는 경우 스트림이 자동으로 삭제되도록 using 문을 사용하는 것이 가장 좋습니다.

BizTalk에서이 StreamReader를 처리하지 않는 이유가 있습니까?

이 시점에 대한 정보가 없습니다. 누구든지 도와 줄 수 있습니까?

+0

교육을 위해, 내가 언급 한 예가 StreamReader 및 MemoryStream 클래스를 사용한다는 것을 알게되었습니다. 견고하고 엔터프라이즈 수준의 파이프 라인 구성 요소는 읽기 전용 * * 전달 전용 * * 탐색 불가능 스트림을 사용하여 가장 잘 작성되었음을 유의하십시오. 스트림 파이프 라인 구성 요소에 대한 자세한 내용은 http://blogs.objectsharp.com/cs/blogs/nbarden/archive/2008/04/14/developing-streaming-pipeline-components-part-1.aspx를 참조하십시오. –

답변

3

일반적으로 예, 더 이상 필요없는 독자와 스트림을 닫는 것이 좋습니다. 즉, 반드시 매번 100 %가 요구되는 것은 아닙니다. 예를 들어 독자를 닫으면 기본 스트림이 정상적으로 닫히지 만 가능성이있는 스트림은 이미 다른 스트림을 인식하고 있으며 스트림을 자체 시간에 닫습니다.

그러나 파이프 라인 실행이 끝나고 메시지가있을 때 BizTalk에서 자동으로 처리하도록 파이프 라인 구성 요소에서 사용하는 스트림을 resource tracker에 해당하는 메시지 수명과 함께 추가하는 것이 좋습니다. 처리되었습니다.

+0

고마워, 그게 내가 생각한거야,하지만 난 그 결과에 대한 설명서를 찾을 수 없습니다. 스트림을 닫는 것이 해로운 경우 문서가 강조 표시됩니다. –

관련 문제