Конфигурация хоста службы WCF - попробуйте изменить порт HTTP на 8732

У меня было сложное решение на базе WCF, работающее на моем ПК, но из-за проблемы с установкой Windows 8.1 мне пришлось "Обновить" мой компьютер. Теперь, когда я переустановил Visual Studio 2012, мой проект больше не работает правильно.

Когда я отлаживаю unit test, wcfservicehost отображает ошибку:

Please try changing the HTTP port to 8733 or running as Administrator.
System.ServiceModel.AddressAccessDeniedException: HTTP could not register URL http://+:8732/Design_Time_Addresses/MyWCFService/Name/. Your process does not have access rights to this namespace (see http://go.microsoft.com/fwlink/?LinkId=70353 for details). ---> System.Net.HttpListenerException: Access is denied

По-видимому, обычным решением для этого является запуск Visual Studio в качестве администратора (возможно, потому что он затем перезаписывает что-то где-то), однако я не могу это сделать, поскольку мне требуется ссылаться на DLL на сетевом диске, а сетевые диски не могут быть доступ к которому осуществляется при запуске как администратор.

Я предполагаю, что где-то есть файл конфигурации или запись в реестре, который определяет, какой порт Visual Studio или хост службы WCF использует при запуске, и что там есть остаточная запись из моей предыдущей установки Windows.

Чтобы изменить порт на 8733, потребуется отредактировать каждую службу, повторно ссылаться на них, а затем перестроить решение и надеяться, что он будет работать.

Есть ли способ установить или принудительно использовать порт, который использует хост службы WCF?

Ответ 1

После небольшого поиска и исследований я узнал, что последние версии Windows применяют параметры безопасности, которые не позволяют вам слушать какие-либо порты. Я предполагаю, что, когда Visual Studio установлен, он резервирует порт для собственного использования, чтобы вы могли размещать и, таким образом, отлаживать веб-службы. Это был порт localhost: 8732 на моей машине разработки, но с переустановкой Visual studio теперь это localhost: 8733, к сожалению, все мои файлы app.config в точке решения указывают на порт 8732.

Запустите расширенную командную строку и выполните netsh http show urlacl. Это отображает список зарезервированных портов, среди которых я нашел это:

Reserved URL            : http://+:8733/Design_Time_Addresses/
User: NT AUTHORITY\INTERACTIVE

Что, я предполагаю, это запись, добавленная при установке Visual Studio.

Выполнение следующей команды резервирует URL-адрес 8732:

netsh http add urlacl url=http://+:8732/ user=WORK\Clara

Перезагрузите Visual Studio, и внезапно мое решение снова работает.

Ответ 2

Другим вариантом является обход списков управления доступом к портам и включение wcfservicehost в качестве администратора.

Вы можете сделать это, найдя файл wcfsvchost.exe в вашей файловой системе (например, C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\wcfsvchost.exe), щелкнув правой кнопкой мыши файл и выбрав "Совместимость".

В нем вы можете выбрать "Запустить эту программу в качестве администратора", если вы являетесь администратором (и вы должны быть, если вы качаете stackoverflow; -)).

Перезагрузите Visual Studio, и вам должно быть хорошо.

Ответ 3

Шаг 1. Запустите cmd.exe как локальный администратор.

Шаг 2: выполните приведенную ниже команду, чтобы включить http на порту 1234

netsh http add urlacl url=http://+:1234/ user=Everyone listen=yes

Совет. Имя пользователя "Все" может отличаться и зависит от языка установки ОС. Например, на немецком языке пользователь не называется "Everyone", а "Jeder".

Ответ 4

Просто перезагрузите его, так как администратор может его решить.