Manfred Steyer, Holger Schwichtenberg, Matthias Fischer, Jörg Krause, Holger Schwichtenberg
Verteilte Systeme und Services mit .NET 4.5
Konzepte und Lösungen für WCF 4.5 und ASP.NET Web-API
Inhalt
6
Geleitwort des Herausgebers
18
Vorwort
20
1 Serviceorientierung
24
1.1 Konzeptionelle Ebene
24
1.1.1 Betriebswirtschaftliche Sicht
24
1.1.2 Technische Sicht
25
1.1.3 Was ist ein Service?
26
1.2 Technische Realisierung
27
1.2.1 SOAP
27
1.2.2 Web Service Description Language (WSDL)
29
1.2.3 Universal Description, Discovery and Integration
30
1.2.4 WS-I
30
1.2.5 WS-*
31
1.2.6 RESTful Web Services als Gegenbewegung zu SOAP
31
1.2.7 POX-Services und Web APIs
34
1.2.8 SOAP und REST im Vergleich
35
1.3 WCF vs. ASP.NET Web API
36
2 WCF im Überblick
38
2.1 Architektur
38
2.2 Standard-Bindings
39
2.3 Hosting von Services
41
2.4 Erste Schritte mit WCF
42
2.4.1 Erstellen eines Web-Service-Projektes
42
2.4.2 Web-Service mit Client konsumieren
50
2.4.3 Mit Laufzeit-Proxy auf Service zugreifen
54
2.4.4 Service zur Verwendung von ws2007HttpBinding konfigurieren
55
2.4.5 NetTcpBinding und Self-Hosting
56
3 Services mit WCF erstellen
62
3.1 Verträge
62
3.1.1 Serviceverträge
62
3.1.2 Datenverträge
63
3.1.3 Nachrichtenverträge
66
3.1.4 SOAP-Binding festlegen
67
3.2 Instanziierung von Services
67
3.2.1 PerCall
68
3.2.2 Single
69
3.2.3 PerSession
69
3.3 Nebenläufigkeit
74
3.4 Asynchrone Service-Operationen
74
3.5 WCF konfigurieren
75
3.5.1 WCF deklarativ konfigurieren
75
3.5.2 WCF programmatisch konfigurieren
78
3.5.3 In IIS gehostete Services programmatisch konfigurieren
3.5.3 In IIS gehostete Services programmatisch konfigurieren
78
78
3.5.4 Benutzerdefinierte Bindings
80
3.5.5 Einschränkungen für Bindings festlegen
81
3.5.6 Drosselung
82
3.5.7 Port-Sharing bei TCP-basierten Services
83
3.5.8 Konfiguration des Proxy-Servers
84
3.6 Metadaten
85
3.7 Services diagnostizieren
87
3.7.1 Protokollierung konfigurieren
87
3.7.2 Leistungsindikatoren
89
3.8 One-Way-Operationen
90
3.9 Duplex-Operationen
90
3.9.1 Unterstützte Bindings
91
3.9.2 Implementierung von Duplex-Szenarien
92
3.9.3 Konfigurieren von Duplex-Szenarien
93
3.9.4 Callbacks mit WebSockets (ab .NET 4.5)
95
3.9.5 Grenzen von Callbacks
96
3.10 UDP und Multicasts (ab .NET 4.5)
97
3.11 Umgang mit binären Daten
98
3.11.1 MTOM
99
3.11.2 Streaming
103
3.12 Fehlerbehandlung und FaultContracts
106
3.13 ASP.NET-Kompatibilität
108
3.14 Zuverlässige Sitzungen
110
3.14.1 Verlässliche Sitzungen konfigurieren
111
3.14.2 Verlässliche Sitzungen erzwingen
112
3.14.3 Idempotente Services als Alternative zu WS-ReliableMessaging
112
3.15 Transaktionale Services
113
3.15.1 Zwei-Phasen-Commit
113
3.15.2 Plug-in für WS-AtomicTransactions einrichten
113
3.15.3 Distributed Transaction Coordinator (DTC) einrichten
114
3.15.4 Transaktionen konfigurieren und nutzen
115
3.15.5 Transaktionsisolationslevel
117
3.15.6 Transaktion am Client starten
118
3.15.7 Transaktionen und Sessions
118
3.16 Queued Services
119
3.16.1 Microsoft Message Queuing Services (MSMQ)
119
3.16.2 Implementierung von Queued Services
120
3.16.3 Queued Services konfigurieren
121
3.17 REST-basierte Services mit WCF
123
3.17.1 REST-Services mit WCF implementieren und konsumieren
124
3.17.2 Antwortformat dynamisch festlegen
127
3.17.3 Hilfe-Seiten (Help Pages)
128
3.17.4 ASP.NET Cache Profiles
130
3.17.5 REST-Services über ASP.NET-Routen
131
3.17.6 Ausnahmen auf HTTP-Statuscodes abbilden
131
3.17.7 Conditional GET und ETag-Unterstützung
132
3.18 WCF und Windows 8
133
4 Sicherheit von WCF-Diensten
134
4.1 Überblick über WCF-Security
134
4.1.1 Transport- und Nachrichtensicherheit
134
4.1.2 Festlegen der zu verwendenden Credentials
136
4.1.3 Authentifizierung und Autorisierung
137
4.1.4 Service-Identitäten
139
4.1.5 Verschlüsseln und Signieren
139
4.2 Windows-Security
141
4.2.1 Impersonation
141
4.2.2 Kerberos vs. NTLM
142
4.3 Web-Security mit SSL und IIS
144
4.3.1 IIS für die Verwendung von SSL konfigurieren
144
4.3.2 Konfiguration des Service
148
4.3.3 Aufruf der Service-Operation
149
4.3.4 Benutzerdefinierte Authentifizierung und Autorisierung
149
4.4 Web-Security mit SSL ohne IIS
156
4.5 Nachrichtenbasierte Sicherheit
157
4.5.1 Zertifikate einrichten
157
4.5.2 Konfiguration
158
4.5.3 Aufruf der Service-Operation
160
4.6 Client-Zertifikate
160
4.7 Federated und Claims-based Security mit Windows Identity Foundation (WIF)
162
4.7.1 Architektur
163
4.7.2 Web-Service-Standards
164
4.7.3 Implementierung in .NET 4.5
164
4.7.4 Implementierung für Versionen vor 4.5
178
5 Lose Kopplung mit WCF
190
5.1 Routing (System.ServiceModel.Routing)
190
5.1.1 Architektur
191
5.1.2 Routerarten
192
5.1.3 Beispielanwendung (Routing Testclient)
193
5.1.4 Filter
194
5.1.5 Erstellen des Routers mit WCF 4.x
197
5.1.6 Konfiguration eines Routers
197
5.1.7 Router für das Routing-Testszenario
198
5.1.8 Entwicklung des Clients
203
5.1.9 Dynamische Filter entwickeln
204
5.1.10 Dynamische Filter mit eigener Filtertabelle
206
5.1.11 Leistungsverlust durch Routing
210
5.2 Discovery
211
5.2.1 Dienst mit Discovery
211
5.2.2 Client mit Discovery
212
5.2.3 Mögliche Services mittels Scopes einschränken
213
5.2.4 Clients für die Verwendung mit Discovery deklarativ konfigurieren
214
5.2.5 Ankündigungen (Announcements)
215
5.3 Ereignisse und Publish-/Subscribe-Szenarien
217
5.3.1 Service-Verträge
217
5.3.2 Implementierung eines Publish-/Subscribe-Service
218
5.3.3 Konfiguration
220
5.3.4 Implementierung des zu benachrichtigenden Clients
221
5.3.5 Weiterführende Überlegungen
222
5.4 ESB-Lösungen mit WCF entwickeln
222
5.4.1 Catch-All-Verträge
222
5.4.2 Nachrichtentransformation
223
5.5 Freie ESB-Implementierung
227
6 ASP.NET Web API
228
6.1 REST-Services mit ASP.NET
6.1 REST-Services mit ASP.NET
228
228
6.1.1 Parameter und Rückgabewerte
229
6.1.2 Dynamische Parameter
231
6.1.3 REST-Services konfigurieren
232
6.1.4 REST-Services mit Fiddler testen
233
6.1.5 Mehr Kontrolle über HTTP
234
6.1.6 REST-Services über HttpClient konsumieren
237
6.1.7 Hilfe-Seiten
240
6.2 Tracing
244
6.2.1 Standard-Implementierung von ITraceWriter
244
6.2.2 Eigenen TraceWriter implementieren
245
6.3 OData-Unterstützung
246
6.4 Self-Hosting mit Web APIs
246
6.5 Querschnittsfunktionen an globalen Stellen platzieren
247
6.5.1 Querschnittsfunktionen mit Message-Handler implementieren
248
6.5.2 Handler mit HttpClient verwenden
249
6.5.3 Querschnittsfunktionen mit Filter realisieren
251
6.6 Erweiterte Konfigurationsmöglichkeiten
255
6.6.1 Benutzerdefinierte Routen
255
6.6.2 Controller-basierte Konfiguration
255
6.6.3 Routen-basierte Konfiguration
256
6.7 Deklaratives Validieren von Parametern
257
6.7.1 Verwenden von Data-Attributen
257
6.7.2 Auswerten von Validierungsattributen
259
6.7.3 Benutzerdefinierte Validierungsattribute
260
6.8 Benutzerdefinierte Formate unterstützen
261
6.8.1 Formatter implementieren
261
6.8.2 Formatter serverseitig registrieren und testen
263
6.8.3 Formatter mit HttpClient verwenden
263
6.8.4 Binäre Serialisierung mit BSON
264
6.9 Serialisierung beeinflussen
264
6.9.1 JSON-Serializer konfigurieren
265
6.9.2 XML-Serializer konfigurieren
266
6.9.3 Eigenschaften von der Serialisierung ausnehmen
266
6.9.4 Zirkuläre Referenzen serialisieren
266
6.10 Streaming
269
6.10.1 Action-Methoden für Streaming vorbereiten
269
6.10.2 Streaming in Self-Hosting-Szenarien konfigurieren
270
6.10.3 Streaming für IIS konfigurieren
270
6.10.4 Streams über HttpClient verwenden
272
6.11 Fortschritt ermitteln
273
6.12 Web API und HTML-Formulare
274
6.12.1 Einfache Formular-Felder übermitteln
274
6.12.2 Dateiupload via HTML-Formular
275
6.13 ASP.NET Web API erweitern
277
6.13.1 Abhängigkeiten auflösen mit benutzerdefiniertem DependencyResolver
277
6.13.2 Zusätzliche Assemblies mit AssemblyResolver laden
278
6.13.3 Service-Operationen über HttpActionSelector auswählen
279
6.13.4 Controller über HttpControllerSelector auswählen
280
6.13.5 Methodenparameter auf benutzerdefinierte Weise
6.13.5 Methodenparameter auf benutzerdefinierte Weise
282
282
7 ASP.NET Web API Security
286
7.1 Verschlüsselte Übertragung
286
7.1.1 SSL mit IIS
286
7.1.2 SSL in Self-Hosting-Szenarien
286
7.1.3 Diskussion über Nachrichtensicherheit
287
7.2 Authentifizierung und Autorisierung
287
7.2.1 Operationen absichern
287
7.2.2 HTTP-Authentifizierung mit IIS
289
7.2.3 HTTP-Authentifizierung in Self-Hosting-Szenarien
290
7.2.4 Benutzer mit HttpClient authentifizieren
291
7.2.5 Benutzerdefinierte Security mit Handler
291
7.2.6 Benutzerdefinierte Security mit HTTP-Module
293
7.2.7 Mit Client-Zertifikaten arbeiten
296
7.3 Single Sign-On mit OAuth2 und
7.3 Single Sign-On mit OAuth2 und
300
300
7.3.1 OAuth2
300
7.3.2 OAuth2 und REST-Services
301
7.3.3 Implementieren eines Authorization Servers mit
7.3.3 Implementieren eines Authorization Servers mit
301
301
7.3.4 Client für OAuth2-Szenario
307
7.3.5 Service mittels OAuth2 absichern
308
8 ASP.NET SignalR
310
8.1 Long-Polling
310
8.2 Web Sockets
311
8.3 ASP.NET SignalR
311
8.4 PersistentConnection
312
8.4.1 Erste Schritte mit SignalR und PersistentConnection
312
8.4.2 Lifecycle-Methoden
313
8.4.3 URL-Mapping für PersistentConnection
314
8.4.4 Einfacher Client für eine PersistentConnection
314
8.4.5 Einfacher JavaScript-Client für eine PersistentConnection
315
8.4.6 Daten über serverseitige Prozesse an Connection senden
317
8.5 Hubs
317
8.5.1 Methoden und Callbacks mit SignalR und Hubs
317
8.5.2 URL-Mapping für Hubs
319
8.5.3 Lifecycle-Methoden
319
8.5.4 Hubs konsumieren
319
8.5.5 Hubs über JavaScript konsumieren
322
8.5.6 Gruppen
325
8.5.7 Hubs über serverseitige Prozesse benachrichtigen
326
8.6 Pipeline-Modules für Querschnittsfunktionen
326
8.7 SignalR konfigurieren
328
8.8 SignalR skalieren
328
9 Hosting von WCF- und Web API-Diensten
330
9.1 Hosting in Windows-Systemdiensten
330
9.1.1 Erstellen eines Windows-Systemdienstes
331
9.1.2 Ergänzen eines WCF-Dienstes in einem Systemdienst
333
9.1.3 Ergänzen eines Web API-Dienstes in einem Systemdienst
334
9.1.4 Trick für das Debugging eines Systemdienstes
334
9.1.5 Vorbereiten der Installation eines Systemdienstes
337
9.1.6 Installation eines Systemdienstes
338
9.2 Hosting im Internet Information Server (IIS)/Windows Server AppFabric
340
9.2.1 Von IIS über WAS zu AppFabric
340
9.2.2 IIS-Websites
341
9.2.3 IIS-Anwendungen
347
9.2.4 IIS-Anwendungspools
348
9.2.5 Autostart
354
9.3 WCF-Projekte für den IIS
357
9.3.1 .svc-Dateien
358
9.3.2 Test des Dienstes
358
9.3.3 Abruf der Metadaten
359
9.3.4 Konfigurationsdatei
360
9.3.5 WCF ohne SVC-Datei
362
9.3.6 Eigene ServiceHostFactory
362
9.4 ASP.NET Web API-Projekte für den IIS
363
9.5 Installieren von WCF- und
9.5 Installieren von WCF- und
363
363
9.5.1 Manuelles Verbreiten von Diensten (XCopy-Deployment)
363
9.5.2 Verbreiten mit der Funktion „Build/Publish“ in Visual Studio direkt auf einen IIS
364
9.5.3 Verbreiten von Diensten mit dem IIS Web Deployment Tool
9.5.3 Verbreiten von Diensten mit dem IIS Web Deployment Tool
365
365
9.6 Konfiguration und Monitoring mit den „AppFabric“-Erweiterungen
375
9.6.1 Installation
376
9.6.2 AppFabric-Ansichten
377
9.6.3 Überwachungsfunktionen
379
9.6.4 Weitere Konfigurationsmöglichkeiten
381
10 Service Bus und Access Control für Windows Azure und Windows Server
384
10.1 Überblick
384
10.2 Namespace einrichten
385
10.3 Relaying
386
10.3.1 Relay-Bindings
387
10.3.2 Service über Relaying bereitstellen
387
10.3.3 Service über Relaying konsumieren
390
10.4 Lose Kopplung mit Queues und Topics
391
10.4.1 Zugriff auf Queues und Topics
393
10.4.2 Transaktionen
393
10.4.3 Sitzungen
394
10.4.4 Metadaten, Filtern und Stamping
394
10.4.5 Queues über die .NET-API ansprechen
394
10.4.6 Queues programmatisch erzeugen
395
10.4.7 Nachrichten an Queues senden
396
10.4.8 Nachrichten aus Queues abrufen
397
10.4.9 Mit Sitzungen arbeiten
399
10.4.10 Aus Dead Letter Queue lesen
400
10.4.11 Topics und Abonnenten einrichten
401
10.4.12 Nachrichten unter Verwendung von Topics senden
10.4.12 Nachrichten unter Verwendung von Topics senden
403
403
10.4.13 Queues über WCF ansprechen
405
10.4.14 WCF-Sitzungen realisieren
408
10.4.15 Topics via WCF abonnieren
409
10.5 Windows Azure Access Control
410
10.5.1 AC konfigurieren
410
10.5.2 Service mit AC absichern
412
10.5.3 Azure Service Bus mit AC absichern
416
10.6 Windows Server Service Bus
417
10.6.1 Namespaces administrieren
418
10.6.2 Auf Queues und Topics zugreifen
418
10.6.3 Zugriff auf Queues und Topics einschränken
419
11 Datenbasierte Services
420
11.1 Was sind datenbasierte Services?
420
11.2 Services und ADO.NET Entity Framework
420
11.2.1 Vom DataSet zum Entity Framework
420
11.2.2 Grundlagen der Self-Tracking Entities
422
11.2.3 Beispielanwendung
426
11.3 ADO.NET Entity Framework Code First (Code Only)
435
11.3.1 Die drei Ebenen des ADO.NET Entity Framework
435
11.3.2 Vorbereitungen
436
11.3.3 Entitätsklassen
436
11.3.4 Kontextklasse
441
11.3.5 Nutzen der Kontextklasse
442
11.3.6 Einsatzbeispiel
443
11.3.7 Konvention vor Konfiguration
446
11.3.8 Codebasierte Konfiguration
448
11.3.9 Schemamigrationen
449
11.3.10 Entity Framework Power Tools
450
11.3.11 Code Only und Webservices
452
11.4 Kritik an der Implementierung eines datenbasierten Service mit WCF
453
11.5 WCF Data Services (Open Data Protocol)
454
11.5.1 Lizenz und Standardisierung
454
11.5.2 Bezug der WCF Data Services
454
11.5.3 Andere Bibliotheken
455
11.5.4 Rahmenbedingungen
456
11.5.5 OData-Beispiel
456
11.5.6 Architektur
458
11.5.7 Abfragesyntax
459
11.5.8 Einen WCF Data Service erstellen
460
11.5.9 Zugriffsrechte
460
11.5.10 Fehlermeldungen aktivieren
462
11.511 Einen WCF Data Service im Webbrowser testen
463
11.5.12 Abruf der Metadaten
465
11.5.13 Einen WCF Data Service mit Fiddler testen
466
11.5.14 Einen .NET-basierten Client erstellen
466
11.5.15 Tipps und Tricks
471
11.6 WCF RIA Services
480
11.6.1 Architektur der RIA Services
481
11.6.2 Einen RIA Service erstellen
482
11.6.3 Einen RIA Service nutzen
486
11.7 Datenbasierte REST-Services mit ASP.NET Web API und dem Open Data Protocol (OData)
489
11.7.1 Daten mit OData flexibel abfragen
489
11.7.2 Mögliche OData-Abfragen einschränken
491
11.7.3 OData-Abfragen global aktivieren
493
11.7.4 OData-Abfragen manuell auswerten
493
11.7.5 Daten mit OData verwalten
494
11.8 Vergleich und Fazit
498
12 Workflows und Workflow Services
502
12.1 Überblick
502
12.2 Visual Studio-Projektvorlagen
503
12.3 Sequenzielle Workflows
503
12.3.1 Sequenzielle Workflows erstellen
503
12.3.2 Sequenzielle Workflows ausführen
504
12.3.3 Kontrollfluss
505
12.4 Flussdiagramme
507
12.5 Zustandsautomaten (State Machines)
508
12.6 Transaktionen und Kompensation
510
12.6.1 Transaktionen
510
12.6.2 Kompensation
510
12.7 WCF Workflow Services
512
12.7.1 Workflow Services erstellen
512
12.7.2 Workflow Services testen
513
12.7.3 Workflow Services konfigurieren
514
12.7.4 Korrelation
515
12.7.5 Contract-First (ab .NET 4.5)
516
12.8 Benutzerdefinierte Aktivitäten
518
12.8.1 CodeActivity
518
12.8.2 AsyncCodeActivity
519
12.8.3 NativeActivity
520
12.8.4 Anpassen der Darstellung benutzerdefinierter Aktivitäten
523
12.9 Bookmarks
525
12.10 Persistenz
526
12.10.1 SQLWorkflowInstanceStore
526
12.10.2 Eigenschaften höherstufen
529
12.10.3 Höherstufen von Eigenschaften bei Verwendung
12.10.3 Höherstufen von Eigenschaften bei Verwendung
531
531
12.11 Versionisierung und Aktualisierung von Workflows (ab .NET 4.5)
533
12.11.1 Side-by-Side-Versionisierung
533
12.11.2 Dynamic Update
539
12.11.3 Dynamic Update mit WorkflowControlEndpoint
544
12.12 Ablaufverfolgung (Tracking)
546
12.12.1 Benutzerdefinierte Tracking Records erzeugen
546
12.12.2 Tracking Records abonnieren
547
12.12.3 Tracking Records einsehen
549
12.13 Workflow-Designer in eigenen Anwendungen hosten
550
12.14 WCF-Dienste und -Services in AppFabric hosten
551
12.14.1 Monitoring
552
12.14.2 Persistenz
554
12.14.3 Weitere Möglichkeiten
555
13 Das WCF-Erweiterungsmodell
556
13.1 Übersicht
556
13.1.1 Was sich erweitern lässt
556
13.1.2 Die Laufzeitumgebung der Applikation erweitern
557
13.2 Erweiterung des Sicherheitsmodells
557
13.2.1 Verantwortungsbereich der WCF Security Component
557
13.2.2 Das WebService-(WS-)Sicherheitsmodell
557
13.2.3 Implementierung der WebService-(WS-)Sicherheit
558
13.3 Erweiterung des Bindungssystems
562
13.3.1 Bindungen und Bindungselemente
563
13.3.2 Nachrichtenkanäle
563
13.3.3 Benutzerdefinierte Bindungen
564
13.4 Weitere Erweiterungsfunktionen
565
13.4.1 Erweiterung des Metadatenmodells
565
13.4.2 Erweiterungen der Serialisierung
566
14 WCF erweitern
568
14.1 ServiceHost und Dienstmodellebene
568
14.1.1 Aufbau der Dienstmodellebene
568
14.1.2 Erweiterung mittels Verhalten
569
14.1.3 Erweiterung von Clients
572
14.1.4 Erweiterung des Dispatchers
577
14.1.5 Erweiterbare Objekte
585
14.1.6 Erweitertes Hosting – die Klasse ServiceHostFactory
588
14.2 Erweiterung des Bindungsmodells
590
14.2.1 Konfigurieren mittels Bindungselementen
590
14.2.2 Bindungen selbst erstellen
591
14.2.3 Erstellen eines eigenen Bindungselements
593
14.3 Channel Layer- und Peer Channel-Erweiterungen
595
14.3.1 Funktionsweise
596
14.3.2 Benutzerdefinierte Übertragungskanäle
596
14.3.3 Benutzerdefinierte Nachrichtenencoder
606
14.4 Das Metadatensystem
608
14.4.1 Funktionsweise
609
14.4.2 Anwendung
609
14.5 Serialisierung und Encoder
614
14.5.1 Ersetzen von Datenverträgen
614
14.5.2 Eigene Formatierer
620
14.6 Erweiterung des Sicherheitsmodells
626
14.6.1 Aufbau der Sicherheitsarchitektur
626
14.6.2 Benutzerdefinierte Anmeldeinformation und Token
626
14.6.3 Benutzerdefinierte Nachrichtenverschlüsselung
644
Anhang – NuGet
654
Index
658
© 2009-2024 ciando GmbH