Upload
others
View
8
Download
0
Embed Size (px)
Citation preview
SECOND EDITION
Programming WCF Services
Juval Löwy
O'REILLY®Beijing • Cambridge • Farnham • Köln • Sebastopol • Taipei • Tokyo
Table of Contents
Forewords xix
Preface xxiii
1. WCF Essentials 1What Is WCF? 1
Services 2Service Execution Boundaries 3
Addresses 4
TCP Addresses 5
HTTP Addresses 6
IP C Addresses 6
MSMQ Addresses 6
Peer Network Addresses 7
Contracts 7The Service Contract 8
Hosting 11
IIS 5/6 Hosting 12
Self-Hosting 13
WAS Hosting 18
Custom Hosting in IIS/WAS 18
Bindings 20The Common Bindings 21
Choosing a Binding 23
Additional Bindings 24
Using a Binding 25
vii
Endpoints 25
Administrative Endpoint Configuration 26
Programmatic Endpoint Configuration 29
Metadata Exchange 31
Enabling Metadata Exchange Administratively 31
Enabling Metadata Exchange Programmatically 32
The Metadata Exchange Endpoint 35
The Metadata Explorer 39
Client-Side Programming 40
Generating the Proxy 40
Administrative Client Configuration 46
Programmatic Client Configuration 52
The WCF-Provided Test Client 53
Programmatic Versus Administrative Configuration 55
WCF Architecture 56
Host Architecture 58
Working with Channels 59
The InProcFactory Class 60
Transport-Level Sessions 63
Transport Session and Binding 63
Transport Session Termination 64
Reliability 65
Bindings, Reliability, and Ordered Messages 66
Configuring Reliability 67
Requiring Ordered Delivery 68
2. Service Contracts 70
Operation Overloading 70
Contract Inheritance 73
Client-Side Contract Hierarchy 74
Service Contract Factoring and Design 77
Contract Factoring 78
Factoring Metrics 80
Contract Queries 82
Programmatic Metadata Processing 82
The MetadataHelper Class 85
viii Table of Contents
3. Data Contracts 89Serialization 89
.NET Serialization 91The WCF Formatters 93
Data Contract via Serialization 95
Data Contract Attributes 97Importing a Data Contract 99
Data Contracts and the Serializable Attribute 103
Inferred Data Contracts 104
Composite Data Contracts 106
Data Contract Events 107
Shared Data Contracts 110
Data Contract Hierarchy 110Known Types 111
Service Known Types 113
Multiple Known Types 115
Configuring Known Types 116
Objects and Interfaces 117
Data Contract Equivalence 119Serialization Order 120
Versioning 122New Members 122
Missing Members 123
Versioning Round-Trip 127
Enumerations 130
Delegates and Data Contracts 132
Data Sets and Tables 132Using Arrays Instead of Tables 135
Using LINQ to SQL 138
Generics 140
Collections 143
Concrete Collections 144
Custom Collections 146
The CollectionDataContract Attribute 147
Referencing a Collection 148
Dictionaries 149
Table of Contents ix
4. Instance Management 152
Behaviors 152
Per-Call Services 154
Benefits of Per-Call Services 154
Configuring Per-Call Services 155
Per-Call Services and Transport Sessions 156
Designing Per-Call Services 157
Choosing Per-Call Services 160
Per-Session Services 160Configuring Private Sessions 161
Sessions and Reliability 165
The Session ID 167
Session Termination 168
Singleton Service 169Initializing a Singleton 170
Choosing a Singleton 173
Demarcating Operations 173Instance Deactivation 176
Configuring with ReleaselnstanceMode.None 177
Configuring with ReleaselnstanceMode.BeforeCall 178
Configuring with ReleaselnstanceMode.AfterCall 179
Configuring with ReleaselnstanceMode.BeforeAndAfterCall 179
Explicit Deactivation 180
Using Instance Deactivation 181
Durable Services 181Durable Services and Instance Management Modes 182
Instance IDs and Durable Storage 182Explicit Instance IDs 184
Instance IDs in Headers 186
Context Bindings for Instance IDs 188
Automatic Durable Behavior 194Throttling 200
Configuring Throttling 203
Throttled Connections in the Binding 208
x Table of Contents
5. Operations 209
Request-Reply Operations 209
One-Way Operations 210
Configuring One-Way Operations 210
One-Way Operations and Reliability 211
One-Way Operations and Sessionful Services 211
One-Way Operations and Exceptions 212
Callback Operations 214
The Callback Contract 215
Client Callback Setup 216
Service-Side Callback Invocation 219
Callback Connection Management 223
The Duplex Proxy and Type Safety 225
The Duplex Factory 228
Callback Contract Hierarchy 230
Callbacks, Ports, and Channels 232
Events 236
Streaming 240
I/O Streams 240
Streaming and Binding 241
Streaming and Transport 242
Stream Management 243
6. Faults 244
Error Isolation and Decoupling 244
Error Masking 245
Channel Faulting 246
Fault Propagation 249
Fault Contracts 251
Fault Debugging 255
Faults and Callbacks 261
Error-Handling Extensions 265
Providing a Fault 266
Handling a Fault 269
Installing Error-Handling Extensions 271
The Host and Error Extensions 275
Callbacks and Error Extensions 278
Tableof Contents I xi
7. Transactions 281
The Recovery Challenge 281
Transactions 282
Transactional Resources 283
Transaction Properties 283
Transaction Management 285
WCF Resource Managers 289
Transaction Propagation 289Transaction Flow and Bindings 289
Transaction Flow and the Operation Contract 290
One-Way Calls 293
Transaction Protocols and Managers 293Protocols and Bindings 294
Transaction Managers 295
Transaction Manager Promotion 298
The Transaction Class 299The Ambient Transaction 300
Local Versus Distributed Transactions 300
Transactional Service Programming 302Setting the Ambient Transaction 302
Transaction Propagation Modes 304Voting and Completion 312
Transaction Isolation 316
Transaction Timeout 318Explicit Transaction Programming 320
The TransactionScope Class 320
Transaction Flow Management 322
Non-Service Clients 329
Service State Management 331The Transaction Boundary 332
Instance Management and Transactions 332Per-Call Transactional Services 334
Per-Session Transactional Services 337
Transactional Durable Services 352
Transactional Behavior 354
Transactional Singleton Service 360
Instancing Modes and Transactions 364
xii Table of Contents
Callbacks 365Callback Transaction Modes 365Callback Voting 367Using Transactional Callbacks 368
8. Concurrency Management 371Instance Management and Concurrency 371Service Concurrency Modes 372
ConcurrencyMode.Single 373
ConcurrencyMode.Multiple 373
ConcurrencyMode.Reentrant 377
Instances and Concurrent Access 380Per-Call Services 380
Sessionful and Singleton Services 381
Resources and Services 382Deadlocked Access 382
Deadlock Avoidance 383
Resource Synchronization Context 384.NET Synchronization Contexts 385
The UI Synchronization Context 388
Service Synchronization Context 393Hosting an the UI Thread 394
A Form As a Service 399
The UI Thread and Concurrency Management 403
Custom Service Synchronization Contexts 405The Thread Pool Synchronizer 405
Thread Affinity 411
Priority Processing 414
Callbacks and Client Safety 417Callbacks with ConcurrencyMode.Single 418
Callbacks with ConcurrencyMode.Multiple 419
Callbacks with ConcurrencyMode.Reentrant 419
Callbacks and Synchronization Contexts 420Callbacks and the UI Synchronization Context 420
Callback Custom Synchronization Contexts 424
Asynchronous Calls 428Requirements for an Asynchronous Mechanism 428
Proxy-Based Asynchronous Calls 429
Table of Contents 1 xiii
Asynchronous Invocation 431
Polling or Waiting for Completion 433
Completion Callbacks 436
One-Way Asynchronous Operations 441
Asynchronous Error Handling 442
Asynchronous Calls and Transactions 443
Synchronous Versus Asynchronous Calls 444
9. Queued Services 446Disconnected Services and Clients 446Queued Calls 447
Queued Calls Architecture 448
Queued Contracts 449
Configuration and Setup 450
Transactions 457Delivery and Playback 457
Service Transaction Configuration 459
Nontransactional Queues 462
Instance Management 463Per-Call Queued Services 463
Sessionful Queued Services 465
Singleton Service 469
Concurrency Management 471Throttling 471
Delivery Failures 472The Dead-Letter Queue 473
Time to Live 474Configuring the Dead-Letter Queue 474Processing the Dead-Letter Queue 476
Playback Failures 480Poison Messages 481Poison Message Handling in MSMQ 4.0 482
Poison Message Handling in MSMQ 3.0 486
Queued Versus Connected Calls 486Requiring Queuing 487
xiv Table of Contents
The Response Service 489Designing a Response Service Contract 490
Client-Side Programming 494
Queued Service-Side Programming 496
Response Service-Side Programming 499
Transactions 500
The HTTP Bridge 503Designing the Bridge 504
Transaction Configuration 504
Service-Side Configuration 505
Client-Side Configuration 507
10. Security 509Authentication 509Authorization 510Transfer Security 511
Transfer Security Modes 511
Transfer Security Mode Configuration 513
Transport Security and Credentials 516
Message Security and Credentials 517
Identity Management 518Overall Policy 518Scenario-Driven Approach 519Intranet Application Scenario 520
Securing the Intranet Bindings 520
Constraining Message Protection 527
Authentication 528
Identities 530
The Security Call Context 532
Impersonation 534
Authorization 542
Identity Management 548
Callbacks 549
Internet Application Scenario 550Securing the Internet Bindings 550
Message Protection 554
Table of Contents xv
Authentication 559
Using Windows Credentials 560
Using the ASP.NET Providers 562
Identity Management 571
Callbacks 571
Business-to-Business Application Scenario 572
Securing the Business-to-Business Bindings 572
Authentication 573
Authorization 576
Identity Management 577
Callbacks 578
Host Security Configuration 578
Anonymous Application Scenario 578
Securing the Anonymous Bindings 579
Authentication 579
Authorization 579
Identity Management 580
Callbacks 580
No Security Scenario 580
Unsecuring the Bindings 581
Authentication 581
Authorization 581
Identity Management 581
Callbacks 582
Scenarios Summary 582
Declarative Security Framework 583
The SecurityBehaviorAttribute 583
Host-Side Declarative Security 591
Client-Side Declarative Security 593
Security Auditing 600
Configuring Security Audits 601
Declarative Security Auditing 603
xvi I Table of Contents