Instanziieren von isolierten Adaptern
Wie bereits erläutert, werden isolierte Adapter von BizTalk Server nicht intanziiert. Stattdessen werden Sie in einem anderen Prozess instanziiert und gehostet. Es liegt in der Verantwortung des Adapters, den Transportproxy QueryInterface für IBTTransportProxy zu erstellen und dann IBTTransportProxy aufzurufen. RegisterIsolatedReceiver , um sich bei der Messaging-Engine zu registrieren.
Bei der Registrierung muss der Adapter der Messaging-Engine einen seiner konfigurierten und aktivierten Empfangsspeicherorte übergeben. Der Hostprozess des Adapters muss Anmeldeinformationen für ein Mitglied der Gruppe Benutzer isolierter BizTalk-Hosts verwenden. Ein einfacher Identitätswechsel ist unzureichend, außer der Benutzer ist ein Mitglied dieser Gruppe. Darüber hinaus wird der Adapter abgefragt, um sicherzustellen, dass er über die richtige ClassID verfügt und auf dem Computer ausgeführt wird, der für diesen Host instance konfiguriert wurde. Nachdem der Adapter erfolgreich bei seinem Transportproxy registriert wurde, wird seine Konfiguration mithilfe der Load-Methode der IPersistPropertyBag-Schnittstelle an ihn gesendet.
In der folgenden Abbildung wird diese Folge von API-Aufrufen veranschaulicht. Der Adapter implementiert die blau angezeigten Schnittstellen.
Im folgenden Codefragment werden die Registrierungs-API-Aufrufe veranschaulicht:
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 );
}
}
Implementierungstipp: Es wird empfohlen, dass der Adapter eine Anzahl der laufenden Arbeiten bei sich behält. Der Adapter sollte Beenden blockieren, bis die Nachrichtenanzahl 0 erreicht hat. Auf der Empfangsseite umfassen diese Arbeitsaufgaben alle ausstehenden Anforderungen, die nicht in BizTalk Server veröffentlicht wurden. Antwortnachrichten werden nach dem Aufruf von Terminate nicht an einen Empfangsadapter übermittelt.
Bei Sendeadaptern sollte mit Nachrichten, die gerade verarbeitet werden, entsprechend umgegangen werden. Das bedeutet, dass jede Nachricht, die erfolgreich übermittelt wurde, aus der privaten Nachrichtenwarteschlange des Adapters für die Anwendung gelöscht werden sollte, um zu verhindern, dass Nachrichten mehrfach gesendet werden.
Nachdem "Beenden" aufgerufen wurde, akzeptiert die Messaging-Engine keine Anforderungen zum Veröffentlichen neuer Nachrichten, mit Ausnahme von Antwortnachrichten für Solicit-Antwort-Paare.