Freigeben über


Bereitstellen eines IIS-gehosteten WCF-Diensts

Das Entwickeln und Bereitstellen eines Windows Communication Foundation (WCF)-Diensts, der in Internetinformationsdienste (INTERNET Information Services, IIS) gehostet wird, besteht aus den folgenden Aufgaben:

  • Stellen Sie sicher, dass IIS, ASP.NET, WCF und die WCF-Aktivierungskomponente ordnungsgemäß installiert und registriert sind.

  • Erstellen Sie eine neue IIS-Anwendung, oder verwenden Sie eine vorhandene ASP.NET Anwendung.

  • Erstellen Sie eine SVC-Datei für den WCF-Dienst.

  • Stellen Sie die Dienstimplementierung für die IIS-Anwendung bereit.

  • Konfigurieren Sie den WCF-Dienst.

Eine ausführliche exemplarische Vorgehensweise zum Erstellen eines von IIS gehosteten WCF-Diensts finden Sie unter How to: Host a WCF Service in IIS.

Sicherstellen, dass IIS, ASP.NET und WCF ordnungsgemäß installiert und registriert sind

WCF, IIS und ASP.NET müssen installiert werden, damit IIS-gehostete WCF-Dienste ordnungsgemäß funktionieren. Die Verfahren zum Installieren von WCF (als Teil von .NET Framework), ASP.NET und IIS variieren je nach Betriebssystem. Weitere Informationen zum Installieren von WCF und .NET Framework finden Sie unter Installieren von .NET Framework für Entwickler. Um IIS unter Windows 10 zu installieren, öffnen Sie "Programme und Features " in der Systemsteuerung , und wählen Sie dann "Windows-Features aktivieren oder deaktivieren" aus. Wählen Sie unter Windows-FeaturesInternetinformationsdienste und dann "OK" aus.

Hervorgehobene Windows-Features mit IIS

Anweisungen zum Installieren von IIS auf anderen Betriebssystemen finden Sie unter Installieren von IIS unter Windows Vista und Windows 7 und Installieren von IIS 8.5 unter Windows Server 2012 R2.

Der Installationsprozess für .NET Framework registriert WCF automatisch bei IIS, wenn IIS bereits auf dem Computer vorhanden ist. Wenn IIS nach .NET Framework installiert ist, ist ein weiterer Schritt erforderlich, um WCF mit IIS und ASP.NET zu registrieren. Je nach Betriebssystem können Sie dies wie folgt tun:

Erstellen einer neuen IIS-Anwendung oder Wiederverwenden einer vorhandenen ASP.NET Anwendung

IIS-gehostete WCF-Dienste müssen sich innerhalb einer IIS-Anwendung befinden. Sie können eine neue IIS-Anwendung erstellen, um WCF-Dienste exklusiv zu hosten. Alternativ können Sie einen WCF-Dienst in einer vorhandenen Anwendung bereitstellen, die bereits ASP.NET 2.0-Inhalte hosten (z. B. .aspx Seiten und ASP.NET Webdienste [ASMX]). Weitere Informationen zu diesen Optionen finden Sie in den Abschnitten "Hosting WCF Side-by-Side with ASP.NET" und "Hosting WCF Services in ASP.NET Compatibility Mode" in WCF Services and ASP.NET.

Beachten Sie, dass IIS 6.0 und höhere Versionen in regelmäßigen Abständen eine isolierte objektorientierte Programmieranwendung neu starten. Der Standardwert beträgt 1740 Minuten. Der unterstützte Maximalwert beträgt 71.582 Minuten. Dieser Neustart kann deaktiviert werden. Weitere Informationen zu dieser Eigenschaft finden Sie unter PeriodicRestartTime.

Erstellen einer SVC-Datei für den WCF-Dienst

IN IIS gehostete WCF-Dienste werden in der IIS-Anwendung als spezielle Inhaltsdateien (SVC-Dateien) dargestellt. Dieses Modell ähnelt der Darstellung von ASMX-Seiten innerhalb einer IIS-Anwendung als ASMX-Dateien. Eine SVC-Datei enthält eine WCF-spezifische Verarbeitungsdirektive (@ServiceHost), mit der die WCF-Hostinginfrastruktur gehostete Dienste als Reaktion auf eingehende Nachrichten aktivieren kann. Die häufigste Syntax für eine SVC-Datei ist in der folgenden Anweisung.

<% @ServiceHost Service="MyNamespace.MyServiceImplementationTypeName" %>

Es besteht aus der @ServiceHost-Direktive und einem einzigen Attribut, Service. Der Wert des Service Attributs ist der ClR-Typname (Common Language Runtime) der Dienstimplementierung. Die Verwendung dieser Direktive entspricht im Grunde dem Erstellen eines Diensthosts mit dem folgenden Code.

new ServiceHost( typeof( MyNamespace.MyServiceImplementationTypeName ) );

Zusätzliche Hostingkonfiguration, z. B. das Erstellen einer Liste von Basisadressen für den Dienst, kann ebenfalls erfolgen. Sie können auch eine benutzerdefinierte ServiceHostFactory Verwenden, um die Direktive für die Verwendung mit benutzerdefinierten Hostinglösungen zu erweitern. Die IIS-Anwendungen, die WCF-Dienste hosten, sind nicht für die Verwaltung der Erstellung und Lebensdauer von ServiceHost Instanzen verantwortlich. Die verwaltete WCF-Hostinginfrastruktur erstellt die erforderliche ServiceHost Instanz dynamisch, wenn die erste Anforderung für die SVC-Datei empfangen wird. Die Instanz wird erst freigegeben, wenn sie explizit durch Code geschlossen wird oder wenn die Anwendung wiederverwendet wird.

