Protocol bindings что это

Обновлено: 02.07.2024

К примеру, можно зарегистрировать свой объект с помощью NBP, а затем использовать транспортный протокол, такой как ADSP, для связи с другими объектами; ADSP открывается сокет для сущности и присваивает этот номер сокета сущности. Сущность регистрирует имя NBP вместе с этим номером сокета.

С помощью данного протокола можно:

Привязки, предоставляемые системой

Информация в привязке может быть сложной, а некоторые параметры могут быть несовместимыми с другими. По этой причине в WCF включен набор привязок, предоставляемых системой. Эти привязки удовлетворяют большинство требований приложения. В следующих классах представлены некоторые примеры привязок, предоставляемых системой.

Полный список с описаниями всех привязок, предоставляемых WCF, см. в разделе привязки, предоставляемые системой.

Принцип работы

NBP позволяет привязать имя к внутреннему адресу хранилища для сущности и зарегистрировать эту связку, чтобы другие объекты могли его искать. Приложения могут отображать имена NBP для пользователей и использовать внутренние адреса для поиска объектов. Когда вы регистрируете имя и адрес пары, NBP подтверждает свою уникальность.

Имя объекта состоит из трех полей: объекта, типа и зоны. Значение для каждого из этих полей может быть буквенно-цифровой строкой длиной до 31 символа. Имя объекта не чувствительно к регистру. Вы указываете значение для полей объекта и типа.

Поле объекта обычно идентифицирует пользователя системы или самой системы в случае сервера. Приложения обычно устанавливают это значение на имя владельца, которое пользователь указывает через панель управления настройкой Sharing.

Поле типа обычно идентифицирует тип услуги, предоставляемой сущностью, например «Почтовый ящик» для электронного почтового ящика на сервере. Объекты того же типа могут находить друг друга и идентифицировать потенциальных партнеров, просматривая адреса, основанные только на части типа имени.

Поле зоны определяет зону, к которой принадлежит узел. Вы не указываете это значение; при регистрации процесса вы указываете звездочку (*) для этого поля. NBP интерпретирует звездочку для обозначения текущей зоны или зоны, в случае простой сетевой конфигурации, не разделенной на зоны. [Источник 1]

Код и конфигурация

Определить привязки можно двумя способами: через код или конфигурацию. Применять эти два способа можно независимо от того, какая привязка используется - предоставляемая системой или пользовательская. Как правило, использование кода позволяет полностью управлять определением привязки во время разработки. С другой стороны, с помощью конфигурации можно изменять параметры привязки, используя системный администратор или пользователь службы или клиента WCF, без повторной компиляции приложения службы. Такая гибкость часто желательно, так как вы не сможете предсказать конкретные требования к компьютерам, на которых должно быть развернуто приложение WCF. Если не указывать привязку (и адрес) в коде, их можно изменять без повторной компиляции или повторного развертывания приложения. Обратите внимание, что привязки, определенные в коде, создаются после задания привязок в конфигурации, что позволяет определенным в коде привязкам переопределять любые привязки, определенные в конфигурации.

Общие сведения о привязках Windows Communication Foundation

привязки — это объекты, которые используются для указания сведений о соединении, необходимых для подключения к конечной точке службы Windows Communication Foundation (WCF). Для каждой конечной точки в службе WCF необходимо правильно указать привязку. В этом разделе описываются типы сведений о соединении, определяемые привязками, элементы привязки, привязки, которые включаются в WCF, а также способ указания привязки для конечной точки.

Элементы привязки

NPBSetNTE

Процедуры NBP включают процедуру NPBSetNTE, которую вы можете использовать для заполнения записи таблицы имен, которая находится в формате, который ожидает NBP. Процедура NPBSetNTE принимает имя и идентификатор сокета, которые вы указали, и строит запись таблицы имен в указанном вами буфере.

Всякий раз, когда узел получает запрос поиска NBP, NBP выполняет поиск в своей таблице имен для соответствия и, если он находит совпадение, возвращает информацию запрашивающему. [Источник 2]

Что определяет привязка

Архитектура

