12
SECOND EDITION Programming WCF Services Juval Löwy O'REILLY® Beijing • Cambridge • Farnham • Köln • Sebastopol • Taipei • Tokyo

SECOND EDITION Programming WCF Services - CERN · The WCF-Provided Test Client 53 Programmatic Versus Administrative Configuration 55 WCF Architecture 56 Host Architecture 58 Working

  • 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

A. Introduction to Service-Orientation 605

B. Headers and Contexts 620

C. Publish-Subscribe Service 643

D. Code-Access Security 663

E. Generic Interceptor 693

F. WCF Coding Standard 709

G. ServiceModelEx Catalog 720

Index 731

Table of Contents I xvii