Запуск нескольких прослушивателей HTTP на IIS с использованием C # .NET 2.0 - PullRequest
6 голосов
/ 18 октября 2008

У меня есть две службы Windows, работающие на одной машине. Обе службы используют

частный слушатель HttpListener;

Я указываю baseURL как "http://IPAddress:8080/" &" http://IPAddress:8081/" соответственно для каждой из услуг. Тогда я делаю все необходимое и звоню

listener.Start ();

Первая служба успешно запускается на порту 8080. Но когда я сейчас начинаю 2-й сервис, Я получаю HTTPListenerException «Процесс не может получить доступ к файлу, потому что он используется другим процессом» для объекта прослушивателя.

Может кто-нибудь, пожалуйста, скажите мне: 1) Если возможно запустить два прослушивателя HTTP на одном IIS на двух разных портах. 2) Если да, как мы можем достичь этого? 3) Есть ли другой способ сделать это?

Для вашей информации: Я использую C # .NET 2.0 и сервер IIS 6.0.

Спасибо и всего наилучшего,

Hari

Ответы [ 4 ]

4 голосов
/ 18 октября 2008

HttpListener не работает независимо от IIS? Можете ли вы остановить службу IIS и посмотреть, что произойдет?

Или, может быть, порт 8081 используется другой программой или процессом. Я предлагаю попробовать установить порт на другой номер. Вы можете открыть командную строку и выполнить команду " netstat ", чтобы увидеть , если порт используется перед запуском ваших служб.

alt text
(источник: googlepages.com )

2 голосов
/ 18 октября 2008

Спасибо за ваш немедленный ответ: -)

Номер порта был проблемой. Я использовал номера портов, такие как 8080,8081,8082 и т. Д. Возможно, эти порты уже используются.

Я пытался с портами http://localhost:8080 и http://localhost/35124, и это сработало.

еще раз спасибо за ваши ответы.

Спасибо и всего наилучшего,

Hari

1 голос
/ 16 июня 2009

Обычно хорошей идеей является быстрый просмотр этой страницы при использовании номеров портов ... просто чтобы убедиться, что используемый вами временный номер уже не используется.

1 голос
/ 18 октября 2008

HTTPListener действительно не является частью IIS. Это просто код C #.

ты сделал это так?

String[] prefixes = { "http://localhost:8280/", "http://localhost:8281/"};

HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://localhost:8280/");
listener.Start();

1) Если возможно запустить два прослушивателя HTTP на одном и том же IIS на двух разных портах.

Да, это так. Но слушатели IIS не создаются с помощью кода, а с помощью инструмента администрирования IIS, так что это, вероятно, не то, что вы пытаетесь сделать. IIS отделен от кода C #, который вы пытаетесь.

2) Если да, как мы можем достичь этого?

  • Попробуйте использовать другие номера портов (например, 58080 и 58081) и попробуйте заменить «IPAddress» на «localhost». Скорее всего, ваш номер порта используется другим веб-сервером

3) Есть ли другой способ сделать это?

Если вы пытаетесь обслуживать веб-страницы, вы, вероятно, не захотите создавать веб-приложение вместо создания собственного HTTP-сервера

Если вы делаете что-то нестандартное, возможно, вы захотите взглянуть на WCF (Windows Communication Foundation), так как это новая платформа для веб, сокетов, веб-сервисов и т. Д., И именно ее будет использовать MS в будущем

...