Как сделать из вашего пользовательского HTTP-модуля автономный HTTP-сервер?

Как сделать из вашего пользовательского HTTP-модуль автономный сервер TCP\HTTP, способный, например, работать рядом с любым другим HTTP-сервером (на том же порту, просто используя некоторое пространство имен URL-адресов, например www.example.com/myModule/blabla?id=anyID, и не привязанный к моему другие серверы, такие как HTTP-сервер apache с PHP (поэтому я могу называть его www.example.com/myApach/blabla?id=anyID) и с другими моими серверами на основе C\C++.)?

Итак, я создал свой модуль как сервер TCP\HTTP - я даю URL-адрес вызова - он дает мне ответ.

Сегодня мой сервер ASP.NET поддерживает мой модуль.

Я хочу избавиться от этого сервера ASP.NET - сделать мой модуль автономным приложением.

Мне нужны примеры КОДА...)


person Rella    schedule 08.04.2010    source источник


Ответы (4)


Простой ответ: вы не можете. HttpModules зависят от платформы ASP.NET, которая, в свою очередь, зависит от .NET Framework, которая, в свою очередь, требует отдельного пакета веб-сервера, такого как IIS или Apache (с большим количеством реконфигураций).

person Adam Maras    schedule 08.04.2010
comment
Мы можем размещать службы WCF отдельно, почему мы не можем размещать модули HTTP? - person Rella; 08.04.2010
comment
Поскольку службы WCF и HttpModules построены на совершенно разных подархитектурах. Это просто разные технологии. - person Adam Maras; 08.04.2010

работает рядом с любым другим HTTP-сервером (на том же порту, просто используя некоторое пространство имен URL

Это просто невозможно. У вас не может быть двух разных HTTP-серверов на одном и том же порту на одном сервере. У вас может быть настройка прокси, когда один веб-сервер получает все запросы и перенаправляет некоторые из них на другой веб-сервер, работающий на другом порту (или даже на другом сервере). Например. вы можете заставить Apache обрабатывать большинство запросов самостоятельно, а затем пересылать только те запросы, которые предназначены для вашего веб-приложения. Посмотрите на mod_proxy в конфигурации "обратный прокси".

person user9876    schedule 08.04.2010
comment
Dosent windows делает это по умолчанию? По крайней мере, для HTTP-серверов С++, похоже, это происходит... Google HTTP.SYS и прочитайте эту мою тему stackoverflow.com/questions/2589588/ - person Rella; 08.04.2010
comment
И, конечно же, мы можем разместить бесконечное количество сервисов WCF на одном и том же порту... И т.д..=) - person Rella; 08.04.2010

Моя компания производит «Веб-сервер Neokernel» (http://www.neokernel.com), который позволяет размещать Веб-приложения ASP.NET из вашего собственного приложения .NET без IIS. Посмотрите на демонстрацию «Bootstrapping» в папке «demos/C# Projects» для примера исходного кода, показывающего, как включить сборку Neokernel в ваше приложение и запустить или остановить ее из кода вашего приложения.

Что касается разделения трафика на порту 80, Адам Марас прав в своем ответе выше: только одно приложение может использовать данный порт TCP-сервера.

Последние версии Windows обрабатывают это через http.sys — когда вы регистрируете различные веб-сайты WCF, ASP.NET и модули обработчика с использованием стандартов Microsoft web.config, http.sys перенаправляет входящий запрос (на порт 80) на один из зарегистрированные обработчики (или IIS или другое приложение). Это перенаправление не произойдет, если вы запустите другое приложение на порту 80, и оно запустится раньше, чем http.sys, поэтому оно захватит серверный сокет вместо http.sys.

person Damien    schedule 19.05.2010

Я знаю, что Windows (и я верю, что Linux тоже) позволяет вам иметь только один процесс, прослушивающий определенный порт. Таким образом, лучшее, на что вы можете надеяться, — это подключить модуль к другому веб-серверу для передачи запроса. А так как уже надо подключать отдельный модуль...

person Joel Coehoorn    schedule 19.05.2010