Глава 1. Когда цветет папоротник 15

Универсальное требование 15
Универсальный подход 17
Бизнес-пример 21
Введение в Windows Communication Foundation (WCF) 23
Не только еще одно API 24
WCF с высоты в 10 000 футов 24
Возможности WCF 27
Выводы 35
Глава 2. Сервис-ориентированность 36

Краткое определение сервис-ориентированности 37
Получение сообщения 38
Участники обмена сообщениями 38
Исходный отправитель 41
Посредники 42
Конечный получатель 44
Анатомия сообщения 44
Конверт 46
Заголовок 47
Тело 48
Транспорт сообщений 48
Кодировки сообщений 49
XML Infoset 50
SOAP и XML Infoset 50
Текстовый кодировщик 51
Бинарный кодировщик 52
Кодировщик MTOM 52
Выбор подходящей кодировки 56
Адресация сообщения 57
Адресация в транспорте и адресация в сообщении 58
Указание конечного получателя 58
Указание исходного отправителя 59
Указание места, куда отправлять ошибку 60
Идентификация сообщения 60
Связывание сообщения с другими сообщениями 61
Кто ожидает ответа? 62
Указание операции 63
Необходимость стандартных блоков заголовков 65
WS-Addressing 66
Ссылки конечной точки 66
Информационные заголовки сообщения 69
Зависимости между блоками информационных заголовков сообщения 70
Четыре принципа сервис-ориентированности 71
Явные границы 71
Независимость сервиса (частичная) 72
Разделение контрактов 73
Совместимость на основе политики 74
Связывая воедино 74
Контракт 75
Почему сервис-ориентированность имеет смысл 84
Управление версиями 84
Балансировка нагрузки 85
Изменение платформ во времени 87
Маршрутизация на основе содержимого 88
Сквозная безопасность 89
Сетевое взаимодействие 89
Выводы 89
Глава 3. Образцы обмена сообщениями,

топологии и хореографии 91
Образцы обмена сообщениями 91
Дейтаграмма MEP 94
MEP типа "запрос/ответ" 98
Дуплексный MEP 101
Топологии сообщений 103
Топология "точка — точка" 104
Топология "только прямая “точка — точка”" 104
Брокерская топология 105
Одноранговая топология 106
Хореографии сообщений 107
Выводы 108
Глава 4. WCF 109

WCF: краткое руководство 110
Определение сервисного контракта 111
Определение адреса и компоновки 111
Создание конечных точек и начало ожидания 112
Отображение полученных сообщений на элемент HelloWCF 113
Компиляция, запуск и проверка получателя 115
Отправка сообщения получателю 115
Компиляция, запуск и проверка отправителя 118
Ожидание сообщений 118
Небольшое изменение с глобальными последствиями 120
Предоставление метаданных 124
Использование метаданных 127
Анатомия WCF на макроуровне: взгляд извне 130
Адрес 131
Компоновка 132
Контракт 136
Анатомия WCF на макроуровне: взгляд изнутри 140
Выводы 143
ЧАСТЬ II. WCF на канальном уровне 145
Глава 5. Сообщения 147

Общие сведения о типе Message 148
Стек WCF XML 150
Тип XmlDictionary 150
Тип XmlDictionaryWriter 153
Тип XmlDictionaryReader 167
И снова про Message 171
Создание Message 171
Несколько слов о сериализации и десериализации Message 171
Версии Message 172
Сериализация графа Object 176
Выталкивание данных из читателя 178
Проталкивание данных в Message с помощью BodyWriter 180
Сообщения и SOAP Faults 181
Буферизованные и потоковые сообщения 188
Сериализация Message 189
Десериализация Message 190
Проверка, является ли Message отказом SOAP Fault 190
Состояние Message 192
Работа с заголовками 193
Тип MessageHeader 193
Тип MessageHeaders 200
Тип EndpointAddress 207
Копирование сообщений 211
Очистка Message 212
Выводы 213
Глава 6. Каналы 214

Каналы в перспективе 215
Создание экземпляра канала 217
Машина состояний канала 217
Интерфейс ICommunicationObject 217
Тип CommunicationObject 220
Производные от CommunicationObject типы 221
Методы Open и BeginOpen 224
Методы Close и Abort 226
Метод Fault 229
О стеках CommunicationObject 229
Введение в форму каналов 230
Интерфейсы и базовые типы канала 234
Интерфейс IChannel 234
Каналы дейтаграмм: IInputChannel и IOutputChannel 235
Каналы типа "запрос/ответ": IrequestChannel и IReplyChannel 238
Дуплексные каналы: IDuplexChannel 242
Интерфейс IDefaultCommunicationTimeouts 243
Тип ChannelBase 244
Разновидности каналов 245
Транспортные каналы 246
Протокольные каналы 247
Формирующие каналы 248
Создание собственного канала 249
Создание базового типа 250
Создание каналов дейтаграмм 254
Канал получения дейтаграмм 255
Канал отправки дейтаграмм 256
Дуплексный канал 259
Канал дуплексной сессии 260
Выводы 261
Глава 7. Менеджеры каналов 262

Понятие менеджера каналов 263
Получатель: слушатели каналов 264
Интерфейс IChannelListener 265
Интерфейс IChannelListener 266
Тип ChannelListenerBase 267
Тип ChannelListenerBase 268
Создание собственного слушателя каналов 269
Отправитель: фабрики каналов 275
Интерфейс IChannelFactory 276
Интерфейс IChannelFactory 276
Тип ChannelFactoryBase 276
Тип ChannelFactoryBase 277
Создание собственной фабрики каналов 279
Выводы 282
ЧАСТЬ III. WCF на уровне ServiceModel 283
Глава 8. Компоновки 285

Объектная модель компоновок 286
Конструкторы компоновок 289
Тестовые методы Binding 289
Фабричные методы Binding 290
Метод GetProperty 292
Свойство MessageVersion 293
Свойство Scheme 293
Метод CreateBindingElements 294
Тип BindingElement 297
Конструктор BindingElement и метод Clone 299
Методы тестирования BindingElement 301
Механизм запросов BindingElement 303
Фабричные методы BindingElement 304
Тип TransportBindingElement 307
Тип BindingContext 308
Фабричные методы BindingContext 310
Использование компоновки 311
Создание собственных компоновок 318
Выводы 327
Глава 9. Контракты 328

Общие сведения о контрактах 328
Макроскопическая анатомия контракта WCF 330
Сервисные контракты 330
Операции в сервисном контракте 333
Аргументы метода операции 338
Отображение сервисного контракта на сервисный объект 339
Контракты данных 340
Контракты сообщений 343
Совместимость операций 345
Моя философия контрактов 346
От определения контракта к объекту контракта 349
Выводы 352
Глава 10. Диспетчеры и клиенты 353

Вопросы, которые стоит себе задать 354
Диспетчер 358
Анатомия ChannelDispatcher 359
Анатомия EndpointDispatcher 363
Тип DispatchRuntime 365
Тип DispatchOperation 367
Тип ServiceHost 368
Клиент 368
Выводы 370