Отображение имен для адресов, поддерживаемых NBP, важно для AppleTalk, поскольку номера адресов, которые использует AppleTalk, не являются фиксированными. AppleTalk назначает адрес динамически к узлу, когда узел сначала присоединяется к сети и всякий раз, когда узел перезагружается. Из-за этого, адрес узла в сети AppleTalk может время от времени меняться. Хотя номер сети соответствует конкретной связи, а номер сетевого номера адреса относительно стабилен, номер сокета, назначенный сущности, обычно генерируется случайным образом. Хотя NBP не является транспортным протоколом, то есть вы не используете его для отправки и получения данных, NBP является клиентом DDP. На рисунке 1 показаны NBP и его базовая архитектура.


Рисунок 1 – Протокол привязки имени и базовые протоколы AppleTalk

NBP предоставляет сетевым объектам доступ к текущим адресам других объектов. Часть названия отображения NBP также важна для идентификации и определения местонахождения объекта в сети. Имя объекта NBP отличается от имени приложения. Приложение может отображать имена объектов для пользователей и искать адреса на основе имен.

Во время инициализации серверное приложение может подключиться к NBP для регистрации, чтобы его клиенты могли получить доступ к серверу, когда они выходят в Интернет. Однако игровое приложение может регистрироваться, когда пользователь запускает его, чтобы партнерские приложения того же тип может найти его, а затем удалить его запись из каталога имен NBP, когда пользователь покидает приложение.

Несмотря на то, что вы регистрируете имя NBP своего объекта в связи с используемым им сокетом, NBP ведет запись, содержащую полный адрес интернет-сокета вашего объекта. Адрес интернет-сокета, также называемый интернет-адресом, включает в себя номер сокета, идентификатор узла и номер сети. Все видимые в сети объекты в Интернете - это клиенты сокетов, что означает, что каждый из них связан с сокетом. Каждый сокет имеет уникальный номер, и каждый объект имеет уникальный адрес интернет-сокета, который идентифицирует его. Номер сокета в интернет-адресе гарантирует, что данные, предназначенные для объекта, передаются этому конкретному объекту.

Протокол доступа к каналу динамически присваивает уникальный идентификатор узла каждому узлу, когда он присоединяется к сети. Когда пользователь перезагружает систему, иногда доступен один и тот же идентификатор узла и присваивается новый идентификатор узла. Номер сети - это идентификатор, к которой узел подключен напрямую, и он остается таким же, поскольку узел физически связан с этой сетью. NBP заполняет идентификатор узла и номер сети в записи таблицы имен. Вы не предоставляете эти части интернет-адреса.


Рисунок 2 – Таблица имен NBP на каждом узле, вместе образующая каталог имен NBP

Protocol Binding States and Operations

An NDIS protocol driver must support the following operational states for each binding that the driver manages:

Unbound
The Unbound state is the initial state of a binding. In this state, the protocol driver waits for NDIS to call the ProtocolBindAdapterEx function.

Opening
In the Opening state, a protocol driver allocates resources for the binding and attempts to open the adapter.

Running
In the Running state, a protocol driver performs send and receive processing for a binding.

Closing
In the Closing state, the protocol driver closes the binding to the adapter and then releases the resources for the binding.

Pausing
In the Pausing state, a protocol driver completes any operations that are required to stop send and receive operations for a binding.

Paused
In the Paused state, the protocol driver does not perform send or receive operations for a binding.

Restarting
In the Restarting state, a protocol driver completes any operations that are required to restart send and receive operations for a binding.

In the following table, the headings represent the binding states, and events are listed in the first column. The rest of the entries in the table specify the next state that the binding enters after an event occurs within a state. The blank entries represent invalid event/state combinations.

Bind is complete

Unbind is complete

Pause is complete

Restart is complete

Send and receive operations

Note The events listed in the preceding table are the primary events for an NDIS protocol binding. Additional events will be added to this table as the information becomes available.

The primary binding events are defined as follows:

ProtocolBindAdapterEx
After NDIS calls the driver's ProtocolBindAdapterEx function, the binding enters the Opening state. For more information, see Binding to an Adapter.

Bind failed
If the protocol driver fails to bind to the adapter, the binding returns to the Unbound state.

Bind is complete
If the driver successfully opens the adapter, the binding enters the Paused state. The driver completes the bind operation.

