Preface

Chapter 1: Introduction
  1.1 About this Book
  1.2 Objectives of this Book
  1.3 Who this Book if For
  1.4 What this Book Does Not Cover
  1.5 Prerequisite Reading
  1.6 How this Book is Organized
    Part I: Fundamentals
    Part II: Services and Service Composition
    Part III: Infrastructure and Architecture
    Part IV: Appendices
  1.7 How Principles and Patterns are Used in this Book
  1.8 Symbols, Figures, and Style Conventions.

Chapter 2: Case Study Background
  2.1 How Case Study Examples are Used
  2.2 Case Study Background #1: Standard Mold
    History
    Technical Infrastructure
    Business Goals and Obstacles
  2.2 Case Study Background #2: Superior Stamping
    History and Culture
    Technical Infrastructure
    Business Goals and Obstacles

Part I: Fundamentals
Chapter 3: SOA Fundamentals
  3.1 Basic SOA Terminology
    Service-Oriented Computing
    Service-Orientation
    Service-Oriented Architecture (SOA)
    Services
      Services as Components
      Services as Web Services
      Services as REST Services
    Service Models
      Agnostic Logic and Non-Agnostic Logic
    Service Composition
    Service Inventory
    Service-Oriented Analysis
    Service Candidate
    Service-Oriented Design
    Service Contract
    Service-Related Granularity
    SOA Design Patterns
  3.2 Service-Oriented Computing Goals
    Increased Intrinsic Interoperability
    Increased Federation
    Increased Vendor Diversification Options
    Increased Business and Technology Domain Alignment
  3.3 Further Reading

Chapter 4: A Brief History of Legacy .NET Distributed Technologies
  4.1 Distributed Computing 101
    Client-Server
    Distributed Architecture
    Service-Oriented Architecture
  4.2 .NET Enterprise Services
    It All Began with COM (and DCOM)
    COM+ Services
    .NET Assemblies
    Distributed Transaction Coordinator
    .NET Enterprise Services and Service-Orientation
  4.3 .NET Remoting
    .NET Remoting Architecture
      Serializable Classes
      Remotable Classes
      Ordinary Classes
    Hosting .NET Remoting Components
      Windows Service
      IIS Hosting Under ASP.NET
      Hosting a .NET Remoting Component in a Console Application
      .NET COM+ Services
    .NET Remoting Configurations
      Activation Types
      Message Formats
      Communication Protocols
      Object Lifetime Management
    .NET Remoting and Service-Orientation
  4.4 Microsoft Messaging Queue (MSMQ)
    The Queues
    Sending and Receiving Messages
    MSMQ and Service-Orientation
  4.5 System.Transactions
    Distributed Resource Transactions
    Explicit and Implicit Programming Models
    Ambient Transactions
  4.6 Web Services (ASMX and WSE)
    XML Web Services (ASMX)
      The WebService Attribute
      The WebMethod Attribute
    Web Service Enhancements (WSE)
  4.7 REST Service Processing with IHttpHandler

Chapter 5: WCF Services
  5.1 Overview
  5.2 Service Contracts with WCF
    WCF Terminology
      WCF Service Contract
      Interface Contract
      Operation Contract
      Data Contract
      Message Contract
      Service Endpoint
    The ServiceContract and OperationContract Attributes
    Data Models and the DataContract Attribute
    Messaging and the MessageContract Attribute
    Service Endpoints and the endpoint Element
      Address
      Bindings
      Contract
    REST Service Classes and Attributes
      The WebGet Attribute
      The WebInvoke Attribute
      WCF UriTemplate Attribute
    Faults and the FaultContract Attribute
    MEX Endpoints
    Versioning Considerations
  5.3 Service Implementation with WCF
    Behaviors
    Instancing
    A Sample Implementation
  5.4 Service Hosting with WCF
    Self-Hosted Services
    Managed Windows Services
    IIS Process Boundary
    Windows Activation Services (WAS)
    Hosting REST Services
  5.5 Service Consumers with WCF
    Using the Service Metadata Tool
    Writing the Proxy Class for a Service
    Using the ChannelFactory Class

