다음을 통해 공유


Isolated 어댑터 인스턴스화

앞서 설명한 것처럼 Isolated 어댑터는 BizTalk Server에서 인스턴스화되지 않고 다른 프로세스에서 인스턴스화되고 호스팅됩니다. IBTTransportProxy에 대한 전송 프록시 QueryInterface를 만든 다음 IBTTransportProxy를 호출하는 것은 어댑터의 책임입니다. 메시징 엔진에 등록할 RegisterIsolatedReceiver입니다.

등록하려면 어댑터가 구성 및 설정된 수신 위치 중 하나를 메시징 엔진으로 전달해야 합니다. 어댑터의 호스트 프로세스 자격 증명은 BizTalk Isolated 호스트 사용자 그룹의 구성원이어야 합니다. 사용자가 해당 그룹의 구성원이 아닌 한 여기에서 단순히 가장을 사용하는 것으로는 부족합니다. 또한 어댑터가 올바른 ClassID를 가지고 있고 해당 호스트 instance 대해 구성된 컴퓨터에서 실행되고 있는지 확인하기 위해 어댑터를 쿼리합니다. 어댑터가 전송 프록시에 성공적으로 등록되면 IPersistPropertyBag 인터페이스의 Load 메서드를 호출하여 해당 구성이 전송됩니다.

다음 그림은 API 호출의 순서를 보여 줍니다. 파란색으로 표시된 인터페이스는 어댑터에서 구현됩니다.

격리된 어댑터를 인스턴스화하는 프로세스를 보여 주는 이미지입니다.

다음 코드 조각은 등록 API 호출을 보여 줍니다.

using Microsoft.BizTalk.TransportProxy.Interop;  
using Microsoft.BizTalk.Component.Interop;  
using Microsoft.BizTalk.Message.Interop;  
  
public class MyAdapter : IBTTransport,   
 IBTTransportConfig,   
 IBTTransportControl,   
 IBaseComponent  
{  
...  
private IBTTransportProxy transportProxy;  
  
 public void Register(string uri)  
 {  
 // Create the Transport Proxy...  
 this.transportProxy =   
 (IBTTransportProxy)new BTTransportProxy();  
  
// Register on of the adapters uri’s with the TP  
 this.transportProxy.RegisterIsolatedReceiver(  
 uri,   
 (IBTTransportConfig)this );  
 }  
}  

구현 팁: 어댑터는 진행 중인 작업 수를 유지하는 것이 좋습니다. 어댑터는 메시지 수가 0에 도달할 때까지 Terminate 을 차단해야 합니다. 수신측에서 이 작업에는 BizTalk Server에 게시되지 않은 모든 대기 중인 요청이 포함됩니다. Terminate가 호출된 후에는 응답 메시지가 수신 어댑터로 배달되지 않습니다.

송신 어댑터에서는 진행 중인 메시지를 적절히 처리해야 합니다. 즉, 성공적으로 전달된 모든 메시지를 어댑터의 개인 응용 프로그램 메시지 큐에서 삭제하여 메시지가 여러 번 전달되지 않게 해야 합니다.

Terminate가 호출된 후 메시징 엔진은 요청-응답 쌍에 대한 응답 메시지를 제외하고 새 메시지 게시 요청을 수락하지 않습니다.