Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema werden neue Features für Windows Communication Foundation (WCF) Version 4.5 erläutert.
gRPC als Alternative zu WCF
gRPC ist ein modernes RPC-Framework, das eine beliebte Alternative zu WCF ist. gRPC basiert auf HTTP/2, das eine Reihe von Vorteilen gegenüber WCF bietet, einschließlich:
- Leistung: gRPC ist viel effizienter als WCF, insbesondere für lang andauernde Verbindungen.
- Skalierbarkeit: gRPC ist darauf ausgelegt, auf eine große Anzahl von Clients und Servern zu skalieren.
- Sicherheit: gRPC unterstützt eine Vielzahl von Sicherheitsmechanismen, einschließlich TLS und Authentifizierung.
- Plattformübergreifend: gRPC ist plattformneutral und kann mit einer Vielzahl von Programmiersprachen verwendet werden.
Weitere Informationen zum Entwickeln oder Migrieren von WCF-Apps zu gRPC finden Sie unter:
- Warum wir gRPC für WCF-Entwickler empfehlen
- Vergleich von WCF mit gRPC
- Einführung in gRPC für WCF-Entwickler
WCF-Vereinfachungsfunktionen
Es wurde viel Arbeit geleistet, um WCF 4.5-Anwendungen einfacher zu entwickeln und zu verwalten. Weitere Informationen finden Sie unter WCF-Vereinfachungsfeatures.
Aufgabenbasierte Asynchrone Unterstützung
Standardmäßig generiert "Dienstverweis hinzufügen" Aufgabenrückgabemethoden für asynchrone Dienstvorgänge. Dies geschieht sowohl für synchrone als auch für asynchrone Methoden. Auf diese Weise können Sie die Dienstvorgänge asynchron mit dem neuen Task-basierten asynchronen Programmiermodell aufrufen. Wenn Sie die generierte Proxymethode aufrufen, erstellt WCF ein Task -Objekt, das den asynchronen Vorgang darstellt und diese Aufgabe an Sie zurückgibt. Die Aufgabe wird abgeschlossen, wenn der Vorgang abgeschlossen ist. Bei der Implementierung eines asynchronen Vorgangs können Sie ihn als aufgabenbasierten asynchronen Vorgang implementieren. Weitere Informationen finden Sie unter synchronen und asynchronen Vorgängen.
Vereinfachte generierte Konfigurationsdateien
Wenn Sie einen Dienstverweis in Visual Studio hinzufügen oder das SvcUtil.exe Tool verwenden, wird eine Clientkonfigurationsdatei generiert. In früheren Versionen von WCF enthielten diese Konfigurationsdateien den Wert jeder Bindungseigenschaft, auch wenn der Wert der Standardwert ist. In WCF 4.5 enthalten die generierten Konfigurationsdateien nur die Bindungseigenschaften, die auf einen Nicht-Standardwert festgelegt sind.
Weitere Informationen finden Sie unter WCF-Vereinfachungsfeatures.
Contract-First Entwicklung
WCF unterstützt jetzt die Vertrag zuerst-Entwicklung. Die svcutil.exe verfügt über einen /serviceContract-Switch, mit dem Sie Dienst- und Datenverträge aus einem WSDL-Dokument generieren können.
Hinzufügen eines Dienstverweises aus einem portablen Teilmengeprojekt
Tragbare Teilmengenprojekte ermöglichen .NET-Assemblyprogrammierern die Verwaltung einer einzelnen Quellstruktur und eines Buildsystems, während weiterhin mehrere .NET-Plattformen (Desktop, Silverlight, Windows Phone und Xbox) unterstützt werden. Portable Subset-Projekte verweisen nur auf tragbare .NET-Bibliotheken, die Assemblys sind, die auf jeder .NET-Plattform verwendet werden können. Die Entwicklerumgebung entspricht dem Hinzufügen eines Dienstverweises innerhalb einer anderen WCF-Clientanwendung. Weitere Informationen finden Sie unter Dienstverweis in einem portablen Teilprojekt hinzufügen.
Standardmäßiger ASP.NET-Kompatibilitätsmodus geändert
WCF bietet ASP.NET Kompatibilitätsmodus, um Entwicklern vollzugriff auf die Features in der ASP.NET HTTP-Pipeline beim Schreiben von WCF-Diensten zu gewähren. Um diesen Modus zu verwenden, müssen Sie das Attribut aspNetCompatibilityEnabled im Abschnitt <serviceHostingEnvironment> von „web.config“ auf „true“ festlegen. Darüber hinaus muss für jeden Dienst in dieser App-Domäne die RequirementsMode-Eigenschaft in AspNetCompatibilityRequirementsAttribute auf Allowed oder Required festgelegt sein. Standardmäßig ist AspNetCompatibilityRequirementsAttribute jetzt auf Allowed gesetzt. Weitere Informationen finden Sie unter WCF-Dienste und ASP.NET.
Neue Transportstandardwerte
Um die Konfiguration zu vereinfachen, wurden eine Reihe von Standardwerten für Transporteigenschaften geändert. Weitere Informationen finden Sie unter WCF-Vereinfachungsfeatures.
XmlDictionaryReaderQuotas
XmlDictionaryReaderQuotas enthält konfigurierbare Kontingentwerte für XML-Wörterbuchleser, die den von einem Encoder beim Erstellen einer Nachricht genutzten Arbeitsspeicher einschränken. Während diese Kontingente konfigurierbar sind, haben sich die Standardwerte geändert, um die Möglichkeit zu mindern, dass ein Entwickler sie explizit festlegen muss. Weitere Informationen finden Sie unter WCF-Vereinfachungsfeatures.
WCF-Konfigurationsüberprüfung
Im Rahmen des Buildprozesses in Visual Studio werden WCF-Konfigurationsdateien jetzt auf Attribute überprüft, die innerhalb des Projekts definiert sind. Eine Liste der Überprüfungsfehler oder Warnungen wird in Visual Studio angezeigt, wenn die Überprüfung fehlschlägt.
XML-Editor-QuickInfos
Damit neue und vorhandene WCF-Dienstentwickler ihre Dienste konfigurieren können, stellt der XML-Editor von Visual Studio jetzt QuickInfos für jedes Konfigurationselement und seine Eigenschaften bereit, die Teil der Dienstkonfigurationsdatei sind.
Streamingverbesserungen
Unterstützung für echtes asynchrones Streaming hinzugefügt, bei dem die Sendeseite jetzt keine Threads blockiert, wenn die Empfangsseite nicht liest oder langsam liest, um die Skalierbarkeit zu erhöhen. Die Einschränkung der Nachrichtenpufferung wurde entfernt, wenn ein Client eine gestreamte Nachricht an einen vom IIS gehosteten WCF-Dienst sendet. Weitere Informationen finden Sie unter WCF-Vereinfachungsfeatures.
Vereinfachung der Bereitstellung eines Endpunkts über HTTPS mit IIS
Es wurde eine HTTPS-Protokollzuordnung hinzugefügt, um die Bereitstellung eines Endpunkts über HTTPS zu vereinfachen. Um einen HTTPS-Endpunkt zu aktivieren, stellen Sie sicher, dass Ihre Website über ein HTTPS-Bindungs- und SSL-Zertifikat konfiguriert ist, und aktivieren Sie dann einfach HTTPS für das virtuelle Verzeichnis, in dem der Dienst gehostet wird. Wenn Metadaten für den Dienst aktiviert sind, wird sie auch über HTTPS verfügbar gemacht.
Generieren eines einzelnen WSDL-Dokuments
Einige WSDL-Verarbeitungsstapel von Drittanbietern können WSDL-Dokumente, die Abhängigkeiten von anderen Dokumenten über einen xsd:import aufweisen, nicht verarbeiten. WCF ermöglicht ihnen jetzt anzugeben, dass alle WSDL-Informationen in einem einzelnen Dokument zurückgegeben werden. Um ein einzelnes WSDL-Dokument anzufordern, fügen Sie "?singleWSDL" an den URI an, wenn Metadaten vom Dienst angefordert werden.
WebSocket-Unterstützung
WebSockets ist eine Technologie, die eine echte bidirektionale Kommunikation über Ports 80 und 443 mit Leistungsmerkmalen wie TCP bietet. Es wurden zwei neue Bindungen hinzugefügt, um die Kommunikation über einen WebSocket-Transport zu unterstützen. NetHttpBinding und NetHttpsBinding. Weitere Informationen finden Sie unter: Vom System bereitgestellte Bindungen.
Neue Transportstandardwerte
In der folgenden Tabelle werden die Einstellungen beschrieben, die geändert wurden und wo zusätzliche Informationen zu finden sind.
| Eigentum | Ein | Neuer Standardwert | Weitere Informationen finden Sie unter |
|---|---|---|---|
| Kanalinitialisierungszeitüberschreitung | NetTcpBinding | 30 Sekunden | ChannelInitializationTimeout |
| Listenrückstand | NetTcpBinding | 12 * Anzahl der Prozessoren | ListenBacklog |
| maxPendingAccepts | ConnectionOrientedTransportBindingElement SMSvcHost.exe |
2 * Anzahl der Prozessoren für den Transport 4 * Anzahl der Prozessoren für SMSvcHost.exe |
MaxPendingAccepts Konfigurieren des Net.TCP-Portfreigabediensts |
| maximaleWartendeVerbindungen | ConnectionOrientedTransportBindingElement | 12 * Anzahl der Prozessoren | MaxPendingConnections |
| receiveTimeout | SMSvcHost.exe | 30 Sekunden | Konfigurieren des Net.TCP-Portfreigabediensts |
Konfigurieren von WCF-Diensten in Code
Windows Communication Foundation (WCF) ermöglicht Entwicklerinnen und Entwicklern das Konfigurieren von Diensten mithilfe von Konfigurationsdateien oder Code. Konfigurationsdateien sind nützlich, wenn ein Dienst konfiguriert werden muss, nachdem er bereitgestellt wurde. Bei der Verwendung von Konfigurationsdateien muss ein IT-Experte nur die Konfigurationsdatei aktualisieren, es ist keine Neukompilierung erforderlich. Konfigurationsdateien können jedoch komplex und schwierig zu pflegen sein. Das Debuggen von Konfigurationsdateien wird nicht unterstützt. Auf Konfigurationselemente wird über den Namen verwiesen, was die Erstellung von Konfigurationsdateien fehleranfällig und schwierig macht. WCF ermöglicht auch das Konfigurieren von Diensten im Code. In früheren Versionen von WCF (4.0 und früher) war das Konfigurieren von Diensten im Code in selbstgehosteten Szenarien einfach, weil die ServiceHost-Klasse die Möglichkeit bot, Endpunkte und Verhaltensweisen vor dem Aufrufen von ServiceHost.Open zu konfigurieren. In im Web gehosteten Szenarien haben Sie jedoch keinen Zugriff auf die ServiceHost Klasse. Um einen webgehosteten Dienst zu konfigurieren, mussten Sie eine System.ServiceModel.ServiceHostFactory erstellen, durch die ein ServiceHostFactory erstellt und alle erforderlichen Konfigurationsschritte ausgeführt wurden. Ab .NET Framework 4.5 bietet WCF eine einfachere Möglichkeit, selbstgehostete und webgehostete Dienste im Code zu konfigurieren. Weitere Informationen finden Sie unter Konfigurieren von WCF-Diensten im Code.
ChannelFactory-Zwischenspeicherung
WCF-Clientanwendungen verwenden die ChannelFactory<TChannel> Klasse, um einen Kommunikationskanal mit einem WCF-Dienst zu erstellen. Das Erstellen von ChannelFactory<TChannel> Instanzen verursacht einen gewissen Aufwand, da er die folgenden Vorgänge umfasst:
Erstellen des ContractDescription Baums
Reflektieren aller erforderlichen CLR-Typen
Erstellen des Kanalstapels
Ressourcen entsorgen
Um den Mehraufwand zu minimieren, kann WCF Kanalfactorys zwischenspeichern, wenn Sie einen WCF-Clientproxy verwenden. Weitere Informationen finden Sie unter Channel Factory und Caching.
Komprimierung und binärer Encoder
Ab WCF 4.5 fügt der WCF-Binäre Encoder Unterstützung für die Komprimierung hinzu. Der Komprimierungstyp wird mit der CompressionFormat Eigenschaft konfiguriert. Sowohl der Client als auch der Dienst müssen die CompressionFormat Eigenschaft konfigurieren. Komprimierung funktioniert für HTTP-, HTTPS- und TCP-Protokolle. Wenn ein Client die Komprimierung angibt, der Dienst dies jedoch nicht unterstützt, wird eine Protokollausnahme ausgelöst, die angibt, dass ein Protokollkonflikt auftritt. Weitere Informationen finden Sie unter Auswählen eines Nachrichten-Encoders.
UDP
Unterstützung für einen UDP-Transport wurde hinzugefügt, mit dem Entwickler Dienste schreiben können, die "Fire and Forget"-Messaging verwenden. Ein Client sendet eine Nachricht an einen Dienst und erwartet keine Antwort vom Dienst.
Unterstützung für mehrere Authentifizierungen
Unterstützung wurde hinzugefügt, um mehrere Authentifizierungsmodi, wie von IIS unterstützt, auf einem einzelnen WCF-Endpunkt bei Verwendung der HTTP-Transport- und Transportsicherheit zu unterstützen. MIT IIS können Sie mehrere Authentifizierungsmodi in einem virtuellen Verzeichnis aktivieren. Mit diesem Feature kann ein einzelner WCF-Endpunkt die für das virtuelle Verzeichnis aktivierten Authentifizierungsmodi unterstützen, in dem der WCF-Dienst gehostet wird.
IDN-Unterstützung
Unterstützung wurde hinzugefügt, um WCF-Dienste mit internationalisierten Domänennamen zuzulassen. Weitere Informationen finden Sie unter WCF und Internationalized Domain Names.
HttpClient
Es wurde eine neue Klasse HttpClient hinzugefügt, die das Arbeiten mit HTTP-Anforderungen erheblich vereinfacht. Weitere Informationen finden Sie unter HttpClient und Richtlinien für die Verwendung von HttpClient.
Configuration IntelliSense
Attributwerte in Konfigurationsdateien für benutzerdefinierte Attribute, die im Projekt definiert sind, unterstützen jetzt IntelliSense, um die Arbeit mit Konfigurationen schnell und präzise zu erleichtern.
Konfigurations-Tooltips
WCF-Elemente und Attribute haben jetzt Tooltips im XML-Editor, um den Zweck des Elements oder Attributs einfacher und genauer zu identifizieren.
Daten als Klassen einfügen
In einem WCF-Projekt können in XML definierte Datentypen (z. B. in einem Dienst verfügbar gemacht) direkt in eine Codeseite eingefügt werden. Der XML-Typ wird als CLR-Typ eingefügt. Weitere Details finden Sie unter Generieren von Datentypklassen aus XML .
WebServiceHost und Standardendpunkte
In Visual Studio 2010 hat WebServiceHost automatisch einen Standardendpunkt erstellt, unabhängig davon, ob Sie einen Endpunkt explizit angegeben haben oder nicht. In Visual Studio 2012 und höher erstellt WebServiceHost nur einen Standardendpunkt, wenn keine Endpunkte explizit hinzugefügt werden. Wenn Ihr Client den Standardendpunkt erwartet, können Sie einen Endpunkt explizit hinzufügen und den Client darauf verweisen. Alternativ können Sie WCF anweisen, zum vorherigen Verhalten zurückzukehren, indem Sie die folgende Einstellung zur Konfigurationsdatei der Anwendung hinzufügen.
<appSettings>
<add key="wcf:webservicehost:enableautomaticendpointscompatability" value="true"/>
</appSettings>
IHttpCookieContainerManager
Diese Schnittstelle, die von IChannelFactory<TChannel>ihnen verfügbar gemacht wird, erleichtert das Arbeiten mit Cookies auf der Clientseite wesentlich. Wenn AllowCookies für die Bindung auf "true" festgelegt ist, können Sie mithilfe des folgenden Codes auf Cookies zugreifen:
IHttpCookieContainerManager cookieManager = factory.GetProperty<IHttpCookieContainerManager>();
System.Net.CookieContainer container = cookieManager.CookieContainer;
Anschließend können Sie die Cookies von der CookieContainer abrufen oder setzen. Wenn AllowCookies auf "false" festgelegt ist, können Sie die Cookies mithilfe eines anderen OperationContext oder Nachrichteninspektors manuell abrufen und in anderen Requests senden. Über die IHttpCookieContainerManager-Schnittstelle können Sie einen Benutzer mit einem Dienst authentifizieren und das von diesem Dienst zurückgegebene Authentifizierungscookie für die Authentifizierung mit anderen Diensten verwenden.