Chapter 6: WCF Extensions
  6.1 WCF Security
    Security Modes
    Authorization
    Federated Identity
  6.2 WCF Transactions
    Operation Attributes for Transactions
      TransactionScopeRequired
      TransactionAutoComplete
      TransactionFlow
    Service Attributes for Transactions
      TransactionIsolationLevel
      TransactionAutoCompleteOnSessionClose
      TransactionTimeout
    Durable Services
  6.3 WCF Router
    The RoutingService Class
    Routing Contracts
    Routing Configuration
      Step 1: Define Endpoints
      Step 2: Configure Service Behavior
      Step 3: Enumerate Target Endpoints
      Step 4: Define Message Filters
      Step 5: Create a Filter Table
    Fault Tolerance
  6.4 WCF Discovery
    Discovery Modes
    Locating a Service Ad Hoc
    Sending and Receiving Service Announcements
    Discovery Proxies for Managed Discovery
      Discovering from a Discovery Proxy
    Implicit Service Discovery
  6.5 WCF Extensibility
    WCF Layers
    Layered Extensibility
    Channel Layer Extensibility
  6.6 WCF Management Tools
    Administration
    Troubleshooting
    Logging Messages

Chapter 7: .NET Enterprise Services
  7.1 SQL Server
    Native XML Web Services Support
    Service Broker (SSB)
    Query Notification
    XML Support in SQL Server
  7.2 Windows Workflow Foundation (WF)
    WF Architecture
    Workflows
      Sequential Workflows
      State Machine Workflows
    Workflow Designer
    Workflow Persistence (with WF)
    Communicating with the Host Container.
    Activities
    Workflow Runtime Environment.
    WF Programming Model
    Passing Parameters into a Workflow Instance
    Returning Parameters from a Workflow Instance
    Workflow-Enabled Services.
    Versioning Orchestrations
    WF Extensibility
    Business Rules
  7.3 Application Blocks and Software Factories
    Application Blocks
    Software Factories
      Guidance Toolkits
      Web Services Software Factory
  7.4 Windows Server AppFabric
    Configurable Hosting Environment
    Workflow Persistence (with AppFabric)
    In-Memory Application Cache Platform
    Manageability Extensions
    Application Server Event Collector
  7.5 BizTalk Server
    BizTalk Server Architecture
    Messaging
      Pipelines
      Pipeline Components
      Ports and Locations
    Adapters
    Context Properties
    Itineraries
    Unified Exception Management

Chapter 8: Cloud Services with Windows Azure
  8.1 Cloud Computing 101
    Cloud Deployment Models
      Public Cloud
      Private Cloud
      Community Cloud
      Other Deployment Models
      The Intercloud (Cloud of Clouds)
      Deployment Models and Windows Azure
    Service Delivery Models
      Infrastructure-as-a-Service (IaaS)
      Platform-as-a-Service (PaaS)
      Software-as-a-Service (SaaS)
      Other Delivery Models
    IaaS vsPaaS
  8.2 Windows Azure Platform Overview
    Windows Azure (Application Container)
    SQL Azure
    Windows Azure Platform AppFabric
  8.3 Windows Azure Roles
      Web Roles and Worker Roles
      Virtual Machines
      Input Endpoints
      Inter-Role Communication
  8.4 Hello World in Windows Azure
    1. Create a Cloud Service Project
    2. Choose an ASP.NET Web Role
    3. Create the Solution
    4. Instantiate the Service
  8.5 A Web Service in Windows Azure
    1. Create a Host Service and Storage Service
    2. Create and Deploy a Service Package
    3. Promote the Service to Production
  8.6 A REST Service in Windows Azure
    REST Service Addressing
    Creating a Windows Azure REST Service
  8.7 Windows Azure Storage
    Tables
      Entities and Properties
      Data Access
    Queues
    Blobs
      Block Blobs
      Page Blobs
    Windows Azure Drive

