Выбор транспортов
В этом разделе описываются критерии выбора одного из трех основных транспортов, входящих в состав Windows Communication Foundation (WCF): HTTP, TCP и именованных каналов. WCF также включает транспорт очереди сообщений (также известный как MSMQ), однако в этом документе не описываются очереди сообщений.
Модель программирования WCF отделяет операции конечных точек (выраженные в контракте службы) от транспортного механизма, соединяющего две конечные точки. Это позволяет выбирать способ предоставления служб сети.
В WCF способ передачи данных по сети между конечными точками задается с помощью привязки, которая состоит из последовательности элементов привязки. Транспорт представляется элементом привязки транспорта, являющимся частью привязки. В привязку входят необязательные элементы привязки протокола, такие как безопасность, обязательный элемент привязки кодировщика сообщений и обязательный элемент привязки транспорта. Транспорт отправляет другому приложению сериализованную форму сообщения и получает ее от этого приложения.
При необходимости подключиться к существующему клиенту или серверу не всегда имеется возможность выбрать определенный транспорт. Однако доступ к службам WCF может осуществляться через несколько конечных точек, каждая из которых использует разный транспорт. Если один транспорт не охватывает всю аудиторию, для которой предназначена служба, целесообразно предоставлять службы через несколько конечных точек. Это позволит клиентским приложениям выбирать наиболее подходящие конечные точки.
После выбора транспорта необходимо выбрать использующую его привязку. Можно выбрать привязку, предоставляемую системой (см. раздел Привязки, предоставляемые системой), или создать пользовательскую привязку (см. раздел Пользовательские привязки). Также можно создать собственную привязку. Дополнительные сведения см. в разделе Создание пользовательских привязок.
Преимущества каждого транспорта
В этом разделе описываются основные причины выбора одного из трех основных транспортов и приводится подробная диаграмма принятия решений, которая поможет сделать правильный выбор.
Использование транспорта HTTP
HTTP — это протокол обмена запросами и ответами между клиентами и серверами. Чаще всего он используется при взаимодействии клиентов веб-обозревателя с веб-сервером. Клиент отправляет запрос на сервер, который ожидает передачи сообщений запроса клиента. После получения запроса сервер возвращает ответ, в котором содержится состояние запроса. Если попытка успешна, возвращаются такие необязательные данные как веб-страница, сообщение об ошибке и другая информация. Дополнительные сведения протоколе HTTP см. в разделе HTTP — протокол передачи гипертекста.
Протокол HTTP функционирует не на основе подключения, т. е. после отправки ответа состояние не поддерживается. Обработка многостраничных транзакций возможна только при сохранении необходимого состояния приложения.
В WCF привязка транспорта HTTP оптимизирована для обеспечения взаимодействия с системами, отличными от WCF, прежних версий. Если все взаимодействующие стороны используют WCF, привязки на основе TCP или именованных каналов работают быстрее. Дополнительные сведения см. в разделе NetTcpBinding и NetNamedPipeBinding.
Использование транспорта TCP
Протокол TCP — это поточно-ориентированная служба доставки на основе подключения с возможностью сквозного обнаружения и исправления ошибок. На основе подключения означает, что до начала обмена данными между узлами устанавливается сеанс связи. Узел — это любое устройство в сети TCP/IP, идентифицируемое логическим IP-адресом.
Протокол TCP обеспечивает надежную доставку данных и отличается простотой в использовании. В частности, протокол TCP уведомляет отправителя о доставке пакета, гарантирует сохранение очередности пакетов в процессе доставки, повторно передает потерянные пакеты и препятствует дублированию пакетов данных. Обратите внимание, что такая надежная доставка осуществляется между двумя узлами TCP/IP и отличается от доставки по протоколу WS-ReliableMessaging, так как последняя осуществляется между конечными точками независимо от того, сколько промежуточных узлов входит в их состав.
Транспорт TCP WCF оптимизирован для сценария, в котором обе взаимодействующие стороны используют WCF. Эта привязка является самой быстрой из всех привязок WCF для сценариев, предполагающих взаимодействие между разными компьютерами. Обмены сообщениями используют элемент привязки BinaryMessageEncodingBindingElement для оптимизированной передачи сообщений. TCP обеспечивает дуплексную связь, следовательно, этот протокол можно использовать для реализации дуплексных контрактов, даже если клиент находится за пределами преобразования сетевых адресов (NAT).
Использование транспорта именованного канала
Именованный канал — это объект в ядре операционной системы Windows, такой как, например, общая область памяти, которая может использоваться процессами для взаимодействия. Именованный канал имеет имя, его можно использовать для односторонней или дуплексной связи между процессами на одном компьютере.
Если необходимо наладить связь между разными приложениями WCF на одном компьютере и не допустить участия во взаимодействии другого компьютера, следует использовать транспорт именованных каналов. При этом действует еще одно ограничение: процессы, выполняемые с удаленного рабочего стола Windows, могут ограничиваться тем же сеансом удаленного рабочего стола Windows, если они не обладают привилегиями более высокого уровня.
Внимание! |
---|
При использовании транспорта именованного канала с резервированием URL-адресов со слабым шаблоном на нескольких узлах, размещенных на IIS, может возникнуть следующая ошибка: Возникла ошибка в службе активации «NetPipeActivator» протокола «net.pipe» при попытке прослушивания узла «2», поэтому протокол для узла был временно отключен. Дополнительные сведения см. в описании сообщения об исключении. URL: WeakWildcard:net.pipe:/<machine name>/ Status: ConflictingRegistration Exception: Process Name: SMSvcHost Process ID: 1076\ |
Факторы, определяющие выбор транспорта
В следующей таблице описаны стандартные факторы, которые необходимо учитывать при выборе транспорта. Необходимо также рассмотреть все дополнительные атрибуты и транспорты, применимые к приложению. Определите важные для приложения атрибуты и транспорты, которые успешно связываются с каждым из атрибутов, затем выберите транспорты, которые лучше всего подходят к составленному набору атрибутов.
Атрибут | Описание | Поддерживаемые транспорты |
---|---|---|
Диагностика |
Диагностика позволяет автоматически выявлять проблемы с подключением транспорта. Все транспорты поддерживают возможность обратной отправки информации о сбоях подключения. Однако в состав WCF не входят средства диагностики для исследования неполадок в сети. |
None |
Размещение |
Все конечные точки WCF должны размещаться внутри приложения. IIS 6,0 и более ранних версий поддерживают только ведущие приложения, которые используют транспорт HTTP. В Windows Vista добавлена поддержка размещения всех транспортов WCF, включая протокол TCP и именованные каналы. Дополнительные сведения см. в разделе Размещение в службах IIS и Размещение в службе активации процессов Windows. |
HTTP |
Проверка |
Проверка — это возможность извлекать и обрабатывать информацию из сообщений во время передачи. Протокол HTTP отделяет сведения о маршрутизации и управлении от данных, благодаря чему легче создавать средства для проверки и анализа сообщений. Транспорты, которые легко проверять, также требуют меньше вычислительной производительности в сетевых устройствах. Возможность проверки сообщений зависит от заданного уровня безопасности. |
HTTP |
Задержка |
Задержка — это минимальный промежуток времени, необходимый для завершения обмена сообщениями. Все сетевые операции имеют то или иное значение задержки, которое зависит от выбранного транспорта. При односторонней или дуплексной связи с использованием транспорта, собственным шаблоном обмена сообщениями которого является "запрос-ответ" (например, HTTP), задержка увеличивается, так как организуется принудительная корреляция сообщений. В этом случае целесообразно использовать транспорт с собственным дуплексным шаблоном обмена сообщениями (например, TCP). |
TCP, именованный канал |
Область действия |
Область действия транспорта характеризует способность транспорта подключаться к другим системам. Транспорт именованных каналов имеет очень небольшую область действия, так как он может подключаться только к службам, выполняемым на том же компьютере. Транспорты TCP и HTTP обладают широкой областью действия и способны проникать в некоторые конфигурации NAT и конфигурации брандмауэра. Дополнительные сведения см. в разделе Работа со средствами NAT и брандмауэрами. |
HTTP, TCP |
Безопасность |
Безопасность — это возможность защищать сообщения во время передачи с помощью конфиденциальности, целостности или проверки подлинности. Конфиденциальность защищает сообщение от изучения, целостность — от изменения, а проверка подлинности предоставляет гарантии относительно отправителя или получателя сообщения. WCF поддерживает безопасность передачи как на уровне сообщения, так и на уровне транспорта. Безопасность сообщения составляется с транспортом, если транспорт поддерживает режим буферизованной передачи. Поддержка транспортной безопасности варьируется в зависимости от выбранного транспорта. Транспорты HTTP, TCP и транспорт именованных каналов обеспечивают практически одинаковую поддержку безопасности транспорта. |
Все |
Пропускная способность |
Этот показатель измеряет объем данных, которые можно передать и обработать за указанный промежуток времени. Выбор транспорта влияет на пропускную способность операций службы, как и на задержку. Чтобы обеспечить максимальную пропускную способность транспорта, необходимо свести к минимуму нагрузку передаваемого содержимого и максимально сократить время ожидания завершения обмена сообщениями. При использовании транспорта TCP и транспорта именованных каналов к телу сообщения добавляется незначительная нагрузка, более того, эти транспорты поддерживают собственную дуплексную форму, благодаря чему сокращается время ожидания ответных сообщений. |
TCP, именованный канал |
Инструментарий |
Инструментарий представляет поддержку сторонних приложений для протокола, с помощью которого осуществляются разработка, диагностика, размещение и другие операции с приложением. Очень выгодным вложением станет создание средств и программного обеспечения для работы с протоколом HTTP. |
HTTP |
См. также
Справочник
BasicHttpBinding
WsHttpBinding
WsDualHttpBinding
WsFederationHttpBinding
HttpTransportBindingElement
NetTcpBinding
TcpTransportBindingElement
NetNamedPipeBinding
NamedPipeTransportBindingElement
Основные понятия
Привязки, предоставляемые системой
Создание пользовательских привязок