Na dobry początek pracy pod nową domeną postanowiłem napisać na temat błędu przy uruchamianiu serwisu WCF jakim jest “HTTP could not register URL …“. O rozwiązaniu tego problemu często się zapomina, a jest ono stosunkowo proste. Zacznijmy od początku, czyli od opisu przypadku.
Przypadek:
Tworzymy usługę WCF, która jest udostępniana poprzez aplikację konsolową i korzysta z wiązań z rodziny *HttpBinding. Podczas uruchamiania hosta otrzymujemy błąd:
“HTTP could not register URL http://+:8733/Design_Time_Addresses/SampleServiceLibrary/SampleService/. Your process does not have access rights to this namespace (see http://go.microsoft.com/fwlink/?LinkId=70353 for details).”
Dla jasności – jeżeli udostępniamy metadane dotyczące serwisu przy pomocy MEX, to również otrzymamy taki błąd.
Oczywiście podany przeze mnie adres może być inny, gdyż zakres http://+:8733/Design_Time_Addresses jest wykorzystywany przez WcfServiceHost.exe, który automatycznie uruchamia się dla bibliotek WCF.
Rozwiązanie:
W przypadku gdy korzystamy z *HttpBinding konieczne będzie umożliwienie naszemu procesowi nasłuchiwania żądań przychodzących po http. Podążając zatem za wskazanym w błędzie adresem dowiadujemy się, że należy dodać nam prawa do takiego nasłychu. W tym celu korzystamy z polecenia NETSH w konsoli cmd:
netsh http add urlacl url=http://+:8733/Design_Time_Addresses/SampleServiceLibrary/SampleService/ user=maciek
W pole URL należy oczywiście wpisać adres, na którym chcemy działać. Po wykonaniu tego polecenia nasz serwis uruchomi się poprawnie. Jeżeli okaże się, że nie jest nam już potrzebne przechwytywanie tego adresu, wówczas możemy go usunąć wpisując następujące polecenie:
netsh http delete urlacl url=http://+:8733/Design_Time_Addresses/SampleServiceLibrary/SampleService/