Part II: Service and Service Composition
Chapter 9: Service-Orientation with .NET Part I: Service Contracts and Interoperability
  9.1 Standardized Service Contract
    Contract-First
      1. Create or Reuse Data Contract
      2. Create Message Contract
      3. Create Interface Contract
    Standardized Service Contract and Patterns
  9.2 Canonical Schema
    Creating Schemas with Visual Studio
    Generating .NET Types
    Using the DataContract Library
  9.3 Data Model Transformation
    Object-to-Object
    LINQ-to-XML
    XSLT Transformation
  9.4 Canonical Protocol
    Web Service
    REST Service
    Component
    Another WCF Option: Named Pipes
    Dual Protocols with WCF
  9.5 Canonical Expression
    Service Naming Conventions
    Service Capability Naming Conventions

Chapter 10: Service-Orientation with .NET Part II: Coupling, Abstraction, and Discoverability
  10.1 Service Loose Coupling
    Service Loose Coupling and Patterns
  10.2 Decoupled Contract
    WSDL-First
    Generating Service Code Using Svcutil
    Generating WCF Service Code Using WSCF.blue
    Generating ASMX Service Code Using WSCF.classic
  10.3 Service Façade
  10.4 Concurrent Contracts
  10.5 Service Loose Coupling and Service Capability Granularity
  10.6 Service Abstraction
  10.7 Validation Abstraction
  10.8 Exception Shielding
  10.9 Service Discoverability
    In-line Documentation
    REST and Hypermedia
    Service Profiles
  10.10 Metadata Centralization

Chapter 11: Service-Orientation with .NET Part III: Reusability and Agnostic Service Models
  11.1 Service Reusability and the Separation of Concerns
    Functional Decomposition
    Service Encapsulation
    Agnostic Context
    Agnostic Capability
    Utility Abstraction
    Entity Abstraction
    The Inventory Analysis Cycle
    Additional Design Considerations
  11.2 Case Study Example: Utility Abstraction with a .NET Web Service
  11.3 Case Study Example: Entity Abstraction with a .NET REST Service

Chapter 12: Service-Orientation with .NET Part IV: Service Composition and Orchestration Basics
  12.1 Service Composition 101
    Service-Orientation and Service Composition
    Service Composability (PSD)
    Capability Composition and Capability Recomposition
      Capability Composition
      Capability Recomposition
    Composition Roles
    Service Layers
    Non-Agnostic Context
    Process Abstraction and Task Services
  12.2 Orchestration
    Process Abstraction, Process Centralization, and Orchestrated Task Services
      Process Centralizationand Tools
      Process Abstraction and WS-BPEL
    State Repository and Compensating Service Transaction
      State Repository with .NET
      Compensating Service Transaction
    Other Patterns
    Microsoft Orchestration Platforms: WF and BizTalk Server

Chapter 13: Orchestration Patterns with WF
  13.1 Process Abstraction and Orchestrated Task Services
    A Brief History of WF Service Contract Support
    Publishing WF Workflows as Web Services and Activities
      Workflows Published as ASMX Services
      Workflows Published via WCF 3.5 Activities
      Workflows Published via WCF 4.0 Activities
      Workflows Published via ExternalDataExchange Services
      WS-I BasicProfile Support
    Publishing WF Workflows as REST Services
      JSON Encoding
      Send and Receive Activity Configuration
      Orchestrated Task Services with REST and WF 4.0
  13.2 Process Centralization
    Centralized Process Maintenance
    WS-BPEL Support
  13.3 State Repository
    SQL Persistence Service and Scaling Out in WF 3.0
    SQL Persistence Service and Scaling Out in WF 4
  13.4 Compensating Service Transaction
    Creating Compensations
    Triggering Compensations
  13.5 Case Study Example

