Выбор транспортов
В этом разделе рассматриваются критерии выбора трех основных транспортов, включенных в 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:WeakWild карта:net.pipe:/<machine name>/Status: ConflictingRegistration Exception: Process Name: SMSvcHost Process ID: 1076\
Факторы, определяющие выбор транспорта
В следующей таблице описаны стандартные факторы, которые необходимо учитывать при выборе транспорта. Необходимо также рассмотреть все дополнительные атрибуты и транспорты, применимые к приложению. Определите важные для приложения атрибуты и транспорты, которые успешно связываются с каждым из атрибутов, затем выберите транспорты, которые лучше всего подходят к составленному набору атрибутов.
Атрибут | Description | Поддерживаемые транспорты |
---|---|---|
Диагностика | Диагностика позволяет автоматически выявлять проблемы с подключением транспорта. Все транспорты поддерживают возможность обратной отправки информации о сбоях подключения. Однако WCF не включает средства диагностики для изучения проблем с сетью. | нет |
Размещение на компьютере | Все конечные точки WCF должны размещаться в приложении. IIS 6.0 и более ранних версий поддерживают только размещение приложений, использующих транспорт HTTP. В Windows Vista поддержка добавляется для размещения всех транспортных объектов WCF, включая TCP и именованные каналы. Дополнительные сведения см. в разделе "Размещение" в службы IIS и размещении в службе активации процесса Windows. | HTTP |
Инспекция | Проверка - это возможность извлекать и обрабатывать информацию из сообщений во время передачи. Протокол HTTP отделяет сведения о маршрутизации и управлении от данных, благодаря чему легче создавать средства для проверки и анализа сообщений. Транспорты, которые легко проверять, также требуют меньше вычислительной производительности в сетевых устройствах. Возможность проверки сообщений зависит от заданного уровня безопасности. | HTTP |
Задержка | Задержка - это минимальный промежуток времени, необходимый для завершения обмена сообщениями. Все сетевые операции имеют то или иное значение задержки, которое зависит от выбранного транспорта. При односторонней или дуплексной связи с использованием транспорта, собственным шаблоном обмена сообщениями которого является "запрос-ответ" (например, HTTP), задержка увеличивается, так как организуется принудительная корреляция сообщений. В этом случае целесообразно использовать транспорт с собственным дуплексным шаблоном обмена сообщениями (например, TCP). | TCP, именованный Pipe |
Охват | Область действия транспорта характеризует способность транспорта подключаться к другим системам. Транспорт именованных каналов имеет очень небольшую область действия, так как он может подключаться только к службам, выполняемым на том же компьютере. Транспорты TCP и HTTP обладают широкой областью действия и способны проникать в некоторые конфигурации NAT и конфигурации брандмауэра. Дополнительные сведения см. в статье "Работа с NATs и брандмауэрами". | HTTP, TCP |
Безопасность | Безопасность - это возможность защищать сообщения во время передачи с помощью конфиденциальности, целостности или проверки подлинности. Конфиденциальность защищает сообщение от изучения, целостность - от изменения, а проверка подлинности предоставляет гарантии относительно отправителя или получателя сообщения. WCF поддерживает безопасность передачи как на уровне сообщения, так и на уровне транспорта. Безопасность сообщения составляется с транспортом, если транспорт поддерживает режим буферизованной передачи. Поддержка транспортной безопасности варьируется в зависимости от выбранного транспорта. Транспорты HTTP, TCP и транспорт именованных каналов обеспечивают практически одинаковую поддержку безопасности транспорта. |
Все |
Пропускная способность | Этот показатель измеряет объем данных, которые можно передать и обработать за указанный промежуток времени. Выбор транспорта влияет на пропускную способность операций службы, как и на задержку. Чтобы обеспечить максимальную пропускную способность транспорта, необходимо свести к минимуму нагрузку передаваемого содержимого и максимально сократить время ожидания завершения обмена сообщениями. При использовании транспорта TCP и транспорта именованных каналов к телу сообщения добавляется незначительная нагрузка, более того, эти транспорты поддерживают собственную дуплексную форму, благодаря чему сокращается время ожидания ответных сообщений. | TCP, именованный канал |
Средства | Инструментарий представляет поддержку сторонних приложений для протокола, с помощью которого осуществляются разработка, диагностика, размещение и другие операции с приложением. Очень выгодным вложением станет создание средств и программного обеспечения для работы с протоколом HTTP. | HTTP |