Weitere Informationen zur Syntax für SVC-Dateien finden Sie unter @ServiceHost.

Bereitstellen der Dienstimplementierung in der IIS-Anwendung

In IIS gehostete WCF-Dienste verwenden das gleiche dynamische Kompilierungsmodell wie ASP.NET 2.0. Wie bei ASP.NET können Sie den Implementierungscode für von IIS gehostete WCF-Dienste an verschiedenen Standorten wie folgt bereitstellen:

  • Als vorkompilierte .dll Datei im globalen Assemblycache (GAC) oder im Verzeichnis "\bin" der Anwendung. Vorkompilierte Binärdateien werden erst aktualisiert, wenn eine neue Version der Klassenbibliothek bereitgestellt wird.

  • Als nicht kompilierte Quelldateien im Verzeichnis "\App_Code" der Anwendung. Quelldateien, die sich in diesem Verzeichnis befinden, sind dynamisch erforderlich, wenn die erste Anforderung der Anwendung verarbeitet wird. Alle Änderungen an Dateien im Verzeichnis \App_Code führen dazu, dass die gesamte Anwendung wiederverwendet und neu kompiliert wird, wenn die nächste Anforderung empfangen wird.

  • Als nicht kompilierter Code direkt in der .svc-Datei platziert. Implementierungscode befindet sich zudem inline in der SVC-Datei, nach der @ServiceHost-Direktive. Alle Änderungen am Inlinecode führen dazu, dass die Anwendung wiederverwendet und neu kompiliert wird, wenn die nächste Anforderung empfangen wird.

Weitere Informationen zum Kompilierungsmodell ASP.NET 2.0 finden Sie unter ASP.NET Kompilierungsübersicht.

Konfigurieren des WCF-Diensts

Von IIS gehostete WCF-Dienste speichern ihre Konfiguration in den Anwendungen Web.config Datei. Von IIS gehostete Dienste verwenden dieselben Konfigurationselemente und Syntax wie WCF-Dienste, die außerhalb von IIS gehostet werden. Die folgenden Einschränkungen gelten jedoch nur für die IIS-Hostingumgebung:

  • Basisadressen für von IIS gehostete Dienste.

  • Anwendungen, die WCF-Dienste außerhalb von IIS hosten, können die Basisadresse der dienste steuern, die sie hosten, indem eine Reihe von Basisadressen-URIs an den ServiceHost Konstruktor übergeben oder ein <Hostelement> in der Konfiguration des Diensts bereitgestellt wird. In IIS gehostete Dienste haben nicht die Möglichkeit, ihre Basisadresse zu steuern; Die Basisadresse eines von IIS gehosteten Diensts ist die Adresse der SVC-Datei.

Endpunktadressen für IIS-Hosted Dienste

Wenn in IIS gehostet, werden Endpunktadressen immer als relativ zur Adresse der SVC-Datei betrachtet, die den Dienst darstellt. Wenn zum Beispiel die Basisadresse eines WCF-Dienstes http://localhost/Application1/MyService.svc ist, mit der folgenden Endpunktkonfiguration:

<endpoint address="anotherEndpoint" />

Dadurch wird ein Endpunkt bereitgestellt, der an http://localhost/Application1/MyService.svc/anotherEndpoint erreicht werden kann.

Ebenso stellt das Endpunktkonfigurationselement, das eine leere Zeichenfolge als relative Adresse verwendet, einen Endpunkt bereit, der an http://localhost/Application1/MyService.svcder Basisadresse erreichbar ist.

<endpoint address="" />

Sie müssen immer relative Endpunktadressen für von IIS gehostete Dienstendpunkte verwenden. Das Bereitstellen einer vollqualifizierten Endpunktadresse (zum Beispiel http://localhost/MyService.svc) kann zu Fehlern bei der Bereitstellung des Dienstes führen, wenn die Endpunktadresse nicht auf die IIS-Anwendung verweist, die den Dienst hostet und den Endpunkt bereitstellt. Die Verwendung relativer Endpunktadressen für gehostete Dienste vermeidet diese potenziellen Konflikte.

Verfügbare Transporte

WCF-Dienste, die in IIS 5.1 und IIS 6.0 gehostet werden, sind auf die Verwendung httpbasierter Kommunikation beschränkt. Auf diesen IIS-Plattformen führt die Konfiguration eines gehosteten Diensts zur Verwendung einer nicht-HTTP-Bindung zu einem Fehler während der Dienstaktivierung. Für IIS 7.0 umfassen die unterstützten Transporte HTTP, Net.TCP, Net.Pipe, Net.MSMQ und msmq.formatname für die Abwärtskompatibilität mit vorhandenen MSMQ-Anwendungen.

HTTP-Transportsicherheit

IIS-gehostete WCF-Dienste können HTTP-Transportsicherheit (z. B. HTTPS- und HTTP-Authentifizierungsschemas wie Standard-, Digest- und Windows Integrated Authentication) verwenden, solange das virtuelle IIS-Verzeichnis, das den Dienst enthält, diese Einstellungen unterstützt. Die HTTP-Transportsicherheitseinstellungen für die Bindung eines gehosteten Endpunkts müssen mit den Transportsicherheitseinstellungen im virtuellen IIS-Verzeichnis übereinstimmen, das ihn enthält.

Beispielsweise muss sich ein WCF-Endpunkt, der für die Verwendung der HTTP-Digestauthentifizierung konfiguriert ist, in einem virtuellen IIS-Verzeichnis befinden, das auch so konfiguriert ist, dass die HTTP-Digestauthentifizierung zulässig ist. Nicht übereinstimmende Kombinationen von IIS-Einstellungen und WCF-Endpunkteinstellungen führen während der Dienstaktivierung zu einem Fehler.

Siehe auch