Альтернатива HttpListener? - PullRequest
       15

Альтернатива HttpListener?

14 голосов
/ 11 ноября 2008

Я разрабатываю приложение, которое до сих пор использует HttpListener для предоставления небольшого автономного http-сервера. Однако недавно я обнаружил, что HttpListener должен запускаться от имени администратора, что не всегда возможно.

Какой будет лучшая альтернатива? Мне нужны http GET и POST, которые не просто читают / пишут файлы в файловой системе, они должны запускать собственный код .Net.

До сих пор мои исследования касались Кассини, но, насколько я могу судить, мне пришлось бы написать собственную версию. Есть ли еще что-нибудь? В частности, что-то с тем же интерфейсом, что и HttpListener, но не требующее прав администратора, было бы удивительно!

Ответы [ 7 ]

8 голосов
/ 13 ноября 2009

Одна альтернатива, которую я нашел, - C # Webserver в CodePlex.

"... гибкий HTTP-сервер, который может быть встроен в любое приложение .Net. Он имеет модульную конструкцию, в которой функции добавляются с помощью модулей. Сервер также поддерживает REST и все глаголы http ..."

У него есть класс HttpListener, который, как мне кажется, похож на System.Net.HttpListener, но я еще не использовал ни один из них, поэтому не могу быть уверен.

3 голосов
/ 30 сентября 2013

По поводу заявления:

Недавно я обнаружил, что HttpListener должен запускаться от имени администратора

Это не совсем так, и некоторые другие ответы касаются одной из причин, но есть и другая:

  1. Отмечено другими авторами: вы можете предоставлять разрешения не администратору. Хорошо, но не отлично.
  2. Вы можете слушать на локальном хосте, даже на порту 80, не будучи администратором. Примечание. Напоминаю, что работает только localhost, а не 127.0.0.1 ... поэтому убедитесь, что вы передали localhost вызову Prefixes.Add.

Мы поставляем внутренний инструмент, который позволяет разработчикам запускать хост приложений на основе HTTP на своих ПК, и мы сначала подумали, что использование HttpListener будет невозможно из-за проблемы с правами администратора (или правами, предоставленными администратором), но затем мы обнаружили, что localhost работает просто отлично, не будучи администратором. Это имеет смысл: прослушивание извне «опасно», но прослушивание на локальной машине не так опасно.

3 голосов
/ 12 марта 2012

Как и в комментарии Уилла Дина к вашему сообщению, вы можете запустить следующую команду netsh:

netsh http add urlacl url=http://+:8346/ user="NTAuthority\Authenticated Users" sddl="D:(A;;GX;;;AU)"

Замените 'http://+:8346/' вашим значением, и это позволит любому аутентифицированному пользователю запускать веб-сервер в целевой конечной точке.

3 голосов
/ 11 ноября 2008

Одно из решений этой проблемы покрыто другим вопросом - вы можете дать себе разрешение на запуск HttpListener от имени администратора.

Вы можете запустить приложение из командного файла, который сортирует разрешения и затем запускает реальное приложение.

0 голосов
/ 04 февраля 2019

Для приложений .NET Core существует новая (кроссплатформенная) реализация HTTP-сервера: Kestrel .

0 голосов
/ 17 июля 2015

Nowin - отличная библиотека, которую можно интегрировать в Owin как ServerFactory без зависимости от HttpListener. Смогли заскочить на замену Microsoft.Owin.Host.HttpListener lib без заминки

0 голосов
/ 11 ноября 2008

Хорошо, значит, у вас есть обычное настольное приложение, которое должно разрешать входящие http-соединения - хмм - разве брандмауэр Windows не будет проблемой?

Если нет, то это звучит почти как веб-сервис - не могли бы вы пойти по этому пути - раскрыть URL через него? Хотя мои знания .Net недостаточно глубоки, чтобы понять, нужно ли вам запускать определенный http-сервер для ответа на запросы. Spring.Net , вероятно, стоит посмотреть.

...