C# HttpListener, не используя netsh для регистрации URI

Мое приложение использует маленький веб-сервер для сервера некоторые файлы, и имейте веб-интерфейс для администрирования удаленно. Прямо сейчас пользователь должен использовать netsh для регистрации URI как так

netsh http add urlacl url=http://+:1233/ user=Chris-PC\Chris

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

20
задан Rowland Shaw 6 April 2010 в 07:51
поделиться

1 ответ

Если вы используете HTTPListener, вы должны использовать httpconfig.exe или netsh для настройки вашего HTTPListener, потому что:

A. AFAIK Не существует API для этого из C#, только инструменты командной строки

B. По умолчанию только SYSTEM или локальная группа администраторов может прослушивать http префиксы

Таким образом... если ваше приложение работает под учетной записью пользователя, вам нужно явно предоставить доступ (используя httpcfg.exe или netsh), потому что ваш HTTPHandler использует HTTP.sys для обмена портами с запущенным веб-сервером (таким образом, вы можете разместить свое веб-приложение на порту 80, в то время как IIS также работает на порту 80).

Лучшим решением может быть использование реального встроенного веб-сервера для прослушивания нужного вам порта. Это не будет работать, если другое приложение (например, IIS) уже использует этот порт, но так как это НЕ использует HTTP.sys для совместного использования портов, нет ограничений безопасности относительно того, какая учетная запись пользователя открывает / прослушивает порт. Поскольку вы хотите, чтобы пользователь указывал свой собственный порт, кажется приемлемым запуск на другом порту, кроме порта 80.

Моя компания производит коммерческий продукт под названием Neokernel Web Server (http://www.neokernel.com), который запускает ASP.NET и позволяет вам программно запускать/останавливать сервер и устанавливать конфигурации; вы можете встраивать и распространять эту сборку вместе с приложением.

Существует также исходный код Cassini, который вы можете изменять и внедрять, он бесплатный, но имеет пару недостатков, таких как отсутствие регистрации и поддержки SSL.

1
ответ дан 30 November 2019 в 00:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: