Поделиться через


Активация UDP

Пример UdpActivation основан на примере транспорта: UDP . Он расширяет пример транспорта: UDP для поддержки активации процесса с помощью службы активации процесса Windows (WAS).

Образец состоит из трех основных частей:

  • Активатор протокола UDP - автономный процесс, получающий сообщения UDP от лица приложений, подлежащих активации.

  • Клиент, использующий пользовательский транспорт UDP для отправки сообщений.

  • Служба (размещенная в рабочем процессе, активированном службой WAS), получающая сообщения по пользовательскому транспорту UDP.

Активатор протокола UDP

Активатор протокола UDP — это мост между клиентом WCF и службой WCF. Он обеспечивает передачу данных через протокол UDP на транспортном уровне. У него две основные функции.

  • Адаптер прослушивателя WAS (LA), работающий совместно со службой WAS для активирования процессов в ответ на входящие сообщения.

  • Прослушиватель протокола UDP, который принимает сообщения UDP от лица приложений, подлежащих активации.

Активатор должен работать как автономная программа на компьютере сервера. Обычно адаптеры прослушивателя WAS (такие как NetTcpActivator и NetPipeActivator) реализуются в долговременных службах Windows. Однако для простоты и ясности в данном образце активатор протокола реализован как автономное приложение.

Адаптер прослушивателя WAS

Адаптер прослушивателя WAS для протокола UDP реализован в классе UdpListenerAdapter. Именно этот модуль во взаимодействии со службой WAS выполняет активацию приложения для протокола UDP. Это производится путем вызова следующих интерфейсов Webhost API:

  • WebhostRegisterProtocol

  • WebhostUnregisterProtocol

  • WebhostOpenListenerChannelInstance

  • WebhostCloseAllListenerChannelInstances

После исходного вызова WebhostRegisterProtocol адаптер прослушивателя получает обратный вызов ApplicationCreated от службы WAS для всех приложений, зарегистрированных в applicationHost.config (расположен в %windir%\system32\inetsrv). В этом образце обрабатываются только приложения с включенным протоколом UDP (с ИД протокола "net.udp"). Другие реализации могут выполнять эту обработку по-другому, если такие реализацию реагируют на динамические изменения конфигурации приложения (например, переход приложения из отключенного состояния во включенное).

Получение обратного вызова ConfigManagerInitializationCompleted показывает, что служба WAS завершила все уведомления для инициализации протокола. На этом этапе прослушиватель готов к обработке запросов активации.

При поступлении нового запроса, который является первым для приложения, адаптер прослушивателя вызывает WebhostOpenListenerChannelInstance в WAS, запуская рабочий процесс, если он еще не запущен. Затем загружаются обработчики протокола, и можно начинать обмен данными между адаптером прослушивателя и виртуальным приложением.

Адаптер прослушивателя зарегистрирован в файле %SystemRoot%\System32\inetsrv\ApplicationHost.config в <listenerAdapters> следующем разделе:

<add name="net.udp" identity="S-1-5-21-2127521184-1604012920-1887927527-387045" />

Прослушиватель протокола

Прослушиватель протокола UDP представляет собой модуль внутри активатора протокола, который ожидает передачи данных на конечной точке UDP от лица виртуального приложения. Он реализован в классе UdpSocketListener. Конечная точка представлена как IPEndpoint, номер порта для которой извлекается из привязки протокола для сайта.

Служба управления

В этом примере мы используем WCF для взаимодействия между активатором и рабочим процессом WAS. Служба, находящаяся в активаторе, называется службой управления.

Обработчики протоколов

После того как адаптер прослушивателя вызывает WebhostOpenListenerChannelInstance, диспетчер процесса WAS запускает рабочий процесс, если он еще не запущен. Затем диспетчер приложения внутри рабочего процесса загружает обработчик протокола процесса (PPH) UDP с запросом этого ListenerChannelId. PPH в очереди вызывается IAdphManager.StartAppDomainProtocolListenerChannel , чтобы запустить обработчик протокола UDP AppDomain (ADPH).

HostedUDPTransportConfiguration

Информация регистрируется в файле Web.config следующим образом:

