Служба маршрутизации
Служба маршрутизации является универсальным посредником протокола SOAP, действующим в качестве маршрутизатора сообщений. Основной функцией службы маршрутизации является возможность перенаправлять сообщения, исходя из их содержимого, благодаря чему сообщение можно переслать конечной точке клиента в зависимости от значения в самом сообщении, находящемся в заголовке или в тексте сообщения.
Она RoutingService реализована в качестве службы Windows Communication Foundation (WCF) в System.ServiceModel.Routing пространстве имен. Служба маршрутизации обеспечивает доступ к одной или нескольким конечным точкам служб, которые производят получение сообщений и их маршрутизацию к одной или нескольким клиентским конечным точкам в зависимости от содержимого. Служба предоставляет следующие функциональные возможности.
Маршрутизация на основе содержимого
Статистическая обработка служб
Управление версиями служб
Приоритетная маршрутизация
Динамическая конфигурация
Связывание протоколов
Обработка протокола SOAP
Расширенная обработка ошибок.
Резервные конечные точки
Поскольку создание службы-посредника направлено на достижение одной или нескольких из этих задач, очень часто такая реализация привязана к конкретному сценарию или решению и поэтому неприменима ко всем новым приложениям.
Служба маршрутизации предоставляет универсальный, динамически настраиваемый, подключаемый посредник SOAP, совместимый с моделями службы WCF и канала, который позволяет выполнять маршрутизацию сообщений на основе содержимого.
Примечание.
Служба маршрутизации в настоящее время не поддерживает маршрутизацию служб WCF REST. Для маршрутизации вызовов REST рекомендуется использовать System.Web.Routing или маршрутизацию запросов приложений.
Маршрутизация на основе содержимого
Маршрутизация на основе содержимого - это возможность перенаправления сообщения на основе одного или нескольких содержащихся в нем значений. Служба маршрутизации проверяет каждое сообщение и перенаправляет его в целевую конечную точку, определяемую на основе содержимого сообщения и созданной логики маршрутизации. Маршрутизация на основе содержимого обеспечивает основу статистической обработки служб, управления версиями и приоритетами.
Реализация маршрутизации на основе содержимого строится на реализациях MessageFilter, которые служат для поиска определенных значений в маршрутизируемых сообщениях. Если MessageFilter соответствует сообщению, сообщение направляется в конечную точку назначения, связанную с MessageFilter. Для построения сложной логики маршрутизации фильтры сообщений группируются в таблицы фильтров (FilterTableCollection). Например, таблица фильтров может содержать пять взаимоисключающих фильтров, которые приводят к маршрутизации сообщений только к одной из пяти целевых конечных точек.
Служба маршрутизации позволяет настроить логику, используемую для выполнения маршрутизации исходя из содержимого сообщений, а также динамически обновлять ее во время выполнения.
Логика маршрутизации может быть построена за счет группирования фильтров сообщений в таблицы фильтров. Это позволяет обрабатывать несколько сценариев маршрутизации, например:
Статистическая обработка служб
Управление версиями служб
Приоритетная маршрутизация
Динамическая конфигурация
Дополнительные сведения о фильтрах сообщений и таблицах фильтров см. в статье "Общие сведения о маршрутизации" и "Фильтры сообщений".
Статистическая обработка служб
Маршрутизация на основе содержимого позволяет через одну конечную точку принимать сообщения от внешних клиентских приложений и перенаправлять их соответствующим внутренним конечным точкам в соответствии со значениями, содержащимися в сообщениях. Это полезно в случае, если через одну конечную точку работает несколько серверных приложений, или при необходимости разбить на несколько служб приложение, которое для клиентов должно быть представлено одной конечной точкой приложения.
Управление версиями службы
При переходе на новую версию решения приходится обеспечивать параллельную работу старой версии для существующих клиентов. Часто для этого клиентам для обмена данными с решением приходится устанавливать соединение с новой версией по новому адресу. Служба маршрутизации позволяет клиентам обеих версий производить доступ через одну конечную точку службы, перенаправляя сообщения нужным решениям исходя из их содержимого. Пример такой реализации см. в статье "Практическое руководство. Управление версиями службы".
Приоритетная маршрутизация
При обслуживании множества клиентов с некоторыми из них может быть заключено соглашение об уровне обслуживания (SLA), предусматривающее обработку их данных отдельно от других клиентов. Применение фильтра для поиска информации о клиенте, содержащейся в сообщении, легко позволяет выполнить маршрутизацию сообщений от конкретных партнеров до конечной точки, созданной для того, чтобы обеспечить соответствие соглашениям SLA.
Динамическая конфигурация
Для поддержки систем обработки критически важных данных, где сообщения должны обрабатываться без перерывов в работе служб, возможность изменения конфигурации компонентов в системе во время выполнения весьма существенна. В поддержку этого требования служба маршрутизации обеспечивает реализацию интерфейса IExtension<T>, класс RoutingExtension, который позволяет динамически обновлять конфигурацию службы маршрутизации во время выполнения.
Дополнительные сведения о динамической конфигурации службы маршрутизации см. в разделе "Общие сведения о маршрутизации".
Связывание протоколов
Одной из проблем, возникающих в сценариях с использованием посредника, является то, что конечная точка может использовать транспорт и версию SOAP, отличные от конечной точки, которая занимается приемом сообщений. Для поддержки таких сценариев служба маршрутизации может обеспечивать преобразование протокола, а также выполнять обработку сообщений SOAP с помощью версии MessageVersion, необходимой целевым конечным точкам. Таким образом, для внутреннего обмена данными может быть использован один протокол, а для внешнего - другой.
Для поддержки маршрутизации сообщений между конечными точками с различными транспортными протоколами служба маршрутизации использует предоставляемые системой привязки, которые позволяют ей обеспечивать взаимодействие между разными протоколами. Это происходит автоматически, когда конечная точка службы, реализованная службой маршрутизации, использует протокол, отличный от протокола, используемого клиентскими точками, которым передаются сообщения.
Обработка SOAP
Общее требование - возможность маршрутизации сообщений между конечными точками с различными требованиями SOAP. Для поддержки этого требования служба маршрутизации предоставляет SoapProcessingBehavior службу маршрутизации, которая автоматически создает новую службу MessageVersion , которая соответствует требованиям конечной конечной точки, прежде чем сообщение будет перенаправлено в него. Это поведение также создает новое сообщение MessageVersion для любого сообщения ответа перед возвратом в запрашивающее клиентское приложение, чтобы убедиться, что MessageVersion ответа соответствует исходному запросу.
Дополнительные сведения об обработке SOAP см. в статье "Общие сведения о маршрутизации".
Обработка ошибок
В системах, состоящих из распределенных служб, которые зависят от сетевого взаимодействия, важно обеспечить устойчивость системы к временным отказам. Служба маршрутизации реализует обработку ошибок, позволяющую обрабатывать различные сценарии сбоев взаимодействия, которые могут привести к простою службы.
Если служба маршрутизации обнаружила исключение CommunicationException при попытке отправки сообщения, то будет выполнена обработка ошибок. Эти исключения обычно указывают на то, что при попытке связаться с определенной конечной точкой клиента была обнаружена проблема, например EndpointNotFoundException, ServerTooBusyException или CommunicationObjectFaultedException. Код обработки ошибок также перехватывает и пытается повторить отправку при возникновении TimeoutException, что является еще одним общим исключением, которое не является производным от CommunicationException.
Дополнительные сведения об обработке ошибок см. в статье "Введение в маршрутизацию".
Резервные конечные точки
Помимо целевых клиентских конечных точек, связанных с определениями фильтров в таблице фильтров, можно создать также список резервных конечных точек. В случае ошибки передачи данных будет выполнена маршрутизация сообщения к этим резервным конечным точкам. Если для записи фильтра определен резервный список, то при возникновении ошибки служба маршрутизации попытается отправить сообщение к первой конечной точке из этого списка. Если передача данных завершилась ошибкой, то служба пытается отправить сообщение следующей конечной точке. Этот процесс продолжается до тех пор, пока операция не будет выполнена успешно, пока не будет возвращена ошибка, не связанная с передачей данных, либо до конца резервного списка.
Дополнительные сведения о конечных точках резервного копирования см. в статье "Общие сведения о маршрутизации" и "Фильтры сообщений".
Потоковая передача
Служба маршрутизации может успешно передавать сообщения, если задать привязку для поддержки потоковой передачи. Однако существуют определенные условия, при которых сообщения необходимо помещать в буфер.
Многоадресность (буфер для создания дополнительных копий сообщения)
Переход на другой ресурс при отказе (буфер, необходимый для отправки сообщения в резервную копию)
System.ServiceModel.Routing.RoutingConfiguration.RouteOnHeadersOnly имеет значение «False» (буфер для представления MessageFilterTable с MessageBuffer, чтобы фильтры могли проверить текст)
Динамическая конфигурация