Конфигурация хоста службы 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
Просто перезагрузите его, так как администратор может его решить.