2010-06-09 3 views
11

У меня есть служба WCF с использованием HttpBinding. Служба работает в процессе самостоятельного хостинга (служба Windows), и этот процесс находится в списке исключений брандмауэра Windows.Служба WCF, заблокированная брандмауэром Windows

Если брандмауэр активен, и я пытаюсь получить доступ к службе с помощью клиента C# или Internet Explorer, служба не отвечает. Но если брандмауэр отключен, соединение работает как шарм.

У кого-либо есть эксплойты с WCF и брандмауэром Windows? Проблема возникла на Windows 7 64bit. Я еще не пробовал другую ОС.

Что я должен сделать, чтобы заставить это работать с активным брандмауэром?

С уважением Майкл

EDIT: Я нашел ключ, что http.sys должен быть добавлен в список исключений брандмауэра, так как ФОС самостоятельной хостинг использует http.sys. Любые советы, как это решить?

EDIT: Я попытался открыть все прослушивающие порты вручную, что тоже работает, но это не вариант, потому что я не знаю их заранее.

+0

попытаться открыть порт, который использует служба? т. е. порт 80, 8080 или все, что вы настроили. Поскольку он использует обычный http, я не вижу проблемы :( – KTrum

+0

Я просто пробовал это и работает. Но для обеспечения простого пользовательского опыта это не вариант в продуктивной среде. (Похоже, что порт изменен ...) –

+0

Звучит странно, что порт изменится? Используете ли вы IIS для публикации службы? Думаю, вам нужно будет выполнить процедуру, которая проверяет, какой порт использует служба, и открывать этот порт программно в брандмауэре, если это даже если возможно. Если порт закрыт в брандмауэре, вы, вероятно, не сможете получить доступ к службе. – KTrum

ответ

5

Пробуем статью MSDN Configuring HTTP and HTTPS.

+2

Наконец ... Я не уверен, что это интенция ваш ответ, но в статье говорится, что: «Самостоятельная HTTP-адресация для WCF не интегрирована в персональный брандмауэр Windows. В конфигурацию брандмауэра необходимо добавить исключение, чтобы разрешать входящие подключения с использованием определенного URL-адреса. «Я думаю, что« исключение »является исключением для порта (не процессом). По крайней мере, это мой опыт. –

4

Насколько я знаю, добавив самодостаточно процесс службы WCF, чтобы брандмауэр не работает, потому что это не то, что процесс принятия входящих вызовов, он работает только если порт службы

  1. добавить в глобальное исключение порта
  2. добавить процесс входящего демона WCF для обработки исключения, я не уверен в http, но для привязок net.tcp вам нужен файл $ FrameworkDir/SMSvcHost.exe вместо вашего процесса.
Смежные вопросы