2010-01-01 68 views
6

Win 7和VS2010 B2。我正在嘗試使用內置的HttpListener編寫一個最小的Web服務器。但是,我不斷收到AccessDenied異常。下面是代碼:爲什麼在嘗試使用HttpListener時會得到「AccessDenied」?

int Run(string[] args) { 

     _server = new HttpListener(); 
     _server.Prefixes.Add("http://*:9669/"); 
     _server.Start(); 

     Console.WriteLine("Server bound to: {0}", _server.Prefixes.First()); 

     _server.BeginGetContext(HandleContext, null); 
    } 

我可以理解,需要以管理員身份運行,如果我被綁定到系統端口,但我不明白爲什麼我綁定到9669應該需要特殊的權限。

任何想法?

回答

23

由於這太問題:Can I listen on a port (using HttpListener or other .NET code) on Vista without requiring administrator priveleges?

我有一個答案。

netsh http add urlacl url=http://*:9669/ user=fak listen=yes

瘋了。這裏是我的修訂功能:

int Run(string[] args) { 

     var prefix = "http://*:9669/"; 
     var username = Environment.GetEnvironmentVariable("USERNAME"); 
     var userdomain = Environment.GetEnvironmentVariable("USERDOMAIN"); 

     _server = new HttpListener(); 
     _server.Prefixes.Add(prefix); 

     try { 
      _server.Start(); 
     } 
     catch (HttpListenerException ex) { 
      if (ex.ErrorCode == 5) { 
       Console.WriteLine("You need to run the following command:"); 
       Console.WriteLine(" netsh http add urlacl url={0} user={1}\\{2} listen=yes", 
        prefix, userdomain, username); 
       return -1; 
      } 
      else { 
       throw; 
      } 
     } 


     Console.WriteLine("Server bound to: {0}", _server.Prefixes.First()); 

     _server.BeginGetContext(HandleContext, null); 
    } 
+1

爲我們大家學習 – 2010-01-01 02:54:16

+0

更安全但看來你真的需要'聽= yes'。沒有它就爲我工作。另外,我用'http:// +:9669 /'。 – 2014-11-20 08:46:59

相關問題