Jestem początkującym w WCF, ale staram się poprawić swoje wrażenia. I na pierwszym etapie stanąłem przed problemem. Stworzyłem najprostszą usługę WCF. Lista kodu: (cały kod w jednym pliku)
using System;
using System.ServiceModel;
namespace EssentialWCF
{
[ServiceContract]
public interface IStockService
{
[OperationContract]
double GetPrice(string ticker);
}
public class StockService : IStockService
{
public double GetPrice(string ticker)
{
return 94.85;
}
}
class Service
{
static void Main(string[] args)
{
ServiceHost serviceHost = new ServiceHost(typeof(StockService),
new Uri("http://localhost:8000/HelloWCF"));
serviceHost.AddServiceEndpoint(typeof(IStockService), new BasicHttpBinding());
serviceHost.Open();
Console.WriteLine("To continue press ENTER");
serviceHost.Close();
}
}
}
To byłaby usługa, która daje mi numer za pośrednictwem konsoli. Ale debugowanie daje mi wyjątek: (zamiast numeru :))
HTTP nie może zarejestrować adresu URL http: // +: 8000 / HelloWCF / . Twój proces nie ma praw dostępu do tej przestrzeni nazw ( szczegółowe informacje można znaleźć na stronie http://go.microsoft.com/fwlink/?LinkId=70353 ).
Czy kiedykolwiek spotkałeś się z tą samą sytuacją? Z przyjemnością zobaczę każdą radę.
Odpowiedzi:
Niestety link w tekście wyjątku http://go.microsoft.com/fwlink/?LinkId=70353 jest uszkodzony. Jednak kiedyś prowadził do http://msdn.microsoft.com/en-us/library/ms733768.aspx, który wyjaśnia, jak ustawić uprawnienia.
Zasadniczo informuje o użyciu następującego polecenia:
netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user
Możesz uzyskać więcej pomocy na temat szczegółów, korzystając z pomocy
netsh
Na przykład:
netsh http add ?
Udziela pomocy w
http add
poleceniu.źródło
COMPUTER_NAME\USER_NAME
powyższego polecenia.netsh http add urlacl url=http://+:80/ user=DOMAIN\user
jeśli chcesz przyznać prawu dostępu do konta do dowolnej przestrzeni nazw na porcie.Zamknąłem IDE Visual Studio i otworzyłem go ponownie, klikając prawym przyciskiem myszy ikonę Visual Studio i mówiąc „Uruchom jako administrator”, a potem, kiedy uruchomiłem hosta, działało !!!
źródło
Kliknij prawym przyciskiem myszy Visual Studio> Uruchom jako administrator> Otwórz projekt i uruchom usługę. Jest to problem związany z uprawnieniami.
źródło
Potrzebujesz trochę uprawnień administratora do swojego konta, jeśli twój komputer w sieci lokalnej, a następnie zastosujesz jakieś uprawnienia administratora do swojego użytkownika, w przeciwnym razie powinieneś zacząć ide jako administrator ...
źródło
Prostą rzeczą, którą musisz zrobić, to zamknąć środowisko Visual Studio i otworzyć je ponownie, używając opcji „Uruchom jako administrator”. Powinien teraz działać poprawnie.
źródło
W systemie Windows Vista i nowszych rzeczy usługa HTTP WCF spowodowałaby wspomniany wyjątek, ponieważ ograniczone konto nie ma do tego prawa. To jest powód, dla którego działało, gdy uruchomiłeś go jako administrator.
Każdy rozsądny programista musi korzystać z konta OGRANICZONEGO, a nie jako administratora, ale wiele osób idzie w niewłaściwy sposób i właśnie dlatego jest tak wiele aplikacji, że uprawnienia administratora DEMAND, gdy nie są tak naprawdę wymagane. Leniwa praca skutkuje leniwymi rozwiązaniami. Mam nadzieję, że nadal pracujesz na koncie zastrzeżonym (moje gratulacje).
Istnieje narzędzie (od około 2008 r.) O nazwie NamespaceManagerTool, jeśli dobrze pamiętam, które powinno udzielać ograniczonych uprawnień użytkownikom na adresy URL usług zdefiniowane dla WCF. Nie użyłem tego jednak ...
źródło
Twój przykładowy kod nie będzie działał tak, jak pokazano, ponieważ zapomniałeś dołączyć
Console.ReadLine()
przedserviceHost.Close()
wierszem. Oznacza to, że host jest otwarty, a następnie natychmiast zamknięty.Poza tym wygląda na to, że masz problem z uprawnieniami na swoim komputerze. Upewnij się, że jesteś zalogowany jako konto administratora na swoim komputerze. Jeśli jesteś administratorem, być może nie masz uruchomionej usługi publikowania w sieci WWW (W3SVC) do obsługi żądań HTTP.
źródło
Podczas gdy byłem w stanie rozwiązać ten problem na jednym komputerze zgodnie z rozwiązaniami innych użytkowników, polecenie
netsh
nie rozwiązało problemu na jednym z moich komputerów i chociaż obecny użytkownik miał uprawnienia administratora, nadal otrzymywałem komunikat „HTTP nie mógł zarejestrować adresu URL .... Twój proces nie ma praw dostępu do tej przestrzeni nazw ". Dlatego dzielę się moim rozwiązaniem na wypadek, gdybyś nadal nie działał z innymi rozwiązaniami.Po próbie nadania użytkownikowi uprawnień do zapisu w fizycznym katalogu mojej witryny i bez powodzenia, w końcu postanowiłem zmienić ustawienia IIS .
Jak pokazują poniższe zdjęcia, skonfigurowałem dane uwierzytelniające ścieżki fizycznej w mojej witrynie, aby łączyły się jako określony użytkownik, którym było konto administratora z DOMAIN \ nazwa użytkownika i hasło, i to wystarczyło, aby błąd zniknął.
źródło
Zamknij iis express i wszystkie przeglądarki (jeśli adres URL został otwarty w dowolnej przeglądarce). Otwórz także studio graficzne IDE w trybie administratora. To rozwiązało mój problem.
źródło