.NET HttpListener Prefix issue with anything other than localhost

亡梦爱人 提交于 2020-01-09 10:10:10

问题


I'm trying to use C# and HttpListener with a prefix of anything other than localhost and it fails (i.e. if I give it server1, i.e.

http://localhost:1234 works, but

http://server1:1234 fails

The code is...

HttpListener listener = new HttpListener();
String prefix = @"http://server1:1234";
listener.Prefixes.Add(prefix);
listener.Start();

The failure occurs on listener.Start() with an exception of Access is denied..


回答1:


I had the same issue once and i solved it by adding an URL reservation for the specified URL namespace for a user/users to the Network Shell (netsh). Here's an example on how to reserv an URL for every user, run this in the command prompt as an administrator:

netsh http add urlacl url=http://server1:1234/ user=Everyone

Here's an example on how reserv an URL for one user, run this in the command prompt as an administrator:

netsh http add urlacl url=http://server1:1234/ user=Steve

In this way you don't need to run the application as an administrator




回答2:


Is your app running with elevated privilege?

Normal accounts cannot hook the Http pipeline without first making a reservation.

http://msdn.microsoft.com/en-us/library/Aa364673

It can be done programatically at install time. Let me know if this is of interest, and I'll dig out some code.

EDIT:

Actually, as I can't identify where the code came from at the moment, I can't post it here. There's a codeplex project for doing this kind of thing which is definitely worth picking apart.

/EDIT

Here's a way make the reservation on the command line:

http://www.casadehambone.com/HowToAddAURLACLAndAvoidAddressAccessDeniedExceptionInWindowsVista.aspx



来源:https://stackoverflow.com/questions/2564669/net-httplistener-prefix-issue-with-anything-other-than-localhost

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!