다음을 통해 공유


수신 어댑터의 교환 패턴

수신 어댑터는 "유선"에서 데이터를 수신하고 메시지로 BizTalk Server 제출합니다. 이 전송 프로세스는 단방향 또는 양방향 메시지 교환 패턴일 수 있습니다.

단방향 전송

수신 어댑터에서 BizTalk 메시징 엔진에 메시지를 전송하려면 먼저 새 BizTalk 메시지를 만들어야 합니다. IBaseMessage 항목의 코드 샘플은 이 작업을 수행하는 방법을 보여 줍니다. 어댑터에서 메시지 본문으로 설정하는 스트림은 일반적으로 전달만 가능한 스트림이어야 하며, 즉 이 스트림은 이전에 메모리로 읽은 데이터를 캐시하지 않습니다.

어댑터가 엔진에 메시지를 제출하기 전에 시스템 네임스페이 스의 InboundTransportLocation 메시지 컨텍스트 속성을 BizTalk 메시지에 작성해야 합니다. 다음 코드 조각을 참조하십시오.

Assembly References:

Microsoft.XLANGs.BaseTypes.dll

Microsoft.BizTalk.Pipeline.dll

Microsoft.BizTalk.GlobalPropertySchemas.dll

using Microsoft.BizTalk.Message.Interop;  
using Microsoft.XLANGs.BaseTypes;  
  
private static readonly PropertyBase InboundTransportLocationProp =   
new BTS.InboundTransportLocation();  
  
private void StampMsgCtxProps(  
IBaseMessage msg, string uri, string adapterType)  
{  
msg.Context.Write(  
 InboundTransportLocationProp.Name.Name,   
 InboundTransportLocationProperty.Name.Namespace,   
  uri);  
}  

또한 어댑터는 고유의 속성 스키마를 정의하고 메시지를 수신한 엔드포인트에 관련된 메시지 컨텍스트 속성을 작성해야 할 수 있습니다. 예를 들어 HTTP 어댑터는 HTTP 헤더를 메시지 컨텍스트에 작성하고 SMTP 수신기는 메일의 제목을 메시지 컨텍스트에 작성해야 합니다. 이 정보는 파이프라인 구성 요소, 오케스트레이션 일정 또는 송신 어댑터와 같은 구성 요소를 다운스트림하는 데 유용할 수 있습니다.

메시지가 준비되면 해당 메시지를 메시징 엔진으로 전송할 수 있습니다. 단방향 수신 어댑터가 엔진에 메시지를 제출하는 방법을 보려면 코드 샘플 SubmitDirect(BizTalk Server 샘플)를 참조하세요.

요청-응답

양방향 수신 어댑터는 일반적으로 단방향 또는 양방향 수신 포트에서 사용됩니다. 어댑터는 서비스 중인 수신 위치가 BizTalk Server 구성 속성 모음을 검사하여 단방향 또는 양방향 포트인지 여부를 결정합니다. 이 프로세스는 UI 지침 및 개발자 API 네임스페이스 참조의 IBTTransportConfig.AddReceiveEndpoint 메서드(COM)에 설명되어 있습니다.

다음 개체 상호 작용 다이어그램은 간청-응답 메시지 교환의 수행 과정을 보여 줍니다. 어댑터는 전송 프록시에서 새 일괄 처리를 요청하고 SubmitRequestMessage 메서드를 통해 IBTTransmitter 인터페이스에 대한 참조를 전달합니다. 메시징 엔진은 TransmitMessage 메서드를 사용하여 이 인터페이스에서 응답 메시지를 전달합니다.

엔진이 비동기적으로 메시지를 처리하므로 다음과 같은 상황이 발생할 수 있습니다.

  • BatchComplete 콜백은 Done이 반환되기 전에 발생할 수 있습니다.

  • TransmitMessage에 대한 호출이 BatchComplete 이전 뿐 아니라 Done 이전에도 발생할 수 있습니다.

    이러한 두 시나리오는 매우 드물지만 이에 대해 해당 어댑터를 보호해야 합니다.

    응답 메시지는 비동기적인 비차단 호출을 사용하여 전송하는 것이 좋습니다.

    BaseAdapter 프로젝트에는 이 항목에 설명된 요청-응답 의미 체계를 캡슐화하는 유틸리티 클래스 StandardRequestResponseHandler가 있습니다.

요청-응답 메시지 시간 제한

어댑터가 요청 요청 메시지를 제출하는 경우 UI 지침 및 개발자 API 네임스페이스 참조에서 IBTTransportBatch.SubmitRequestMessage 메서드(COM) API에서 요청 메시지의 시간 초과를 지정해야 합니다. 응답 메시지는 이 시간 제한 기간 내에만 어댑터로 배달됩니다. 시간 제한이 만료된 후 응답 메시지 대신 NACK(부정 승인)가 어댑터에 배달됩니다. 어댑터에 시간 제한 값을 지정하지 않을 경우 엔진은 기본값인 20분을 사용합니다.

요청-응답 메시지에 대한 기본 시간 제한은 In-process 수신 어댑터에 대한 다음 레지스트리 키를 사용하여 제어할 수 있습니다.

DWORD

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTSSvc{Host Guid}\MessagingReqRespTTL

레지스트리 키는 Isolated 수신 어댑터의 다른 위치에 있습니다.

DWORD

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTSSvc.3.0\MessagingReqRespTTL

NACK(부정 승인)는 SOAP 오류이며 두 가지 방법으로 이를 처리할 수 있습니다. 일반적으로 어댑터는 클라이언트에 NACK를 반환하고 클라이언트는 NACK를 처리합니다. 또한 응답 메시지를 처리하는 전송 파이프라인의 경우 맵 또는 사용자 지정 파이프라인 구성 요소를 사용하여 응답 메시지의 내용을 변경하도록 구성할 수 있습니다.