Использовать HttpListener для веб-сервера производственного уровня?

StackOverflow https://stackoverflow.com/questions/1271070

Вопрос

Реально ли использовать C # .Net класс HttpListener в качестве основы для веб-сервера производственного уровня?

Веб-служба http, которую мне нужно разместить, не содержит .aspx или статических файлов.Все http-ответы являются динамическими и генерируются в коде c #, который вызывается с помощью нескольких операторов switch, которые проверяют формат restful url.

Я думаю, что IIS на самом деле является оболочкой пользовательского режима вокруг модуля ядра Windows o / s HTTP-SYS, который выполняет всю тяжелую сетевую обработку, как и HttpListener.

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

Это было полезно?

Решение

Здесь у вас есть два серьезных выбора.И нет, кодирование вашего собственного веб-сервера с помощью HttpListener не является производственным.

1) Используйте IIS.Он обладает массой функций для обеспечения безопасности, производительности и, возможно, что еще более важно, управляемость, что вам придется заново изобретать себя.Например, удаленное администрирование, ведение журнала, интегрированная система безопасности Windows и т.д.

2) Используйте WCF и создайте ServiceHost для размещения ваших файлов.Затем вам придется внедрить свои собственные сервисы и найти способ управлять сроком их службы.Вы можете это сделать, но опять же, если вы говорите о веб-вызовах RESTful, IIS - это действительно правильный путь.

Следует избегать ручной прокатки самостоятельно.IIS сильно изменился за последние 10 лет.Это ни в коем случае больше не большой монолитный сервер.Они сделали модульным практически все, особенно в Windows 2008, так что вы получаете экономичную и быструю систему.

Другие советы

Что ж, как уже было сказано - попробуйте сначала использовать IIS.

HttpListener совсем не плох - это самый быстрый управляемый сервер прослушивания, который вы можете иметь сейчас (быстрее, чем TcpListener и быстрее, чем Socket class).И это фактически то же ядро, что и в IIS.Но в IIS есть еще много чего.

Я не могу сказать, что IIS - это монолит - использование хостинга показало, что в Win2008 он стал хуже с точки зрения стабильности и управления.Но ваше самодельное решение может быть намного хуже.И также не забывайте - http.sys гораздо более настраиваемый, чем HttpListener.То есть.вы не можете выполнять потоковую передачу с помощью HttpListener, но вы можете сделать это с помощью http.sys - Вопрос о потоковой передаче HttpListener

Но если у вас будет достаточно возможностей как у разработчика - вы можете попробовать написать собственную http.sys оболочку, и это лучший подход к написанию собственного веб-сервера в Windows.

Мусор, Сворачивай свой собственный.Архитектура позволяет это.Однако имейте в виду, что в Классе наблюдается некоторое странное поведение.Закрывая его пару раз в службе NT, вы делаете его расслаивающимся, как пакет со слоеной выпечкой.

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

Я чувствую приближение python с небольшим привкусом вишневого

Если вы напишете это, то вам придется поддерживать это.Microsoft уже написала веб-сервер - вы должны им воспользоваться.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top