Windows Communication Foundation (WCF) — это фреймворк от Microsoft для создания распределённых приложений. А Non-HTTP Activation позволяет запускать WCF-сервисы не только через HTTP, но и по другим протоколам: TCP, Named Pipes, MSMQ. То есть, Windows communication foundation non http activation что это — это компонент, который расширяет возможности взаимодействия между приложениями за счёт поддержки альтернативных транспортных протоколов.

Почему это важно? подходит не для всех сценариев. Например, для внутренних систем с высокими требованиями к производительности или безопасности лучше использовать или Named Pipes. Non-HTTP Activation как раз и нужен, чтобы мог работать с этими протоколами без привязки к веб-серверу.

В этой статье разберём, как работает Non-HTTP Activation, где его применяют, и как настроить для разных протоколов.

Что такое Non-HTTP Activation в WCF

Non-HTTP Activation — это механизм, который позволяет запускать WCF-сервисы без использования HTTP-протокола. В стандартной конфигурации WCF-сервисы чаще всего хостятся в и используют HTTP/HTTPS для обмена данными. Однако в корпоративных сетях или при работе с внутренними сервисами может быть избыточным или неэффективным.

Non-HTTP Activation решает эту проблему, предоставляя возможность:

  • Использовать netTcpBinding для быстрого обмена данными по TCP;
  • Работать с netNamedPipeBinding для межпроцессового взаимодействия на одной машине;
  • Интегрироваться с netMsmqBinding для асинхронного обмена сообщениями через Microsoft Message Queuing (MSMQ).

Этот компонент — частью Windows Process Activation Service (WAS), который расширяет функциональность IIS, позволяя активировать WCF-сервисы через не-HTTP протоколы.

💡

Для работы Non-HTTP Activation требуется включить соответствующие компоненты Windows. Без этого WCF-сервисы не смогут использовать TCP, Named Pipes или MSMQ.

Протокол Скорость Безопасность Сценарии применения
HTTP (basicHttpBinding, wsHttpBinding) Средняя SSL/TLS, аутентификация через IIS Веб-сервисы, публичные API, кросс-платформенные решения
TCP (netTcpBinding) Высокая Шифрование, аутентификация Windows Внутренние сети, высоконагруженные системы
Named Pipes (netNamedPipeBinding) Очень высокая Аутентификация Windows, изоляция процессов Локальные межпроцессовые вызовы
MSMQ (netMsmqBinding) Низкая (асинхронно) Шифрование сообщений, аутентификация Отложенная обработка, устойчивость к сбоям

Сравнение и Non-HTTP протоколов в WCF

Каждый протокол в имеет свои особенности, плюсы и минусы. таблица сравнения ключевых характеристик и Non-HTTP протоколов.

Из таблицы видно, что netTcpBinding и netNamedPipeBinding обеспечивают более высокую производительность по сравнению с HTTP, но подходят только для закрытых сетей. netMsmqBinding полезен, когда нужно гарантировать доставку сообщений даже при временных сбоях связи.

Где применяется Non-HTTP Activation

Non-HTTP Activation в используется в следующих сценариях:

  • Корпоративные приложения. Внутренние системы часто обмениваются данными по или Named Pipes, чтобы уменьшить накладные расходы на сетевой трафик и ускорить работу.
  • Микросервисы. В архитектурах с большим количеством сервисов на одной машине Named Pipes позволяет эффективно организовывать межпроцессовое взаимодействие.
  • Обработка сообщений. MSMQ применяется, когда нужно обеспечить надёжную доставку сообщений, например, в системах бронирования или финансовых транзакциях.
  • Высокопроизводительные системы. TCP позволяет достичь более высокой пропускной способности по сравнению с за счёт уменьшения объёма служебной информации.

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

Как настроить Non-HTTP Activation

Чтобы WCF-сервис мог работать с Non-HTTP протоколами, нужно выполнить несколько шагов:

  1. Установить компоненты Windows. Включите Windows Communication Foundation Non-HTTP Activation в компонентах Windows. Это можно сделать через Панель управления → Программы и компоненты → Включение или отключение компонентов Windows.
  2. Настроить хостинг. Для и Named Pipes можно использовать Windows Process Activation Service (WAS) или самохост (self-hosting). В случае с WAS сервис будет управлять жизненным циклом приложения автоматически.
  3. Задать привязку в конфигурации. В файле web.config или app.config укажите нужную привязку, например:
    <service name="MyService">
     <endpoint address="net.tcp://localhost:8000/MyService" binding="netTcpBinding" contract="IMyService" />
    </service>
  4. Открыть порты в брандмауэре. Для нужно открыть соответствующий порт (например, 8000) в брондмауэре Windows.
⚠️ Внимание: При использовании Named Pipes убедитесь, что сервис и клиент работают под одной учётной записью или имеют соответствующие права доступа. В противном случае соединение будет отклонено.
Какой протокол вы чаще используете в WCF?
HTTP
TCP
Named Pipes
MSMQ

Сравнение производительности протоколов WCF

Производительность — ключевой фактор при выборе протокола. представлены данные тестов произведенных на типичном сервере с 16 ядрами и 32 ГБ ОЗУ. Результаты могут варьироваться в зависимости от конфигурации системы и сетевой инфраструктуры.

Протокол Время отклика (мс) Пропускная способность (сообщений/сек) Нагрузка на CPU
HTTP (basicHttpBinding) 15–25 1000–1500 Средняя
TCP (netTcpBinding) 2–5 5000–8000 Низкая
Named Pipes (netNamedPipeBinding) 0.5–1 10000+ Очень низкая
MSMQ (netMsmqBinding) 100–500 100–300 Низкая

Из таблицы видно, что Named Pipes обеспечивает минимальное время отклика и максимальную пропускную способность, но работает только в пределах одной машины. подходит для сетевого взаимодействия с высокими требованиями к производительности. MSMQ, хоть и медленный, гарантирует доставку сообщений.

Типичные ошибки и их решения

При настройке Non-HTTP Activation разработчики часто сталкиваются с ошибками. Вотные из них и способы их устранения:

Перед началом настройки проверьте, что компонент Windows Communication Foundation Non-HTTP Activation включён в системе. Это решает 80% проблем с активацией сервисов.

ЕслиWindows Communication Foundation Non-HTTP Activation не установлен, WCF-сервисы не смогут использовать TCP, Named Pipes или MSMQ. Чтобы проверить его наличие, выполните в командной строке:

dism /online /get-features | find "CF-NonHTTP-Activation"

Если компонент отключён, включите его командой:

dism /online /enable-feature /featurename:WCF-NonHTTP-Activation

Пошаговая инструкция по настройке TCP-ендпоинта

Рассмотрим пошаговую настройку WCF-сервиса с использованием netTcpBinding.

1. Включите компонент Windows Communication Foundation Non-HTTP Activation в компонентах Windows.

2. Создайте WCF-сервис с интерфейсом и реализацией.

3. В файле app.config добавьте конфигурацию для TCP:

<system.serviceModel>
 <services>
 <service name="MyNamespace.MyService">
 <endpoint address="net.tcp://localhost:8000/MyService" binding="netTcpBinding" contract="MyNamespace.IMyService" />
 </service>
 </services>
</system.serviceModel>

4. Запустите сервис. Убедитесь, что порт 8000 открыт в брандмауэре.

5. В клиентском приложении добавьте аналогичную конфигурацию для подключения к сервису.