Если вы используете 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.