ProtocolUnbindAdapterEx
After NDIS calls the driver's ProtocolUnbindAdapterEx hander, the binding enters the Closing state. For more information, see Unbinding from an Adapter.

Unbind is complete
After the driver completes the unbind operation, the binding enters the Unbound state.

PnP Pause
After NDIS sends the protocol driver a network Plug and Play (PnP) pause event notification, the binding enters the Pausing state. For more information see Pausing a Binding.

Pause is complete
After the driver has completed all operations that are required to stop send and receive operations, the pause operation is complete and the binding is in the Paused state.

Note The driver must wait for all its outstanding send requests to complete before the pause operation is complete.

PnP Restart
After NDIS sends the protocol driver a network PnP restart event notification, the binding enters the Restarting state. For more information, see Restarting a Binding.

Restart is complete
After the driver is ready to handle send and receive operations, the restart operation is complete and the binding is in the Running state.

Restart failed
If NDIS sends the protocol driver a network PnP restart event notification and the restart attempt fails, the binding returns to the Paused state.

Send and Receive Operations
A protocol driver must handle send and receive operations in the Running and Pausing states. For more information about send and receive operations, see Protocol Driver Send and Receive Operations.

OID Requests
A protocol driver can initiate OID requests to set or query information in underlying drivers. A protocol driver can initiate OID requests from all states, except Unbound and Opening.



1. Общий план

В принципе уже этой схемы достаточно для прохождения интервью в большинстве компаний и получения общего представления об архитектуре IIS. Но если вы не для галочки сюда зашли, то прошу следовать далее.

2. Крупный план

Теперь остановимся чуть поподробнее на каждом из упомянутых компонентов.

2.2. World Wide Web Publishing Service (W3SVC)



Рис.2. Рабочий процесс со службами W3SVC и WAS.

  • NetTcpActivator для протокола TCP;
  • NetPipeActivator для Named Pipes;
  • NetMsmqActivator для Message Queuing (ака MSMQ).

Но всё-таки наиболее важным для нас адаптером является именно WWW-служба, т.ч. остановимся чуть подробнее на двух оставшихся от IIS 6 функциях.

2.3. Windows Process Activation Service (WAS)
  • Адаптеры прослушивателей (Listener adapters) – специальные службы Windows, работающие с конкретным протоколом и взаимодействующие с WAS для направления запросов к правильному рабочему процессу.
  • Собственно WAS. Она ответственна за создание рабочих процессов и управление их временем жизни.
  • Исполняемый файл w3wp.exe – шаблон рабочего процесса.
  • Менеджер приложений управляет созданием и утилизацией доменов приложений (application domains), которые хостятся внутри рабочего процесса.
  • Обработчики протоколов – протоколозависимые компоненты внутри рабочего процесса, ответственные за обмен данными между конкретным адаптером и рабочим процессом. Есть 2 типа обработчиков протоколов: у процесса (process protocol handler — PPH) и у домена приложения (AppDomain protocol handlers — ADPH).



Рис. 4. Компоненты w3wp.exe для взаимодействия с внешними компонентами.

А соответствующие компоненты PPH и ADPH настраиваются в дотнетовском machine.config:

В конфигурационном файле веб-сервера ApplicationHost.config вместе с настройками приложений хранятся связки (bindings), определяющие параметры входящих запросов, которые будут направляться данному приложению. Такими параметрами являются название сетевого протокола, IP-адрес сервера, доменное имя и порт сайта. Эти параметры должны быть уникальными среди работающих приложений для однозначной идентификации целевого приложения. Служба WAS отслеживает это ограничение и не даст вам запустить сайт, у которого это условие не соблюдено, либо предложит остановить сайт с такой же связкой.

2.4. Пул приложений

При конфигурации веб-приложения помимо привязок (binding) к параметрам запросов и прочих настроек указывается принадлежность к пулу приложений. Пул приложений стал нововведением в IIS 6 и был призван обеспечить изоляцию веб-приложений друг от друго и тем самым повысить стабильность работы веб-сервера в целом. Суть заключается в том, что код приложения выполняется внутри специального процесса Windows – w3wp.exe. Поэтому исключение внутри веб-приложения приведёт к краху только этого процесса и никак не повлияет на доступность веб-приложений в других пулах и работу служб IIS. Более того, служба WAS попытается заново запустить упавший сайт, и внешние клиенты могут даже не заметить проблем в работе сервера.

