开发者

.NET HttpListener Prefix issue with anything other than localhost

开发者 https://www.devze.com 2022-12-26 00:28 出处:网络
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.

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.P开发者_运维知识库refixes.Add(prefix);
listener.Start();

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


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


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

0

精彩评论

暂无评论...
验证码 换一张
取 消