Chapter 14: Orchestration Patterns with BizTalk Server
  14.1 Process Abstraction and Orchestrated Task Services
    Orchestrated Task Service Contracts
    WS-* Support
    Case Study Example
  14.2 Process Centralization
    Centralized Process Maintenance
    WS-BPEL Support
      Exporting BizTalk Orchestrations to WS-BPEL
      Importing WS-BPEL Processes into BizTalk
  14.3 State Repository
  14.4 Compensating Service Transaction
    Case Study Example

Part III: Infrastructure and Architecture
Chapter 15: Enterprise Service Bus with BizTalk Server and Windows Azure
  15.1 Microsoft and the ESB
  15.2 Integration with BizTalk
    Application Integration 101
    The BizTalk Hub-Bus Model
  15.3 The ESB Toolkit
    Itineraries
      Itineraries Types
      The Itinerary Lifecycle
    Resolvers
    Adapter Providers
      WCF-Custom and REST
  15.4 Distributed and Scalable ESB Architecture
    Configuring for High-Availability
    Techniques for Scaling
    Distributed ESBs
  15.5 Cloud-Enabling the ESB with Windows Azure
    Receiving Messages from Azure’s AppFabric Service Bus
    Sending Messages to Azure’s AppFabric Service Bus
  15.6 Governance Considerations
    SLA Enforcement
    Monitoring
    Preparing Project Teams
  15.7 Mapping the Microsoft Platform to the Enterprise Service Bus Pattern

Chapter 16: Windows Azure Platform AppFabric Service Bus
  16.1 Introducing the Service Bus
    Connectivity Fabric
    Message Buffers
    Service Registry
  16.2 Service Bus and REST
    REST-Based Service Design
    REST-Based Service Consumer Design
    Message Buffers and REST
  16.3 Service Bus Connectivity Models
    Eventing
    Service Remoting
    Tunneling
  16.4 Working with Windows Azure Platform AppFabric Service Bus
    Setting up the AppFabric Service Bus
    Defining a REST-Based Service Bus Contract
    Creating the Service Bus Message Buffer

Chapter 17: SOA Security with .NET and Windows Azure
  17.1 Authentication and Authorization with WCF
    Direct and Brokered Authentication
      Direct Authentication
      Brokered Authentication
      Authentication Patterns in WCF
    Role-Based Authorization
      Authorization Roles in WCF
      Authorizing Operations with Roles
    Claims-Based Authorization
      Claims Processing in WCF
      Implementing Claims-Based Authorization
      Access Control in Windows Azure
      Designing Custom Claims
    Case Study Example
  17.2 Windows Identity Foundation (WIF)
    Digital Identity
      The Identity Metasystem
    Windows Cardspace
    Active Directory Federation Services (ADFS)
    WIF Programming Model
      WCF Integration
      Programming Windows Cardspace
    Developing a Relying Party
    Developing an Identity Provider
  17.3 Windows Azure Security
    Cloud Computing Security 101
      Cross-Domain Access Control
      Hybrid Cloud Security
      Inter-Organization Service Composition Security
      External Identity Providers
      Claims-Based Access Control, As-A-Service
    Windows Azure Platform AppFabric Access Control Overview
      Access Control Step-by-Step
      Access Control and REST
    Access Control Service Authorization Scenarios
      Hybrid Cloud Authorization Model
      Public Cloud Authorization Model
      Cloud-to-Cloud Authorization Model
    Case Study Example

Chapter 18: Service-Oriented Presentation Layers with .NET
  18.1 Windows Presentation Foundation and the Prism Library
    Shell
    Views
    View Discovery versus View Injection
    Regions
    Modules
    Shared Services
  18.2 Design Patterns for Presentation Logic
    User Interface Patterns
      Composite View [CJP]
      Command [DP]
      UI Mediator
      Separated Presentation
    Modularity Patterns
      Separated Interface [PEA]
      Plug-In [PEA]
      Event Aggregator [PEA]
      Inversion of Control [DP]
      Dependency Injection [PEA]
      Service Locator [CJP]
  18.3 A Simple Service-Oriented User Interface
    Creating the Project
    Dynamically Loading Modules