<serviceHostingEnvironment>
<add name="net.udp" transportConfigurationType="Microsoft.ServiceModel.Samples.Hosting.HostedUdpTransportConfiguration, UdpActivation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6fa904d2da1848d6" />
</serviceHostingEnvironment>

Специальная настройка для этого примера

Этот образец может быть построен и запущен только в ОС Windows Vista, Windows Server 2008 или Windows 7. Для запуска этого примера необходимо сначала правильно установить все компоненты. Установите образец в соответствии с приведенными ниже шагами.

Настройка этого образца

  1. Установите ASP.NET 4.0 с помощью следующей команды.

    %windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable
    
  2. Постройте проект в ОС Windows Vista. После компиляции на этапе за построением также выполняются следующие операции.

    • Устанавливается привязка UDP на сайт "Веб-узел по умолчанию".

    • Создается виртуальное приложение "ServiceModelSamples", указывающее по физическому пути: "%SystemDrive%\inetpub\wwwroot\servicemodelsamples".

    • Также включается протокол "net.udp" для данного виртуального приложения.

  3. Запустите приложение пользовательского интерфейса "WasNetActivator.exe". Щелкните вкладку "Установка" , установите следующие флажки и нажмите кнопку "Установить ", чтобы установить их:

    • Адаптер прослушивателя UDP

    • Обработчики протокола UDP

  4. Перейдите на вкладку "Активация" приложения пользовательского интерфейса "WasNetActivator.exe". Нажмите кнопку "Пуск", чтобы запустить адаптер прослушивателя. Теперь все готово для запуска программы.

    Примечание.

    Завершив работу с этим примером, необходимо запустить файл Cleanup.bat, чтобы удалить привязку net.udp с сайта "Веб-узел по умолчанию".

Пример использования

После компиляции создаются четыре различных двоичных файла.

  • Client.exe: код клиента. Файл App.config компилируется в файл конфигурации клиента Client.exe.config.

  • UDPActivation.dll: библиотека, содержащая все основные реализации UDP.

  • Service.dll: код службы. Он копируется в каталог \bin виртуального приложения ServiceModelSamples. Файл службы называется Service.svc, а файл конфигурации — Web.config. После компиляции они копируются в следующее расположение: %SystemDrive%\Inetpub\wwwroot\ServiceModelSamples.

  • WasNetActivator: программа активатора UDP.

  • Убедитесь, что все обязательные элементы правильно установлены. Следующие шаги показывают, как запустить образец:

  1. Убедитесь, что запущены следующие службы Windows:

    • Служба активации Windows (WAS).

    • Службы IIS: W3SVC.

  2. Затем запустите активатор WasNetActivator.exe. На вкладке "Активация" в раскрывающемся списке выбран единственный протокол UDP. Нажмите кнопку "Пуск", чтобы запустить активатор.

  3. После запуска активатора можно запустить код клиента, запустив файл Client.exe в командном окне. Далее приводится образец вывода:

    Testing Udp Activation.
    Start the status service.
    Sending UDP datagrams.
    Type a word that you want to say to the server: Hello, world!
        Sending datagram: Hello, world![0]
        Sending datagram: Hello, world![1]
        Sending datagram: Hello, world![2]
        Sending datagram: Hello, world![3]
        Sending datagram: Hello, world![4]
    Calling UDP duplex contract (ICalculatorContract).
        0 + 0 = 0
        1 + 2 = 3
        2 + 4 = 6
        3 + 6 = 9
        4 + 8 = 12
    Getting status and dump server traces:
        Operation 'Hello' is called: Hello, world![0]
        Operation 'Hello' is called: Hello, world![1]
        Operation 'Hello' is called: Hello, world![2]
        Operation 'Hello' is called: Hello, world![3]
        Operation 'Hello' is called: Hello, world![4]
        Operation 'Add' is called: 0 + 0
        Operation 'Add' is called: 1 + 2
        Operation 'Add' is called: 2 + 4
        Operation 'Add' is called: 3 + 6
        Operation 'Add' is called: 4 + 8
    Press <ENTER> to complete test.