Skip to content

WCF: Namespace Reservierung

Jeder WCF (Web)Service, der einen HTTP-Kanal benutzt läuft standardmäßig nicht unter einem normalen Benutzer-Account. Diese Erfahrung musste ich heute zumindest machen, während ich ein Installationsprogramm für einen solchen Service geschrieben habe.

Das liegt daran, dass WCF für einen HTTP-Kanal den HTTP.SYS-Treiber benutzt um einen Listener zu konfigurieren. HTTP.SYS erlaubt aber einem normalen Benutzer nicht, einen Listener zu registrieren, solange nicht ein Administrator diesem Benutzer die entsprechenden Rechte eingeräumt hat.

Dafür ist eine manuelle Konfiguration der HTTP-Einstellungen über die HTTP Server API notwendig. Das httpcfg.exe-Tool aus dem Windows Support Tools ist eine Möglichkeit diese Konfiguration durchzuführen. Der Artikel Configuring HTTP and HTTPS zeigt, wie das Tool genutzt werden kann. Auch die Tools HttpSysCfg und HttpCfg ACL Helper können hier gute Dienste leisten.

Wie bereits erwähnt suchte ich aber eine Möglichkeit, die Reservierung für einen Namespace in einem Installationsprogramm auszuführen. Dafür habe ich nach einem programmatischen Weg gesucht und schließlich auch gefunden: Keith Brown beschreibt in seinem Artikel Limited User Problems and Split Knowledge im MSDN Magazine vom November 2006 wie es funktioniert.

Nachdem ich die Funktion getWin32ErrorMessage durch folgenden Code ersetzt habe, funktioniert es bei mir auch perfekt.

C#:
  1. static string getWin32ErrorMessage(int errorCode)
  2. {
  3.     return Marshal.GetExceptionForHR(HRESULT_FROM_WIN32(errorCode)).ToString();
  4. }

Categories: Programming, Security.

Tags: , , , ,

Comment Feed

One Response



Some HTML is OK

or, reply to this post via trackback.

Continuing the Discussion

  1. [...] WCF endpoints while configuring them running with least privileges. As already mentioned in my post WCF: Namespace Reservierung there are several tools simplifying this procedure. Nevertheless I wanted to write my own little [...]