Chapter 19: Service Performance Optimization
  19.1 Overview
    Optimization Areas
    Service Implementation Processing
    Service Framework Processing
    Wire Transmission Processing
  19.2 Service Performance Optimization Techniques
    Caching to Avoid Costly Processing
      Intermediary
      Service Container
      Service Proxy
      Caching Utility Service
      Comparing Caching Techniques
    Cache Implementation Technologies
    Computing Cache Keys
    Case Study Example
      Method 1
      Method 2
    Caching REST Responses
    Monitoring Cache Efficiency
    Reducing Resource Contention
    Request Throttling
      Throttling With WCF
    Case Study Example
        Request Throttling with BizTalk Server
      Coarse-Grained Service Contracts
    Case Study Example
      Selecting Application Containers
      Performance Policies
    Case Study Example
      REST Service Message Sizes
      Hardware Encryption
        Transport Encryption
        Message Encryption
        Custom Encryption Solution
      High Performance Transport
    Case Study Example
      MTOM Encoding
    Case Study Example
      Performance Considerations for Service Contract Design
    Case Study Example
      Impact on Service-Orientation Principles
  19.3 Service Composition Performance Optimization Techniques
    Transformation Avoidance and Caching
    Asynchronous Interactions
    Parallelize Where Possible
      Parallel Activity in WF
      Parallel Execution in BizTalk Server
      Replicator Activity in WF
    Consider Co-Hosting When Necessary
    Compose High Performance Services
    Impact on Service-Orientation Principles

Chapter 20: SOA Metrics with BAM
  20.1 SOA Metric Types
  20.2 Introducing BizTalk BAM
    BizTalk and BAM
    BAM Solution Architecture
    The BAM Management Utility
    The Tracking Profile Editor (TPE)
    Real-Time vs Scheduled Aggregations
  20.3 Activities and Views
    Roles-based Views for Service Governance
    Creating Views
  20.4 BAM APIs
    Event Streams
      DirectEventStream (DES)
      BufferedEventStream (BES)
      OrchestrationEventStream (OES)
      IPipelineContext Interface
    Abstracted APIs for Service Metrics
    Metrics for Service Compositions
    WCF and WF Interceptors
    Notifications
    Rapid Prototyping
  20.5 Managing BAM
    Database Outages
    Security
    Scripting Deployment
    Reporting
    Case Study Example

Part IV: Appendices
Appendix A: Case Study Conclusion

Appendix B: Industry Standards Reference

Appendix C: Service-Orientation Principles Reference

Appendix D: SOA Design Patterns Reference

Appendix E: The Annotated SOA Manifesto
  The Annotated SOA Manifesto

Appendix F: Additional Resources
  Consuming Services with WCF
    Introduction
    Cleaning Up Resources
    The Proper Disposal and Closing of an ICommunicationObject
    The ICommunicationObject.Close() Method
    The ICommunicationObject.Abort() Method
    Abort() versus Close()
    IDisposable for Cleaning Up Resources
    IDisposable and Its Relation to ClientBase and ChannelFactory
    Cleaning Up Resources with the Using Block
    Cleaning Up Resources with the Try-Catch-Finally-Abort Pattern
    Handling Exceptions and Cleaning Up Resources with the Try-Close-Catch-Abort Pattern
    Cleaning Up Resources in a Convenient Way
    How to Handle Connections when Consuming Services Using WCF
  Conclusion

SOA with .NET & Windows Azure: Realizing Service-Orientation with the Microsoft Platform
SOA with .NET and Windows Azure: Realizing Service-Orientation with the Microsoft Platform
by David Chou, John deVadoss, Thomas Erl, Nitin Gandhi, Hanu Kommapalati, Brian Loesgen, Christoph Shittko, Herbjorn Wilhelmsen, Mickie Williams
Forewords by David Chappell, S. Somasegar