WCF ServiceHost basicHttpBinding 503 ошибка - PullRequest
4 голосов
/ 10 февраля 2009

Я пытаюсь запустить WCF ServiceHost в качестве службы NT на сервере Windows 2007 с пакетом обновления 1 (SP1). ServiceHost отвечает за размещение одной конечной точки службы: basicHttpBinding со следующим адресом:

http://localhost:5555/ToBlah

Когда я запускаю этот ServiceHost на своем локальном компьютере (Windows XP), он работает нормально - когда я отправляю ему SOAP-сообщение, я возвращаю код HTTP 202 («Принят»), который является правильным ответом для моего обслуживание, потому что контракт имеет IsOneWay = true. Тем не менее, когда я запускаю это на моем сервере 2007, я получаю 503 ошибки, когда я пытаюсь вызвать службу. У меня есть журналирование сообщений WCF, включенное «полностью вверх», но я не вижу каких-либо журналов, что приводит меня к мысли, что это происходит на более низком уровне, чем WCF (вызов никогда не попадает на «уровень» WCF). ).

Мы с sys-admins пробовали различные формы команд httpcfg, но пока безуспешно.

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

Любые идеи будут с благодарностью!

Ответы [ 4 ]

2 голосов
/ 11 февраля 2009

Ну, я до сих пор не могу заставить его работать на серверах Vista - он все равно выдаёт 503 ошибки, но в итоге я настроил его на сервере Windows 2003, и, похоже, он работает сейчас.

Одна вещь, которую я изучил в этом процессе, заключалась в использовании HttpCfg.exe, чтобы позволить пользователю открывать нестандартный порт HTTP.

В основном мне нужно было выполнить что-то вроде следующей команды:

httpcfg.exe set urlacl /u http://+:5555/ /a "O:AOG:DAD:(A;;RPWPCCDCLCSWRCWDWOGA;;;S-1-0-0)"

Затем вы можете просмотреть настройки ACL для URL с помощью этой команды:

httpcfg.exe query urlacl

В Vista вы можете запускать те же типы команд, используя netsh (см. Ссылку ниже).

К сожалению, потребовалось некоторое время, чтобы понять, но это был хороший опыт обучения.

Вот несколько ссылок, которые, как мне показалось, были полезны для выяснения этого:

1 голос
/ 28 августа 2012

Если вы используете Windows Vista или Windows 7, вы должны использовать «netsh», который также проще в использовании.

  • Учетная запись локального пользователя:

    netsh http add urlacl url=http://+:8001/ user=ComputerName\Username

  • Учетная запись пользователя домена:

    netsh http add urlacl url=http://+:8001/ user=DomainName\Username

  • Встроенная учетная запись NetworkService:

    netsh http add urlacl url=http://+:8001/ user="NT AUTHORITY\NETWORK SERVICE"

1 голос
/ 10 февраля 2009

Мне кажется, что либо брандмауэр на сервере, либо другой параметр конфигурации блокирует порт.

Если нет, то ваша служба может испытывать ошибку во время создания экземпляра объекта ServiceHost или во время создания конечной точки службы, и ошибка по какой-то причине не перехватывается (?). Вы можете написать простой внутренний цикл тестирования в коде службы, чтобы убедиться, что конечная точка службы была создана правильно. Это может открыть что-то интересное.

Кроме того, запуск клиента с этого сервера и подключение к вашему сервису, работающему на компьютере разработчика, может сказать вам кое-что еще? Вы можете использовать WCFTestClient.exe, как указано здесь: Можно ли заставить WcfTestClient работать для пользовательских транспортных каналов? . Это может дать вам дополнительную информацию. Однако вам потребуется поддержка MetadataExchange (Mex) в вашей службе, чтобы использовать этот тестовый клиент.

В качестве альтернативы вы можете использовать образцы WCF из папки образцов Visual Studio 2008 в сочетании с WCFTestClient.exe для тестирования некоторых служб, которые размещаются самостоятельно и, как ожидается, будут работать правильно, сначала на сервере, а затем извне сервер.

1 голос
/ 10 февраля 2009

Какой идентификатор настроен для службы NT? Чтобы изолировать проблему, попробуйте использовать учетную запись local-admin, чтобы проверить, связана ли эта проблема с разрешениями.

...