Jenseits von JavaScript und HTML5: Ausblick auf .NET 4.5 und Visual Studio 11.0

Seite 3: WF, WCF & WPF

Inhaltsverzeichnis

Mit .NET 3.0 hatte Microsoft die Windows Workflow Foundation (WF) erstmals ausgeliefert; für .NET 4.0 wurde sie komplett neu geschrieben. Doch immer noch gibt es deutliche Schwächen, die Microsoft nun in .NET 4.5 angeht. Endlich lassen sich Workflows versionieren und begonnene in eine modifizierte Workflow-Definition überführen. Im Rahmen eines "Dynamic Update" kann der Entwickler Programmcode schreiben, der die Aktivitäten und Variablen einer Workflow-Instanz ändert beziehungsweise neue hinzufügt oder löscht. Ein Workflow-Hostprozess kann aber mehrere Versionen ein und des gleichen Workflows parallel betreiben (Side-by-side Execution).

Die schmerzlich vermissten Zustandsautomaten hat Microsoft in einem Update für .NET 4.0 schon nachgeliefert. Eine neue Aktivität mit Namen "NoPersistScope" verhindert, dass sich die darin enthaltenen Aktionen persistieren.

Ein weiterer Verbesserungsschwerpunkt ist beim bislang unhandlichen Designer festzustellen. Er bekommt nun Suchfunktionen, eine bessere Bedienbarkeit per Maus, Mehrfachauswahl und eine hierarchische Ansicht (Outline View). Aktivitäten werden beim Drag & Drop automatisch in eine Sequenz verpackt, wenn es bereits in dem Container eine andere Aktion gibt. Was in .NET 4.0 stark verwunderte, war die Tatsache, dass innerhalb der Workflows alle Ausdrücke in Visual-Basic-Syntax erfolgen mussten, selbst wenn man ein C#-Projekt angelegt hatte. Den misslichen Umstand heilt Microsoft nun in Visual Studio 11.

Bei WCF 4.5 (Windows Communication Foundation) hat Microsoft nun endlich abgeschafft, dass beim Erstellen eines Client-Proxy mit "Add Service Reference" oder dem Kommandozeilenwerkzeug svcutil.exe umfangreiche Konfigurationsdateien entstehen, in denen alle Werte noch mal explizit auf die Standardwerte gesetzt werden. Mit svcutil.exe kann man nun nach dem Contract-First-Prinzip entwickeln. Dabei gibt der Entwickler ein WSDL-Dokument vor und erhält daraus die Klassendateien für Dienst- und Datenklasse im WCF-Stil.

Die Entwicklungsumgebung macht nun die XML-Konfiguration für WCF-Dienste einfacher, denn der XML-Editor liefert nicht nur wie bisher Vorschläge für Elementnamen und Attribute, sondern auch Inhalte wie Binding-, Dienst- und Vertragsnamen (XML Editor Tooltips, siehe Abb. 3). Fehlerhafte Konfigurationen zeigt die Entwicklungsumgebung als Warnungen an. Bisher fielen Typfehler in der WCF-Konfiguration erst beim Start der Anwendung auf. Die Code-Konfiguration als Alternative zur XML-Konfiguration ist nun alternativ über die Implementierung einer statischen Methode Configure() innerhalb des Diensts möglich.

XML Editor Tooltips für die WCF-Konfiguration in Visual Studio 11 (Abb. 3)

WCF 4.5 bietet darüber hinaus Unterstützung für WebSockets, UDP Multicast Transport, asynchrones Streaming, Vermeidung von Puffern gestreamter Nachrichten im IIS, mehrere Authentifizierungsverfahren für einen einzigen Endpunkte und das Caching der ChannelFactory im WCF-Client. Der Binary Message Encoder bietet zudem optionale Komprimierung mit Deflate und GZIP.

Bisher erzeugte WCF immer mehrere WSDL-Dokumente für WCF-Dienste. Da das zu Problemen mit Werkzeugen anderer Hersteller führen kann, liefert WCF 4.5 nun mit dem URL-Zusatz "?singleWSDL" ein einziges Dokument. Die bisher getrennt gelieferte Windows Identity Foundation (WIF) ist nun in .NET 4.5 fester Bestandteil des Frameworks.

Das XAML-Framework WPF (Windows Presentation Foundation) erhält in Version 4.5 zwar keine neuen Steuerelemente (wenn man mal von Ribbon absieht, das bisher als Add-on verfügbar ist, aber zahlreiche Überarbeitungen an der Grundinfrastruktur, insbesondere bei der Datenbindung. Dazu gehören die Bindung an
statische Properties sowie ein vereinfachtes Multi-Threading (indem man eine gebundene Menge in einem getrennten Thread verändern darf, ohne ein Thread-Problem zu riskieren), und aus Silverlight 4 wurde die Schnittstelle INotifyDataErrorInfo übernommen, die anders als die alte IDataErrorInfo mehrere Fehler
auf einmal in einer Liste zurückliefert. Bei der Datenbindung kann man nun über BindingBase.Delay eine Verzögerung angeben, damit bei häufigen Datenänderungen nicht jede zu einer Aktualisierung der Oberfläche führt. Über neue Mitglieder der Klasse BindingExpression (Target, TargetProperty, ResolvedSource etc.) kann der Entwickler in WPF 4.5 mehr Informationen über die Datenbindung auslesen.

Außerdem wurden die Leistung der ItemsControl gesteigert, die Integration zwischen WPF und Win32-Benutzeroberflächen verbessert und für das asynchrone Programmieren die Klasse Dispatcher in Hinblick auf das neue asynchrone Pattern in .NET 4.5 erweitert.

Weitere Verbesserungen ziehen sich quer durch die Klassenbibliothek – es seien deswegen nur einige Beispiele genannt. Im Namensraum System.Collections gibt es nun ein ReadOnlyDictionary. Die Auswertung regulärer Ausdrücke lässt sich mit einer Zeitbegrenzung (MatchTimeout) versehen. Die ZIP-Komprimierung in System.IO erzeugt kleinere Dateien. Die Task Parallel Library (TPL) bekommt neue Aktionen wie Task.WhenAll und Task.WhenAny sowie Task.Delay(TimeSpan). System.Net bietet bessere Unterstützung für IPv6, Internationalized Domain Name (IDN) und Email Address Internationalization (EAI). Der Namensraum System.Net.Http umfasst eine neue API für HTTP-Programmierung, die eine bessere Unterstützung für REST-Webservices liefert als die bisherigen WebClient-Klassen in System.Net.

Das Managed Extensibility Framework (MEF) erhält Unterstützung für generische Typen. Außerdem kann man nun Klassen importieren, die nicht annotiert sind ("POCO-Unterstützung"). Der Entwickler erhält auf die Bindung der Importe/Exporte aneinander mehr Einfluss und bessere Diagnose für Fehler.