Übersicht über das WCF-Kanalmodell mit dem SQL-Adapter
Um Vorgänge für den Microsoft BizTalk-Adapter für SQL Server aufzurufen, fungiert Ihr Code als WCF-Client und sendet ausgehende Vorgänge an den Adapter. Im WCF-Kanalmodell ruft Ihr Code Vorgänge auf dem Adapter auf, indem er eine Anforderungsnachricht über einen Kanal sendet.
Um abrufbasierte Datenänderungsmeldungen mithilfe des Adapters zu empfangen, fungiert Ihr Code als WCF-Dienst und empfängt den eingehenden Abruf-, TypedPolling- oder Benachrichtigungsvorgang vom Adapter. Anders ausgedrückt: Ihr Code empfängt eine Anforderungsmeldung für diese Vorgänge vom Adapter über einen Kanal.
Die Themen in diesem Abschnitt bieten eine Übersicht über die Verwendung des SQL-Adapters mit dem WCF-Kanalmodell.
Übersicht über das WCF-Kanalmodell
Clients und Dienste kommunizieren durch den Austausch von SOAP-Nachrichten. Das WCF-Kanalmodell ist eine Abstraktion dieses Nachrichtenaustauschs auf niedriger Ebene. Es stellt Schnittstellen und Typen bereit, mit denen Sie Nachrichten mithilfe eines mehrstufigen Protokollstapels senden und empfangen können, der als Kanalstapel bezeichnet wird. Jede Ebene des Stapels besteht aus einem Kanal, und jeder Kanal wird aus einer WCF-Bindung erstellt. Auf der untersten Ebene befindet sich der Transportkanal. Der Transportkanal implementiert den zugrunde liegenden Transportmechanismus zwischen einem Dienst und einem Client und stellt jede Nachricht den höheren Ebenen (und letztendlich der nutzenden Anwendung) als System.ServiceModel.Message dar. Die WCF Message-Klasse ist eine Abstraktion einer SOAP-Nachricht. WCF stellt mehrere Kanalschnittstellen bereit, die als Kanalformen bezeichnet werden, die die grundlegenden SOAP-Nachrichtenaustauschmuster modellieren, z. B. Anforderung/Antwort oder unidirektionale. Eine WCF-Transportbindung stellt eine Implementierung von einem oder mehreren Kanalformen bereit, die höhere Ebenen zum Senden und Empfangen von Nachrichten verwenden können. Weitere Informationen zum WCF-Kanalmodell finden Sie unter Übersicht über das Kanalmodell.
Der SQL-Adapter ist eine benutzerdefinierte WCF-Transportbindung, die eine SQL Server-Datenbank als WCF-Dienst verfügbar macht.
Unterstützte Kanalformen für den SQL Server-Adapter
Der Adapter implementiert die folgenden WCF-Kanal-Shapes:
IRequestChannel (System.ServiceModel.Channels.IRequestChannel). Die IRequestChannel-Schnittstelle implementiert die Clientseite eines Nachrichtenaustauschs zwischen Anforderung und Antwort. Sie können einen IRequestChannel verwenden, um Vorgänge auszuführen, für die Sie eine Antwort nutzen möchten, z. B. zum Ausführen einer SELECT-Abfrage für eine Tabelle.
IOutputChannel (System.ServiceModel.Channels.IOutputChannel). Dieses Shape implementiert die Clientseite eines unidirektionale Nachrichtenaustauschs. Sie können einen IOutputChannel verwenden, um einen Vorgang aufzurufen, für den Sie keine Antwort verwenden müssen, z. B. um eine Prozedur ohne Rückgabeparameter aufzurufen.
Wichtig
Alle zugrunde liegenden Aufrufe des Adapters an den SQL Server-Client sind synchron. Dies schließt Aufrufe des SQL Server-Clients ein, die das Ergebnis von Vorgängen sind, die über einen IOutputChannel aufgerufen werden. Wenn Sie einen IOutputChannel verwenden, verwirft der Adapter die vom SQL Server-Client empfangene Antwort.
IInputChannel (System.ServiceModel.Channels.IInputChannel). Dieses Shape implementiert die Dienstseite eines unidirektionale Nachrichtenaustauschs. Sie verwenden einen IInputChannel , um Nachrichten für eingehende Vorgänge wie Abrufe oder Benachrichtigungen vom Adapter zu empfangen.
Wie jede WCF-Bindung verwendet der SQL-Adapter ein Factorymuster, um Kanäle für Anwendungscode bereitzustellen. Sie verwenden ein Microsoft.Adapters.SQLBinding-Objekt , um Instanzen von zu erstellen:
System.ServiceModel.ChannelFactory<IRequestChannel> , um IRequestChannel-Kanäle bereitzustellen, die Sie zum Aufrufen von Anforderungsantwortvorgängen auf dem Adapter verwenden können.
System.ServiceModel.ChannelFactory<IOutputChannel> , um IOutputChannel-Kanäle bereitzustellen, mit denen Sie unidirektionale Vorgänge auf dem Adapter aufrufen können.
System.ServiceModel.IChannelListener<IInputChannel> , um IInputChannel-Kanäle bereitzustellen, die Sie zum Empfangen von Nachrichten für eingehende Vorgänge wie Abruf oder Benachrichtigung vom Adapter verwenden können.
Erstellen von Nachrichten für den SQL Server-Datenbankadapter im WCF-Kanalmodell
In WCF stellt die System.ServiceModel.Channels.Message-Klasse eine Im Arbeitsspeicherdarstellung einer SOAP-Nachricht bereit. Sie erstellen eine Message-instance, indem Sie die statische Message.Create-Methode aufrufen.
Es gibt zwei wichtige Teile der SOAP-Nachricht, die Sie angeben müssen, wenn Sie eine Message instance erstellen, die an den SQL-Adapter gesendet werden soll.
Die Nachrichtenaktion ist eine Zeichenfolge, die Teil des SOAP-Nachrichtenheaders ist. Die Meldungsaktion identifiziert den Vorgang, der für die Datenbank aufgerufen werden soll. Im Folgenden wird die Meldungsaktion angezeigt, die angegeben wurde, um den Select-Vorgang für die Tabelle Employee aufzurufen:
TableOp/Select/dbo/Employee
.Der Nachrichtentext enthält die Parameterdaten für den Vorgang. Der Nachrichtentext besteht aus wohlgeformten XML-Dateien, die dem Nachrichtenschema entsprechen, das vom SQL-Adapter für den angeforderten Vorgang erwartet wird. Der folgende Nachrichtentext gibt einen Select-Vorgang für die Tabelle Employee an (SELECT * FROM Employee WHERE Employee_ID=10001).
<Select xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee"> <Columns>*</Columns> <Query>where Employee_ID=10001</Query> </Select>
Informationen zu den SQL-Adapter-Nachrichtenschemas und Nachrichtenaktionen für Vorgänge finden Sie unter Nachrichten und Nachrichtenschemas für BizTalk-Adapter für SQL Server.
Diese Create-Methode ist überladen und bietet viele verschiedene Optionen zum Bereitstellen des Nachrichtentexts. Der folgende Code zeigt, wie Sie eine Message instance erstellen, indem Sie einen XmlReader verwenden, um den Nachrichtentext anzugeben. In diesem Code wird der Nachrichtentext aus einer Datei gelesen.
XmlReader readerIn = XmlReader.Create("SelectInput.xml");
Message messageIn = Message.CreateMessage(MessageVersion.Default,
"TableOp/Select/dbo/Employee",
readerIn);
Wichtig
Sie müssen eine Nachrichtenaktion in Ihrem Nachrichten-instance bereitstellen. Dies erfolgt in der Regel, wenn die meldungsbasierte instance erstellt wird.