win7中用 httplistener 出现 503 错误的问题

项目中须要用httplistener提供一个简单的httpserver服务。可是执行都是提示:

UnHandledException Message:拒绝訪问

在System.Net.HttpListener.AddAll()

在System.Net.HttpListener.Start()

网上查了下,好像是UAC权限的问题,网上找到了以下的解决的方法:

为程序加入了管理员权限执行的manifest配置文件,依旧不能解决,手动设置程序以管理员权限执行能够通过

解决改问题的方法:

以管理员权限执行cmd

输入: netsh http add urlacl url=http://+:9527/icon user=DOMAIN\user

注:DOMAIN 即计算机名

比如我的user=cmdszh_comperny\cmdszh

 

把以上操作写为C#代码例如以下(主程序一定在manifest中配置UAC权限)

public static void AddAddress(string address)
{
try
{
AddAddress(address, Environment.UserDomainName, Environment.UserName);
}catch(Exception ex){}
}

public static void AddAddress(string address, string domain, string user)
{
string argsDll = String.Format(@"http delete urlacl url={0}", address);
string args = string.Format(@"http add urlacl url={0} user={1}\{2}", address, domain, user);
ProcessStartInfo psi = new ProcessStartInfo("netsh", argsDll);
psi.Verb = "runas";
psi.CreateNoWindow = true;
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.UseShellExecute = false;
Process.Start(psi).WaitForExit();//删除urlacl
psi = new ProcessStartInfo("netsh", args);
psi.Verb = "runas";
psi.CreateNoWindow = true;
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.UseShellExecute = false;
Process.Start(psi).WaitForExit();//加入urlacl
}


原文地址:http://www.cnblogs.com/cmdszh/archive/2012/08/16/httplistener.html


兴许问题。依照上面说的设置好了之后。在某台电脑上输入保留的url。竟然不行,每次都是提示503错误。从127.0.0.1改成localhost,改来改去死活不行,郁闷至极,认为是不是这台电脑上的某个服务没有启动,找了找实在太多了也无果而终。第二天来了后试了试其他的port。结果就能够了。于是想研究一下httplistener机制。网上看了一些介绍,确实了解了非常多,关于WCF机制,可是好像没有跟这个问题相关的。大致浏览了下,自己还是了解的太浅。以后有时间继续研究。

突然出来了一个aha moment。由于上面主要是加入urlacl链接,于是想研究一下netsh命令的使用方法,能不能把之前加入的url列出来,到这个时候,已经開始往正确的道路上走了。于是网上搜了netsh的使用方法,而且自己也用“?”选项列出帮助,终于列出全部加入的url的时候,一下子就明确了,由于在监听port上有另外一个地址接收了请求,而实际并没有相应的服务。

详细是这样,刚開始測试,用了一个暂时uri http://localhost:10000/myuri/ 而出现503的链接是http://localhost:10000/myuri.rem/ 这样就清楚了,10000port上的myuri并没有服务,而是在myuri.rem上提供了服务。可是注冊的myuri提前监听了来自10000上的请求,而它没有相应的服务去回应,自然就是503了。


posted @ 2017-06-08 12:12  zsychanpin  阅读(803)  评论(0编辑  收藏  举报