Для управления некоторыми параметрами отдельно взятого рабочего процесса w3wp.exe в IIS используется пул приложений. Наиболее часто используемыми из них являются учётная запись, под которой будет запущен процесс, ограничения для очереди запросов, различные таймеры и счетчики для автоматического перезапуска процесса, архитектура x86/x64 (в IIS 7.x) и некоторые другие (рис. 5), о чём любопытный читатель может с лёгкостью прочесть в MSDN и любимом поисковике. Т.о. можно говорить (с определёнными оговорками, см. тж. последний абзац в 2.5) о тождественности процесса w3wp.exe и пула приложений.



Рис. 5 Дополнительные настройки пула приложений



Рис. 6. Идеология модулей в IIS.

На практике самое важное, что необходимо учитывать при разработке и развёртывании веб-приложений, – это частичная несовместимость этих двух режимов. Т.е. при переводе сайта (точнее пула приложений, в котором работает сайт) из классической модели во встраиваемую практически всегда потребуется корректировка кода (хоть, возможно, и не значительная), а также тщательное тестирование.

2.5. Домен приложения, приложение

Ещё один важный момент, который хотелось бы здесь отметить. По умолчанию каждый отдельный рабочий процесс может использовать все имеющиеся на сервере процессоры/ядра, а пул приложений работает на одном рабочем процессе и, следовательно, веб-приложение работает внутри одного IIS-приложения. Тем не менее, вы можете настроить web garden, увеличив кол-во рабочих процессов на пул и, следовательно, число IIS-приложений на одно веб-приложение. Вы без труда сможете найти на просторах интернета информацию о web garden, поэтому опускаю здесь подробности. Единственное, хотелось бы предупредить, что данное средство не является инструментом увеличения производительности, т.к. по умолчанию и так используются все вычислительные мощности сервера. Наоборот, на синхронизацию работы 2+ рабочих процессов уходил «лишнее» время CPU. Делается это в основном для увеличения доступности веб-приложения. Нельзя здесь также не упомянуть о веб-ферме (web farm), как о простейшем средстве балансировки нагрузки в IIS – об этом тоже достаточно статей в Сети. Это другой пример распределённого веб-приложения. Впрочем, с тем же nginx встроенная балансировка нагрузки в IIS конкуренции не выдерживает, и в реальных высоконагрузочных системах вам придётся изобретать свой велосипед или задействовать продукты сторонних производителей.

3. Что дальше?

Дальше нужно разбираться в работе модулей (в терминах IIS) и событийной модели, в которых уже происходит собственно обработка запроса, о чем упоминалось в разделе 2.4. Вообще говоря, эта тема заслуживает отдельной статьи, на которую, боюсь, меня уже не хватит. Но без этого нельзя сказать, что мы рассмотрели весь конвейер обработки запросов. Поэтому кратко пройдёмся здесь по основным моментам, которые любопытствующий читатель может проработать самостоятельно.

Использование собственных привязок

Если ни одна из предоставляемых системой привязок не имеет требуемого приложением службы сочетания возможностей, можно создать собственную привязку. Это можно сделать двумя способами. Можно создать новую привязку из уже имеющихся элементов привязки с помощью объекта CustomBinding или создать полностью пользовательскую привязку, наследуемую от привязки Binding. Дополнительные сведения о создании собственной привязки с помощью этих двух подходов см. в разделе пользовательские привязки и создание привязок User-Defined.

Использование привязок

Использование привязок включает два основных этапа.

Выбор или определение привязки. Самый простой способ — выбрать одну из предоставляемых системой привязок, включенных в WCF, и использовать ее с параметрами по умолчанию. Также можно выбрать предоставляемую системой привязку и сбросить значения ее свойств таким образом, чтобы они соответствовали нужным требованиям. Кроме того, можно создать пользовательскую или определяемую пользователем привязку с расширенными возможностями управления и настройки.

Создайте конечную точку, которая использует выбранную или определенную привязку.

Читайте также: