Inhaltsverzeichnis Manfred Steyer, Holger Schwichtenberg, Matthias Fischer, Jörg Krause Verteilte Systeme und Services mit.net 4.0 Konzepte und Lösungen mit WCF 4.0 Herausgegeben von Holger Schwichtenberg ISBN: 978-3-446-42236-0 Weitere Informationen oder Bestellungen unter http://www.hanser.de/978-3-446-42236-0 sowie im Buchhandel. Carl Hanser Verlag, München
VII Inhalt Geleitwort des Herausgebers...V Vorwort...XV Zielgruppe...XV Wie soll dieses Buch gelesen werden?...xvi Beispiele und Feedback...XVI Danksagung...XVII Über die Autoren...XVII 1 Serviceorientierung... 1 1.1 Konzeptionelle Ebene...1 1.1.1 Betriebswirtschaftliche Sicht... 1 1.1.2 Technische Sicht... 2 1.1.3 Was ist ein Service?... 3 1.2 Technische Realisierung...4 1.2.1 SOAP... 4 1.2.2 Web Service Description Language (WSDL)... 7 1.2.3 Universal Description, Discovery and Integration... 7 1.2.4 WS-*... 7 1.2.5 RESTful Web Services als Gegenbewegung zu SOAP... 8 1.2.6 POX-Services... 11 1.2.7 SOAP und REST im Vergleich... 12 2 WCF im Überblick... 13 2.1 Architektur...13 2.2 Standard-Bindings...14 2.3 Hosting von Services...16 2.4 Erste Schritte mit WCF...17 2.4.1 Erstellen eines Web-Service-Projektes... 17 2.4.2 Web-Service mit Client konsumieren... 25 2.4.3 Mit Laufzeit-Proxy auf Service zugreifen... 29 2.4.4 Service zur Verwendung von ws2007httpbinding konfigurieren... 30 2.4.5 NetTcpBinding und Self-Hosting... 31 3 Services mit WCF erstellen... 37 3.1 Verträge...37 3.1.1 Serviceverträge... 37 3.1.2 Datenverträge... 38
VIII Inhalt 3.1.3 Nachrichtenverträge... 41 3.1.4 SOAP-Binding festlegen... 42 3.2 Instanziierung von Services...42 3.2.1 PerCall... 43 3.2.2 Single... 44 3.2.3 PerSession... 44 3.3 Nebenläufigkeit...49 3.4 WCF konfigurieren...49 3.4.1 WCF deklarativ konfigurieren... 49 3.4.2 WCF programmatisch konfigurieren... 52 3.4.3 Benutzerdefinierte Bindings... 52 3.4.4 Einschränkungen für Bindings festlegen... 53 3.4.5 Drosselung... 55 3.4.6 Port-Sharing bei TCP-basierten Services... 55 3.4.7 Konfiguration von Proxy-Server... 57 3.5 Metadaten...57 3.6 Services diagnostizieren...59 3.6.1 Protokollierung konfigurieren... 59 3.6.2 Leistungsindikatoren... 61 3.7 One-Way-Operationen...62 3.8 Duplex-Operationen...63 3.8.1 Unterstützte Bindings... 63 3.8.2 Implementierung von Duplex-Szenarien... 64 3.8.3 Konfigurieren von Duplex-Szenarien... 66 3.8.4 Grenzen von Callbacks... 67 3.9 Umgang mit binären Daten...68 3.9.1 MTOM... 68 3.9.2 Streaming... 73 3.10 Fehlerbehandlung und FaultContracts...75 3.11 ASP.NET-Kompatibilität...77 4 REST-basierte Services... 81 4.1 REST-Services mit WCF implementieren und konsumieren...81 4.1.1 Einen REST-Service implementieren... 81 4.1.2 REST-Services mit WCF konsumieren... 82 4.1.3 REST-Service ohne WCF konsumieren... 83 4.2 Antwortformat dynamisch festlegen...84 4.3 Hilfe-Seiten (Help Pages)...86 4.4 ASP.NET Cache Profiles...87 4.5 REST-Services über ASP.NET-Routen...89 4.6 Ausnahmen auf HTTP-Statuscodes abbilden...89 4.7 Conditional GET und ETag-Unterstützung...90
IX 5 Verlässliche Zustellung und Transaktionen... 93 5.1 Zuverlässige Sitzungen...93 5.1.1 Verlässliche Sitzungen konfigurieren... 94 5.1.2 Verlässliche Sitzungen erzwingen... 95 5.1.3 Idempotente Services als Alternative zu WS-ReliableMessaging... 96 5.2 Transaktionale Services...96 5.2.1 Zwei-Phasen-Commit... 96 5.2.2 Plug-in für WS-AtomicTransactions einrichten... 97 5.2.3 Distributed Transaction Coordinator (DTC) einrichten... 97 5.2.4 Transaktionen konfigurieren und nutzen... 99 5.2.5 Transaktionsisolationslevel...101 5.2.6 Transaktion am Client starten...102 5.2.7 Transaktionen und Sessions...102 5.3 Queued Services...102 5.3.1 Microsoft Message Queuing Services (MSMQ)...103 5.3.2 Implementierung von Queued Services...104 5.3.3 Queued Services konfigurieren...105 6 Datenbasierte Services...109 6.1 Was sind datenbasierte Services?...109 6.2 WCF und ADO.NET Entity Framework...109 6.2.1 Vom DataSet zum Entity Framework...109 6.2.2 Grundlagen der Self-Tracking Entities...110 6.2.3 Beispielanwendung...114 6.3 Kritik an der Implementierung eines datenbasierten Service mit WCF...122 6.4 WCF Data Services (Open Data Protocol)...123 6.4.1 Rahmenbedingungen...124 6.4.2 Architektur...124 6.4.3 Abfragesyntax...126 6.4.4 Einen WCF Data Service erstellen...127 6.4.5 Einen WCF Data Service testen im Webbrowser...128 6.4.6 Abruf der Metadaten...129 6.4.7 Einen WCF Data Service testen mit Fiddler...130 6.4.8 Einen.NET-basierten Client erstellen...131 6.4.9 Tipps und Tricks...136 6.5 WCF RIA Services...142 6.5.1 Architektur der RIA Services...142 6.5.2 Einen RIA Service erstellen...143 6.5.3 Einen RIA Service nutzen...148 6.6 Vergleich und Fazit...151
X Inhalt 7 Workflows und Workflow-Services...155 7.1 Überblick...155 7.2 Visual Studio 2010-Projektvorlagen...156 7.3 Sequenzielle Workflows...156 7.3.1 Sequenzielle Workflows erstellen...156 7.3.2 Sequenzielle Workflows ausführen...157 7.3.3 Kontrollfluss...158 7.4 Flussdiagramme...160 7.5 Zustandsautomaten (State Machines)...161 7.6 Transaktionen und Kompensation...164 7.6.1 Transaktionen...164 7.6.2 Kompensation...164 7.7 WCF Workflow Services...166 7.7.1 Workflow Services erstellen...166 7.7.2 Workflow Services testen...168 7.7.3 Workflow Services konfigurieren...168 7.7.4 Korrelation...169 7.8 Benutzerdefinierte Aktivitäten...170 7.8.1 CodeActivity...171 7.8.2 AsyncCodeActivity...171 7.8.3 NativeActivity...172 7.8.4 Anpassen der Darstellung benutzerdefinierter Aktivitäten...176 7.9 Bookmarks...178 7.10 Persistenz...179 7.10.1 SQLWorkflowInstanceStore...179 7.10.2 Eigenschaften höherstufen...182 7.10.3 Höherstufen von Eigenschaften bei Verwendung von WCF Workflow Services...184 7.11 Ablaufverfolgung (Tracking)...186 7.11.1 Benutzerdefinierte Tracking Records erzeugen...186 7.11.2 Tracking Records abonnieren...187 7.11.3 Tracking Records einsehen...189 7.12 Workflow-Designer in eigenen Anwendungen hosten...190 7.13 WCF-Dienste und -Services in AppFabric hosten...191 7.13.1 Monitoring...192 7.13.2 Persistenz...194 7.13.3 Weitere Möglichkeiten...195 8 Sicherheit von WCF-Diensten...197 8.1 Überblick über WCF-Security...197 8.1.1 Transport- und Nachrichtensicherheit...197 8.1.2 Festlegen der zu verwendenden Credentials...199 8.1.3 Authentifizierung und Autorisierung...200
XI 8.1.4 Service-Identitäten...201 8.1.5 Verschlüsseln und Signieren...202 8.2 Windows-Security...203 8.2.1 Impersonation...204 8.2.2 Kerberos vs. NTLM...205 8.3 Web-Security mit SSL und IIS...206 8.3.1 Projekt bereitstellen...207 8.3.2 IIS für die Verwendung von SSL konfigurieren...207 8.3.3 Konfiguration des Service...211 8.3.4 Aufruf der Service-Operation...212 8.4 Nachrichtenbasierte Web-Security...212 8.4.1 Zertifikate einrichten...213 8.4.2 Benutzerdefinierte Authentifizierung und Autorisierung...214 8.4.3 Konfiguration...215 8.4.4 Aufruf der Service-Operation...217 8.4.5 ASP.NET Membership-Provider und Role-Manager...218 8.5 Client-Zertifikate...221 8.6 Federated und Claims-based Security mit Windows Identity Foundation (WIF)...223 8.6.1 Architektur...224 8.6.2 Web-Service-Standards...225 8.6.3 Verweis auf STS einrichten...225 8.6.4 STS aktualisieren...227 8.6.5 Übermittelte Claims prüfen...228 8.6.6 Claims in Service-Methoden verwenden...230 8.6.7 Szenario testen...231 8.6.8 Delegation implementieren...231 8.6.9 FlugBuchungsService aufrufen...233 8.6.10 Testen des Szenarios...234 8.6.11 Token direkt anfordern...235 9 Hosting...237 9.1 Hosting in Windows-Systemdiensten...237 9.1.1 Erstellen eines Windows-Systemdienstes...238 9.1.2 Ergänzen eines WCF-Dienstes in einem Systemdienst...240 9.1.3 Trick für das Debugging eines Systemdienstes...241 9.1.4 Vorbereiten der Installation eines Systemdienstes...244 9.1.5 Installation eines Systemdienstes...245 9.2 Hosting im Internet Information Server (IIS)/Windows Server AppFabric...247 9.2.1 Von IIS über WAS zu AppFabric...247 9.2.2 IIS-Websites...248 9.2.3 IIS-Anwendungen...253 9.2.4 IIS-Anwendungspools...254 9.2.5 Autostart...259
XII Inhalt 9.3 Webservice-Projekte für den IIS...262 9.3.1.svc-Dateien...263 9.3.2 Test des Dienstes...264 9.3.3 Abruf der Metadaten...264 9.3.4 Konfigurationsdatei...265 9.3.5 WCF ohne SVC-Datei...267 9.3.6 Eigene ServiceHostFactory...267 9.4 Installieren von WCF-Diensten im IIS...268 9.4.1 Manuelles Verbreiten von WCF-Diensten (XCopy-Deployment)...268 9.4.2 Verbreiten mit der Funktion Build/Publish in Visual Studio direkt auf einen IIS...269 9.4.3 Verbreiten von WCF-Diensten mit dem IIS Web Deployment Tool (MSDeploy)...271 9.5 Konfiguration und Monitoring mit den AppFabric -Erweiterungen...281 9.5.1 Installation...281 9.5.2 AppFabric-Ansichten...283 9.5.3 Überwachungsfunktionen...285 9.5.4 Weitere Konfigurationsmöglichkeiten...287 10 Systemintegration mit WCF...289 10.1 Routing (System.ServiceModel.Routing)...289 10.1.1 Architektur...290 10.1.2 Routerarten...291 10.1.3 Beispielanwendung (Routing Testclient)...292 10.1.4 Filter...293 10.1.5 Erstellen des Routers mit WCF 4.0...296 10.1.6 Konfiguration eines Routers...296 10.1.7 Router für das Routing-Testszenario...297 10.1.8 Entwicklung des Clients...302 10.1.9 Dynamische Filter entwickeln...303 10.1.10 Dynamische Filter mit eigener Filtertabelle...306 10.1.11 Leistungsverlust durch Routing...309 10.2 Discovery...310 10.2.1 Dienst mit Discovery...310 10.2.2 Client mit Discovery...311 10.2.3 Mögliche Services mittels Scopes einschränken...312 10.2.4 Clients für die Verwendung mit Discovery deklarativ konfigurieren...313 10.2.5 Ankündigungen (Announcements)...314 10.3 Ereignisse und Publish-/Subscribe-Szenarien...315 10.3.1 Service-Verträge...316 10.3.2 Implementierung eines Publish-/Subscribe-Service...317 10.3.3 Konfiguration...319 10.3.4 Implementierung des zu benachrichtigenden Clients...320 10.3.5 Weiterführende Überlegungen...320
XIII 10.4 ESB-Lösungen mit WCF entwickeln...321 10.4.1 Catch-All-Verträge...321 10.4.2 Nachrichtentransformation...322 10.5 Freie ESB-Implementierung...326 11 Services in Windows Azure...327 11.1 Service Bus...328 11.1.1 Relay-Bindings...329 11.1.2 Service über den Bus bereitstellen...329 11.1.3 Service über Bus konsumieren...332 11.2 Message Buffer...334 11.2.1 Nachricht in Message Buffer schreiben...334 11.3 Access Control...338 11.3.1 AC konfigurieren...338 11.3.2 Service mit AC absichern...341 12 Das WCF-Erweiterungsmodell...345 12.1 Übersicht...345 12.1.1 Was sich erweitern lässt...345 12.1.2 Die Laufzeitumgebung der Applikation erweitern...346 12.2 Erweiterung des Sicherheitsmodells...346 12.2.1 Verantwortungsbereich der WCF Security Component...346 12.2.2 Das WebService-(WS-)Sicherheitsmodell...346 12.2.3 Implementierung der WebService-(WS-)Sicherheit...347 12.3 Erweiterung des Bindungssystems...351 12.3.1 Bindungen und Bindungselemente...352 12.3.2 Nachrichtenkanäle...352 12.3.3 Benutzerdefinierte Bindungen...353 12.4 Weitere Erweiterungsfunktionen...354 12.4.1 Erweiterung des Metadatenmodells...354 12.4.2 Erweiterungen der Serialisierung...355 13 WCF erweitern...357 13.1 ServiceHost und Dienstmodellebene...357 13.1.1 Aufbau der Dienstmodellebene...357 13.1.2 Erweiterung mittels Verhalten...358 13.1.3 Erweiterung von Clients...361 13.1.4 Erweiterung des Dispatchers...366 13.1.5 Erweiterbare Objekte...374 13.1.6 Erweitertes Hosting die Klasse ServiceHostFactory...377 13.2 Erweiterung des Bindungsmodells...379 13.2.1 Konfigurieren mittels Bindungselementen...379 13.2.2 Bindungen selbst erstellen...380 13.2.3 Erstellen eines eigenen Bindungselements...382
XIV Inhalt 13.3 Channel Layer- und Peer Channel-Erweiterungen...384 13.3.1 Funktionsweise...385 13.3.2 Benutzerdefinierte Übertragungskanäle...385 13.3.3 Benutzerdefinierte Nachrichtenencoder...395 13.4 Das Metadatensystem...398 13.4.1 Funktionsweise...398 13.4.2 Anwendung...399 13.5 Serialisierung und Encoder...404 13.5.1 Ersetzen von Datenverträgen...404 13.5.2 Eigene Formatierer...410 13.6 Erweiterung des Sicherheitsmodells...416 13.6.1 Aufbau der Sicherheitsarchitektur...416 13.6.2 Benutzerdefinierte Anmeldeinformation und Token...416 13.6.3 Benutzerdefinierte Nachrichtenverschlüsselung...434 Index...443