Exemplarische Vorgehensweise: Veröffentlichen von WCF-Diensten mit dem WCF-BasicHttp-Adapter
Einführung
In dieser exemplarischen Vorgehensweise wird ein Windows Communication Foundation-Dienst (WCF) als BizTalk-Orchestrierung mithilfe des BizTalk WCF-Dienstveröffentlichungs-Assistenten und des WCF-BasicHttp-Adapters veröffentlicht. Eine BizTalk-Orchestrierung wird einem externen Client, z. B. einem anderen Webdienst oder einer WCF-Anwendung, als WCF-Dienst angezeigt, indem ein WCF-Endpunkt mithilfe des WCF-BasicHttp-Adapters verfügbar gemacht wird. Der WCF-BasicHttp-Adapter besteht aus einem Sendeadapter und einem Empfangsadapter. In diesem Beispiel verwenden Sie nur die Empfangsseite dieses Adapters, um WCF-Dienstanforderungen über das HTTP- oder HTTPS-Protokoll von WCF-Clientanwendungen zu empfangen.
Der WCF-BasicHttp-Adapter verwendet die BasicHttpBinding-Bindung, um eine Transport-/Protokollstapelimplementierung bereitzustellen, die mit der anfänglichen Version von Webdiensten kompatibel ist und als Brücke zwischen BizTalk Server- und WCF-Funktionalität dient. Er ermöglicht die Kommunikation zwischen herkömmlichen ASMX-basierten Webdiensten und Clients, die dem WS-I Basic Profile 1.1 entsprechen und verwendet hierfür entweder den HTTP- oder den HTTPS-Transport mit Textcodierung. Bei Verwendung des WCF-BasicHttp-Adapters können Sie nicht die Vorteile der fortschrittlichen Webkommunikationsfeatures nutzen, die von WS-*-Protokollen unterstützt werden. Wenn dies für Sie wichtig ist, verwenden Sie den WCF-WSHttp-Adapter.
In dieser exemplarischen Vorgehensweise wird gezeigt, wie Sie einen WCF-BasicHttp Empfangsspeicherort erstellen, um eine Orchestrierung als WCF-Dienst zu veröffentlichen. Sie konfigurieren Internetinformationsdienste (IIS), um isoliertes Hosting dieses WCF-Diensts bereitzustellen. Eine Clientanwendung ruft die veröffentlichte WCF-Orchestrierung als Beispiel dafür auf, wie ein externer Client den veröffentlichten WCF-Dienst über das Internet aufrufen kann, um seine Funktionalität zu verwenden.
In dieser exemplarischen Vorgehensweise erwerben Sie Kenntnisse zu den folgenden Aufgaben:
Verwenden Sie in Visual Studio den Befehl Deploy, um den WCF-Dienst in Form einer BizTalk-Orchestrierung innerhalb einer BizTalk-Assembly in einem lokalen instance BizTalk Server bereitzustellen. Bei der Bereitstellung von Visual Studio aus wird eine BizTalk-Anwendung erstellt. Diese wird mit den Assemblys ausgestattet, die Ressourcen wie Orchestrierungen, Pipelines, Schemas und Zuordnungen enthalten, die in der BizTalk-Projektmappe verwendet werden.
Nach der Bereitstellung steht die BizTalk-Orchestrierung zur Konfiguration und Steuerung über die BizTalk Server-Verwaltungskonsole zur Verfügung. In dieser exemplarischen Vorgehensweise konfigurieren Sie den WCF-BasicHttp Empfangsspeicherort so, dass eingehende Nachrichten akzeptiert werden, die an den WCF-Dienst gesendet werden, den der BizTalk WCF-Dienstveröffentlichungs-Assistent erstellt. Der Empfangsspeicherort wird vom isolierten BizTalk-Host in IIS gehostet und fungiert als WCF-Dienst, um auf die eingehenden Anforderungen zu gelangen.
Hinweis
In dieser exemplarischen Vorgehensweise verwenden Sie den BizTalk WCF-Veröffentlichungs-Assistenten und/oder den BizTalk-Webdienstveröffentlichungs-Assistenten, um BizTalk-Orchestrierungen und -Schemas als WCF-Dienste mit den WCF-Adaptern zu veröffentlichen. Um Orchestrierungen und Schemas als Webdienste mit dem SOAP-Adapter zu veröffentlichen, verwenden Sie den BizTalk WCF-Veröffentlichungs-Assistenten und/oder den BizTalk Web Services-Veröffentlichungs-Assistenten.
Voraussetzungen
Stellen Sie zum Ausführen der Schritte in diesem Beispiel sicher, dass in der Umgebung die folgenden Komponenten installiert und die folgenden Voraussetzungen erfüllt sind:
Sowohl der Computer, auf dem die Assemblys erstellt und der Bereitstellungsprozess ausgeführt wird, als auch der Computer, auf dem das Beispiel ausgeführt wird, erfordern Microsoft Windows Server 2008 SP2 und/oder Windows Server 2008 R2, Microsoft .NET Framework 4 und Microsoft BizTalk Server.
Auf dem Computer, auf dem Sie die Assemblys erstellen und den Bereitstellungsvorgang ausführen, muss Microsoft Visual Studio installiert sein.
Der Computer, auf dem das Beispiel ausgeführt wird, erfordert die WCF-Adapter und die WCF-Verwaltungstools. Dies sind Optionen, die während des Setups von Microsoft BizTalk Server installiert werden.
Auf den Computern, die Sie zum Ausführen von Verwaltungsaufgaben verwenden, müssen Sie als Benutzerkonto ausführen, das Mitglied der Gruppe BizTalk Server Administratoren ist, um die BizTalk Server Anwendungseinstellungen in der BizTalk Server Verwaltungskonsole zu konfigurieren. Dieses Benutzerkonto muss auch zu den lokalen Administratoren gehören, damit Sie Anwendungen bereitstellen, Hostinstanzen verwalten sowie andere gegebenenfalls erforderliche Aufgaben ausführen können.
Führen Sie auf jedem Computer, der WCF-Funktionen erfordert, das einmalige Setupverfahren für die WCF-Beispiele unter Einmalige Einrichtungsprozedur für die Windows Communication Foundation-Beispiele aus.
Stellen Sie auf dem Computer, auf dem das Beispiel ausgeführt wird und eine Bindung oder eine .msi-Datei in BizTalk Server importiert, sicher, dass der Host kein vertrauenswürdiger Host ist oder der Import fehlschlägt.
Sie müssen den Code für diese exemplarische Vorgehensweise herunterladen und auf dem Computer extrahieren. Diese exemplarische Vorgehensweise ist Teil des gesamten WCF-Adapterpakets Exemplarische Vorgehensweise. Sie können die DateiWCFAdapterWalkthroughs.exe aus dem BizTalk Server Developer Center unter https://go.microsoft.com/fwlink/?LinkId=194140herunterladen.
So stellen Sie die BizTalk-Beispielprojektmappe „BizTalkApp“ bereit
Führen Sie die selbstextrahierende WCFBasicHttpReceiveAdapter.exe-Datei aus, und extrahieren Sie die Dateien in den Ordner C:\WCFBasicHttpReceiveAdapter .
Öffnen Sie in Microsoft Visual Studio die Datei C:\WCFBasicHttpReceiveAdapter\WCFBasicHttpReceiveAdapter.sln .
Die Assembly Microsoft.Samples.BizTalk.WCFBasicHttpReceiveAdapter.BizTalkApp enthält eine BizTalk Server Orchestrierung, eine Zuordnung und zwei Schemas. Sie muss im globalen Assemblycache (GAC) installiert sein und benötigt eine Schlüsseldatei mit starkem Namen. Klicken Sie mit der rechten Maustaste auf das BizTalkApp-Projekt , und klicken Sie dann auf Eigenschaften. Klicken Sie auf der Seite Eigenschaften auf Signieren, und wählen Sie Assembly signieren aus. Klicken Sie in der Dropdownliste Schlüsseldatei mit starkem Namen auswählen auf den Pfeil nach unten, klicken Sie auf <Neu>, und geben Sie
keyfile.snk
in das Textfeld Name der Schlüsseldatei ein . Deaktivieren Sie Meine Schlüsseldatei mit einem Kennwort schützen, und klicken Sie dann auf OK.Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das BizTalkApp-Projekt, und klicken Sie dann auf Neu erstellen.
Hinweis
Versuchen Sie an diesem Punkt nicht, eine Projektmappe zu erstellen oder die WCFClient-Anwendung zu erstellen. Der WCFClient kann an dieser Stelle im Beispiel nicht erstellt werden.
Erweitern Sie BizTalkApp, und öffnen Sie dann DeliveryProcess.odx zur Überprüfung. Die Orchestrierung übernimmt eine WCF-Anforderung über HTTP mithilfe des WCF-BasicHttp-Adapters. Es ändert die Anforderung mithilfe einer Transformationszuordnung und sendet die Antwort mithilfe desselben WCF-Adapters erneut.
Diese Orchestrierung verfügt über einen logischen Port vom Typ „Anforderungsantwort“, der mit dem WCF-BasicHttp-Adapter veröffentlicht wird. Dieser wird in einem späteren Schritt an einen physischen Port gebunden.
Klicken Sie im Designerfenster mit der rechten Maustaste auf den obersten Knoten von DeliveryProcess.odx , und wählen Sie dann Eigenschaften aus. Stellen Sie sicher, dass die Type Modifier-Eigenschaft des Porttyps Öffentlich ist.
Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf BizTalkApp, und klicken Sie dann auf Eigenschaften.
Wenn die BizTalk Management-Datenbank nicht lokal gehostet wird, ändern Sie die Server-Eigenschaft , wenn Sie einen anderen Datenbankserver verwenden. Klicken Sie auf die Registerkarte Bereitstellung , und ändern Sie dann die Eigenschaft Server so, dass sie auf den Datenbankserver zeigt.
Stellen Sie sicher, dass die Eigenschaft Anwendungsname auf WCFBasicHttpReceiveAdapter festgelegt ist. Dies ist der Name der BizTalk-Anwendung, in der die BizTalk-Projektmappe bereitgestellt wird.
Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf BizTalkApp, und klicken Sie dann auf Bereitstellen. Wenn die Bereitstellung nicht lokal erfolgt, müssen Sie ggf. SQL Server so konfigurieren, dass Remoteverbindungen zulässig sind. Weitere Informationen finden Sie unter Vorgehensweise: Aktivieren von Remoteverbindungen auf SQL Server.
So veröffentlichen Sie die Beispielorchestrierung mit dem Assistenten für BizTalk WCF-Dienstpublishing
In diesem Schritt verwenden Sie die neu bereitgestellte Orchestrierungsassembly und veröffentlichen sie als WCF-Dienst. Klicken Sie hierzu auf Start, zeigen Sie auf Alle Programme, zeigen Sie auf MicrosoftBizTalk Server, und klicken Sie dann auf BizTalk WCF-Dienstveröffentlichungs-Assistent.
Klicken Sie auf der Seite Willkommen beim BizTalk WCF-Dienstveröffentlichungs-Assistent auf Weiter.
Führen Sie auf der Seite WCF-Diensttyp die folgenden Aktionen aus, um den Typ des zu veröffentlichenden WCF-Diensts und die BizTalk-Endpunkte für den Empfang von WCF-Nachrichten anzugeben, und klicken Sie dann auf Weiter:
Wählen Sie die Option Dienstendpunkt aus, in denen Sie einen WCF-Dienst aus einer Orchestrierung in einer Assembly veröffentlichen möchten. Wählen Sie in der Dropdownliste Adaptername (Transporttyp) die Option WCF-BasicHttp aus.
Aktivieren Sie das Kontrollkästchen Metadatenendpunkt aktivieren , damit der von IIS gehostete WCF-Empfangsspeicherort seine WCF-Dienstmetadaten veröffentlicht. Durch Aktivieren dieses Kontrollkästchens wird das httpGetEnabled-Attribut des <serviceMetadata-Elements>
true
in Web.Config auf festgelegt. Diese Metadaten werden abgerufen, wenn eine HTTP/GET-Anforderung sie anfragt. Später verwenden Sie das tool SvcUtil.exe, um diese Daten abzurufen, um eine Proxyklasse für den Clientcode zum Aufrufen des WCF-Diensts zu generieren.Wählen Sie die Option BizTalk-Empfangsspeicherorte erstellen in der folgenden Anwendung aus, um die Empfangsports und Speicherorte zu erstellen, die den einzelnen generierten SVC-Dateien für den WCF-BasicHttp-Adapter entsprechen. Wählen Sie den BizTalk-Anwendungsnamen WCFBasicHttpReceiveAdapter aus, in dem die Empfangsports und Speicherorte generiert werden, und klicken Sie dann auf Weiter.
Der Assistent erstellt eine Bindungsdatei, Binding.XML, um die zugeordneten Empfangsspeicherorte zu speichern. Diese Datei befindet sich im Webverzeichnis und kann später manuell über die BizTalk Server-Verwaltungskonsole importiert werden.
Hinweis
Wenn Sie hier keine bereitgestellte BizTalk-Anwendung auswählen, wird die Standardanwendung ausgewählt.
Wählen Sie auf der Seite WCF-Dienst erstellen die Option BizTalk-Orchestrierungen als WCF-Dienst veröffentlichen aus, und klicken Sie dann auf Weiter. Dadurch wird die im nächsten Schritt angegebene Orchestrierung als WCF-Dienst veröffentlicht.
Wählen Sie die Assembly aus, die die zu veröffentlichende Orchestrierung enthält. Klicken Sie auf der Seite BizTalk-Assembly im Textfeld BizTalk-Assemblydatei (*.dll) auf Durchsuchen , um zum Ordner C:\WCFBasicHttpReceiveAdapter\BizTalkApp\bin\Development zu navigieren, doppelklicken Sie auf die Assembly Microsoft.Samples.BizTalk.WCFBasicHttpReceiveAdapter.BizTalkApp , die die zu veröffentlichende Beispielorchestrierung enthält. Klicken Sie auf Öffnen, und klicken Sie dann auf Weiter.
Stellen Sie auf der Seite Orchestrierungen und Ports sicher, dass der Knoten Port: DeliveryRequestPort auf der Seite ausgewählt ist, und klicken Sie dann auf Weiter. Die Auswahl dieses Knotens bedeutet, dass die entsprechenden Knoten auf höheren Ebenen ebenfalls ausgewählt werden. Der Port wird mit einem Anforderungs-Antwort-Empfangsspeicherort veröffentlicht, der als Host für den WCF-BasicHttp-Adapter dient.
Geben Sie auf der Seite WCF-Diensteigenschaften im Textfeld Zielnamespace des WCF-Diensts einen URI ein, den dieser veröffentlichte WCF-Dienst verwenden soll, und klicken Sie dann auf Weiter. Behalten Sie für diese exemplarische Vorgehensweise den Standard-URI "
<http://tempuri.org/>
" im Textfeld Zielnamespace des WCF-Diensts bei.Führen Sie auf der Seite WCF-Dienstspeicherort die folgenden Aktionen aus, um den Speicherort der zu erstellenden WCF-Dienste anzugeben, und klicken Sie dann auf Weiter:
Geben Sie im Textfeld Speicherort den Namen des Webverzeichnisses ein, in dem der WCF-Dienst ausgeführt wird, oder klicken Sie auf Durchsuchen , und wählen Sie das Webverzeichnis aus. Behalten Sie für diese exemplarische Vorgehensweise den Standardspeicherort (
http://localhost/Microsoft.Samples.BizTalk.WCFBasicHttpReceiveAdapter.BizTalkApp
) im Textfeld Speicherort bei, da der Assemblyname mit dem virtuellen Verzeichnis identisch ist.Wählen Sie die Option Anonymen Zugriff auf WCF-Dienst zulassen aus, und klicken Sie dann auf Weiter. Diese Option ermöglicht den anonymen Zugriff auf das erstellte virtuelle Verzeichnis. Da in dieser exemplarischen Vorgehensweise der Transportsicherheitsmodus ohne Authentifizierung verwendet wird, muss diese Option ausgewählt werden, damit der vom Assistenten erstellten Webanwendung die anonyme Authentifizierung gestattet wird.
Klicken Sie auf der Seite WCF-Dienstzusammenfassung auf Erstellen , um den WCF-Dienst zu erstellen. In diesem Schritt wird ein Empfangsport für die angegebene Orchestrierung erstellt, die über das angegebene Webverzeichnis verfügbar ist.
Klicken Sie auf der Seite BizTalk WCF-Dienstveröffentlichungs-Assistent abschließen auf Fertig stellen.
So aktivieren Sie die BizTalk-Beispielanwendung
Klicken Sie auf Start, zeigen Sie auf Alle Programme, zeigen Sie auf MicrosoftBizTalk Server, und klicken Sie dann auf BizTalk Server Verwaltung.
Erweitern Sie in der BizTalk Server Verwaltungskonsole die Optionen Anwendungen, WCFBasicHttpReceiveAdapter, Orchestrierungen, klicken Sie mit der rechten Maustaste auf die DeliveryProcess-Orchestrierung, klicken Sie auf Eigenschaften, und konfigurieren Sie dann die Bindungsinformationen wie folgt:
Klicken Sie im Dialogfeld Orchestrierungseigenschaften auf Bindungen, und legen Sie host auf BizTalkServerApplication fest.
Wählen Sie im Dialogfeld Orchestrierungseigenschaften einen Empfangsport aus, an den DeliveryRequestPort gebunden werden soll. Wählen Sie für diese exemplarische Vorgehensweise den Empfangsport aus, den der BizTalk WCF-Dienstveröffentlichungs-Assistent im vorherigen Verfahren erstellt hat, und klicken Sie dann auf OK.
Klicken Sie in der BizTalk Server Verwaltungskonsole mit der rechten Maustaste auf WCFBasicHttpReceiveAdapter, klicken Sie auf Start, und klicken Sie dann im Dialogfeld Anwendung starten auf Starten.
So konfigurieren Sie die Webanwendung, die den veröffentlichten WCF-Dienst hostet
Klicken Sie auf Start, zeigen Sie auf Administratortools, und klicken Sie dann auf Internetinformationsdienste (IIS) 7.0-Manager.
Erweitern Sie im IIS-Manager websites, standardwebsite und dann die Webanwendung Microsoft.Samples.BizTalk.WCFBasicHttpReceiveAdapter.BizTalkApp , die der BizTalk WCF-Dienstveröffentlichungs-Assistent erstellt hat .
Erstellen Sie einen Anwendungspool, in dem dieser Dienst ausgeführt werden soll. Klicken Sie mit der rechten Maustaste auf Anwendungspools, klicken Sie auf Anwendungspool hinzufügen, geben Sie einen Namen für den Anwendungspool ein, und klicken Sie dann auf OK.
Erweitern Sie Anwendungspools, klicken Sie mit der rechten Maustaste auf den soeben erstellten Anwendungspool, und wählen Sie dann Erweiterte Einstellungen aus. Geben Sie im Abschnitt Prozessmodell im Feld Identität das Konto ein, das Zugriff auf die BizTalk Server Datenbanken hat.
Klicken Sie im IIS-Manager auf Inhaltsansicht. Klicken Sie im rechten Bereich mit der rechten Maustaste auf die SVC-Datei des WCF-Diensts, die vom BizTalk WCF-Dienstveröffentlichungs-Assistent erstellt wurde, und klicken Sie dann auf Durchsuchen. Dadurch wird internet Explorer geöffnet, um eine Seite anzuzeigen, die angibt, dass Sie erfolgreich einen ausgeführten WCF-Dienst erstellt haben. Die Seite enthält außerdem eine vollständige WSDL-Adresse, die Sie kopieren und mit dem Dienstmetadaten-Tool (svcutil.exe) verwenden können, um Proxycode und eine Konfigurationsdatei abzurufen, mit deren Hilfe Sie eine Clientanwendung für den Dienst entwickeln können.
Kopieren Sie die Befehlszeile von SvcUtil.exe mit der vollständigen WSDL-Adresse aus der von Internet Explorer im vorherigen Schritt angezeigten Seite in die Zwischenablage.
So erstellen Sie eine Proxyklasse „WCFClient“ für die WCF-Beispielclientanwendung
Erstellen Sie eine Proxyklasse, damit die WCF-Clientbeispielanwendung den WCF-Dienst aufrufen kann. Ein Proxy ist zwar nicht erforderlich, das manuelle Schreiben des Codes ist jedoch sehr komplex, daher empfiehlt sich die Erstellung eines Proxys. Öffnen Sie eine Visual Studio-Eingabeaufforderung , und wechseln Sie zum Ordner C:\WCFBasicHttpReceiveAdapter\WCFClient , in dem Sie die Proxyklasse und die Anwendungskonfigurationsdatei ablegen.
Fügen Sie die svcutil.exe Befehlszeile mit der vollständigen WSDL-Adresse ein, die Sie im vorherigen Verfahren kopiert haben, und drücken Sie dann die EINGABETASTE , um die Proxyklasse und die Anwendungskonfigurationsdatei zu erstellen. Diese Befehlszeile erstellt BizTalkServiceInstance.cs für die Proxyklasse und output.config für die Anwendungskonfigurationsdatei.
Klicken Sie in Visual Studio in Projektmappen-Explorer mit der rechten Maustaste auf WCFClient, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Vorhandenes Element.
Navigieren Sie im Dialogfeld Vorhandenes Element hinzufügen zum Ordner WCFClient, wählen Sie in der Dropdownliste Dateityp die Option Alle Dateien (*.*) aus, wählen Sie bizTalkServiceInstance.cs und output.config Dateien aus, und klicken Sie dann auf Hinzufügen.
Erweitern Sie für das WCFClient-Projektverweise, und stellen Sie dann sicher, dass das WCFClient-ProjektSystem.ServiceModel als einen seiner Verweise aufweist.
Erweitern Sie das WCFClient-Projekt , klicken Sie mit der rechten Maustaste auf output.config, klicken Sie auf Umbenennen, und geben Sie dann App.config für den neuen Namen ein.
Doppelklicken Sie auf Program.cs , um zu überprüfen, wie der veröffentlichte WCF-Dienst mithilfe der von Svcutil.exegenerierten Proxyklasse aufgerufen wird. Aufrufe zum Instanziieren und Aufrufen eines WCF-Diensts scheinen in der Einfachheit der Programmierung mit der Microsoft_Samples_BizTalk_WCFBasicHttpReceiveAdapter_BizTalkApp_DeliveryProcess_DeliveryRequestPortClient-Klasse lokale Aufrufe zu sein. Es ist kein zusätzlicher Code erforderlich, um einen Aufruf eines WCF-Remotediensts zu tätigen.
Klicken Sie in Visual Studio im Menü Debuggen auf Starten ohne Debuggen , um WCFClient auszuführen. Der Clientcode erstellt eine DeliveryItem-Nachricht und ruft den WCF-Dienst auf, wobei Die Adresse, die ProductID und der Betrag übergeben werden.
DeliveryItem deliveryRequestItem = new DeliveryItem(); deliveryRequestItem.Address = "One Microsoft Way"; deliveryRequestItem.ProductID = "00A120c"; deliveryRequestItem.Amount = "300"; DeliveryRequestPortClient deliveryProcessClient = new DeliveryRequestPortClient("BasicHttpBinding_ITwoWayAsync"); DeliveryItem1 deliveryConfirmation = deliveryProcessClient.Submit(deliveryRequestItem);
Wenn der Client die Antwortnachricht erfolgreich vom veröffentlichten WCF-Dienst zurück empfängt, wird die Übermittlungsbestätigungsnummer (eine Verkettung von ProductID und Adresse) in der Antwortnachricht angezeigt.
Submit operation called with deliveryRequestItem
Zurückgesendete Lieferbestätigungsnummer: 00A120c300One Microsoft Way
Press any key to continue . . .