Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Служба маршрутизации — это универсальный посредник SOAP, который выступает в качестве маршрутизатора сообщений. Основная функция службы маршрутизации — это возможность маршрутизации сообщений на основе содержимого сообщения, которая позволяет пересылать сообщение в конечную точку клиента на основе значения внутри самого сообщения в заголовке или тексте сообщения.
Она RoutingService реализована как служба Windows Communication Foundation (WCF) в пространстве имен System.ServiceModel.Routing. Служба маршрутизации предоставляет одну или несколько конечных точек службы, которые получают сообщения, а затем перенаправляет каждое сообщение в одну или несколько конечных точек клиента на основе содержимого сообщения. Служба предоставляет следующие функции:
Маршрутизация на основе содержимого
- Агрегирование служб
- Управление версиями служб
- Маршрутизация с приоритетом
- Динамическая конфигурация
Сопряжение протоколов
Обработка SOAP
Расширенная обработка ошибок
Конечные точки резервного копирования
Хотя можно создать промежуточную службу, которая выполняет одну или несколько этих целей, зачастую такая реализация привязана к конкретному сценарию или решению и не может быть легко применена к новым приложениям.
Служба маршрутизации предоставляет универсальный, динамически настраиваемый, подключаемый посредник SOAP, совместимый с моделями службы WCF и канала, который позволяет выполнять маршрутизацию сообщений на основе содержимого.
Замечание
Служба маршрутизации в настоящее время не поддерживает маршрутизацию служб WCF REST. Для маршрутизации вызовов REST рекомендуется использовать System.Web.Routing или маршрутизацию запросов приложений.
Маршрутизация на основе содержимого
Маршрутизация на основе содержимого — это возможность маршрутизации сообщения на основе одного или нескольких значений, содержащихся в сообщении. Служба маршрутизации проверяет каждое сообщение и направляет его в конечную точку назначения на основе содержимого сообщения и создаваемой логики маршрутизации. Маршрутизация на основе содержимого предоставляет основу для агрегирования служб, управления версиями служб и маршрутизации приоритета.
Чтобы реализовать маршрутизацию на основе содержимого, служба маршрутизации использует MessageFilter реализации, которые служат для сопоставления определенных значений в маршрутизируемых сообщениях. Если MessageFilter соответствует сообщению, сообщение направляется в конечную точку назначения, связанную с MessageFilter. Фильтры сообщений группируются в таблицы фильтров (FilterTableCollection) для создания сложной логики маршрутизации. Например, таблица фильтров может содержать пять взаимоисключающих фильтров сообщений, которые вызывают маршрутизацию сообщений только в одну из пяти конечных точек назначения.
Служба маршрутизации позволяет настроить логику, используемую для выполнения маршрутизации на основе содержимого, а также динамически обновлять логику маршрутизации во время выполнения.
С помощью группировки фильтров сообщений в таблицы фильтров можно создать логику маршрутизации, которая позволяет обрабатывать несколько сценариев маршрутизации, таких как:
- Агрегирование служб
- Управление версиями служб
- Маршрутизация с приоритетом
- Динамическая конфигурация
Дополнительные сведения о фильтрах сообщений и таблицах фильтров см. в статье "Общие сведения о маршрутизации " и "Фильтры сообщений".
Агрегирование служб
С помощью маршрутизации на основе содержимого можно предоставить одну конечную точку, которая получает сообщения от внешних клиентских приложений, а затем направляет каждое сообщение в соответствующую внутреннюю конечную точку на основе значения в сообщении. Это полезно, чтобы предложить одну конкретную конечную точку для различных бекэнд-приложений, а также предоставить клиентам одну конечную точку приложения, разбивая ваше приложение на различные службы.
Управление версиями служб
При миграции на новую версию решения может потребоваться поддерживать старую версию параллельно для обслуживания существующих клиентов. Часто это требует, чтобы клиенты, подключающиеся к более новой версии, использовали другой адрес при взаимодействии с решением. Служба маршрутизации позволяет предоставлять одну конечную точку службы, которая служит обеим версиям решения путем маршрутизации сообщений в соответствующее решение на основе сведений о версии, содержащихся в сообщении. Пример такой реализации см. в статье "Практическое руководство. Управление версиями службы".
Приоритетная маршрутизация
При предоставлении службы для нескольких клиентов может быть соглашение об уровне обслуживания (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, чтобы фильтры могли проверить тело).
- Динамическая конфигурация.