Verteilte Systeme und Services mit .NET 4.5 - Konzepte und Lösungen für WCF 4.5 und ASP.NET Web-API

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

2013

674 Seiten

Format: PDF, Online Lesen

E-Book: €  39,99

E-Book kaufen

E-Book kaufen

ISBN: 9783446435650

 

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 Querschnitts­funktionen

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-Erweiterungs­modell

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