Instanziieren und Initialisieren eines Sendeadapters
Sendeadapter werden standardmäßig erst instanziiert, wenn die erste Nachricht an sie übermittelt wird. Dieses Verfahren wird als "Lazy Creation" bezeichnet und soll Systemressourcen schonen. Nach dem Erstellen des Sendeadapters wird dieser zwischengespeichert und bleibt bestehen, bis der BizTalk Server-Dienst beendet wird.
Das InitTransmitterOnServiceStart-Element der Capabilities-Enumeration weist die Messaging-Engine an, den Sendeadapter beim Starten des Diensts zu erstellen, anstatt bei Bedarf die standardmäßige verzögerte Erstellung zu verwenden.
Für das Senden einer Nachricht gilt hinsichtlich der Batchverarbeitung von Nachrichten ein anderes Modell als beim Empfangen von Nachrichten. Beim Empfang erhält der Adapter eingehende Nachrichten, die in einen von der Messaging-Engine abgerufenen Batch eingefügt werden. Beim Senden ruft die Messaging-Engine einen Batch vom Adapter ab und sendet zu übertragende Nachrichten an den Adapter. Bei beiden Vorgängen wird der Transportproxy zum Abrufen der Objekte im Nachrichtenbatch verwendet.
Initialisieren eines Sendeadapters
Um die Konfiguration und die Bindung an den Transportproxy zu aktivieren, müssen Adapter die folgenden Konfigurationsschnittstellen implementieren:
IBTTransport
IBaseComponent
IBTTransportControl
IPersistPropertyBag
Die folgenden Schritte stellen die Abfolge der Ereignisse bei der Initialisierung eines Sendeadapters dar:
Wenn die Messaging-Engine einen Sendeadapter initialisiert, führt sie zunächst eine QueryInterface für IPersistPropertyBag aus, bei der es sich um eine optionale Schnittstelle handelt. Wenn der Adapter die Schnittstelle implementiert, wird die Handlerkonfiguration im Aufruf der Load-Methode an den Adapter übergeben. Der Adapter stellt anhand dieser Informationen die ordnungsgemäße Konfiguration sicher.
Die Messaging-Engine führt eine QueryInterface für IBTTransportControl aus, die eine obligatorische Schnittstelle ist.
Die Engine ruft IBTTransportControl.Initialize auf und übergibt den Transportproxy für den Adapter.
Die Messaging-Engine führt eine QueryInterface für IBTTransmitter aus.
Wenn die Messaging-Engine diese Schnittstelle erkennt, wird der Adapter als Sender ohne Batchunterstützung behandelt.
Wenn die Messaging-Engine diese Schnittstelle nicht erkennt, führt die Messaging-Engine eine QueryInterface für IBTBatchTransmitter aus, die angibt, dass der Adapter ein batchfähiger Sender ist.
Wenn die Messaging-Engine keine dieser Schnittstellen erkennt, tritt ein Fehler auf, und die Initialisierung schlägt fehl. Wenn erforderliche Schnittstellen nicht erkannt werden, tritt ein Fehler bei der Initialisierung auf.
Im folgenden Diagramm wird diese Abfolge von API-Aufrufen veranschaulicht. Die blau dargestellten Schnittstellen werden vom Adapter implementiert.
Der Adapter kann Nachrichten senden, sobald er initialisiert und konfiguriert wurde.
In der folgenden Abbildung werden die an der Initialisierung eines Sendeadapters beteiligten Objektinteraktionen veranschaulicht.
Workflow der Initialisierung eines Sendeadapters
Hinweis
Adapter sollten die Messaging-Engine nicht in Aufrufen wie IBTTransportControl.Initialize und IPersistPropertyBag.Load blockieren. Die Ausführung umfangreicher Verarbeitungsschritte in diesen Aufrufen kann die Dienststartzeit beeinträchtigen.