Win7/Vista/Server2008下VS 环境 调试调用 HTTP.SYS 无法启动监听服务及启动后其他机器无法访问端口
一. VS调试在Win7(vista系列)操作系统下 HttpListener无法绑定多个 指定IP、端口问题

来自:http://www.cnblogs.com/ryhan/p/4195693.html
现象:System.Net.HttpListenerException (0x80004005): 拒绝访问。
原因:VS IDE 权限不够(生成的产物权限也会不够),提升UAC权限即可解决
步骤:
1.选中对应Project,右键添加->新增应用程序清单文件 app.manifest

2.将配置项 requestedExecutionLevel 的级别 asInvoker 改为 requireAdministrator

3.启动调试,会使用超级权限重启IDE

4.重启后,服务启动成功...
5.编译的exe文件会出现盾牌标识

参考资料:
http://blog.csdn.net/a316019667/article/details/8647237 --vs2005 中引入app.manifest(c#程序在win7下以管理员权限运行方法)
http://www.tuicool.com/articles/BnE7jy --.NET中提升UAC权限的方法总结 - 大魔王mAysWINd
http://tech.sina.com.cn/s/2009-12-10/07281168314.shtml --详解Visual Studio对应用程序的UAC设置
http://www.cnblogs.com/wene/archive/2010/09/12/1824476.html --Visual studio 2008中添加manifest文件
http://blog.csdn.net/nanchuan/article/details/8301310 --WIN7中HttpListener拒绝访问异常解决C#
二. 在Win7(vista系列)已启动的HTTP服务,其他机器无法访问问题(或者无法以服务方式启动程序)
现象:其他机器无法访问已启动的服务端口
原因:1.端口被防火墙隔离
2.系统未监听对应的端口数据
3.系统未将监听到的数据转发给对应的处理程序
步骤:
用管理员模式打开命令行:
1. 输入以下指令 添加URL 访问控制列表
netsh http add urlacl url=http://+:8080/ sddl="D:(A;;GX;;;LS)"
2.输入以下指令 添加需要侦听的IP+端口
netsh http add iplisten ipaddress=0.0.0.0:8080
3.输入以下指令 添加防火墙规则(必选项)
netsh advfirewall firewall add rule name="My Http Sev" dir=in action=allow protocol=TCP localport=8080
完成以上步骤后,服务应该可以被其他机器访问了。
参考资料:
http://www.cnblogs.com/cmdszh/archive/2012/08/16/httplistener.html --WIN7中 HttpListener 拒绝访问 异常解决 C#
http://www.cnblogs.com/jiewei915/archive/2010/06/21/1762066.html --WCF 部署问题 小总结 (HTTP 不能注册的解决方法)
----------------------------------------------------------分割线 以下部分为抄录----------------------------------------------------------------
源地址:http://www.cnblogs.com/jiewei915/archive/2010/06/21/1762066.html
可是工具写完,部署之后, 却出错了, Windows 服务 却没有启动。
当时原因是不知道的,因此我是在 Windows 2008 R2 Core 下部署的,查看不了日志(为什么要用 R2? 恩,因为我在Win 2008 Core下安装 .NET 3.5 的时候出错了~)
今天,又找了一下测试机,发现问题了
来源: DDNSHostService
日期: 2009/8/13 14:13:06
事件 ID: 0
任务类别: 无
级别: 错误
关键字: 经典
用户: 暂缺
计算机: WPI2-PC
描述:
无法找到来自源 DDNSHostService 的事件 ID 0 的描述。本地计算机上未安装引发此事件的组件,或者安装已损坏。可以安装或修复本地计算机上的组件。
如果该事件产生于另一台计算机,则必须在该事件中保存显示信息。
以下是包含在事件中的信息:
无法启动服务。System.ServiceModel.AddressAccessDeniedException: HTTP 无法注册 URLhttp://+:8080/。进程不具有此命名空间的访问权限(有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=70353)。 ---> System.Net.HttpListenerException: 拒绝访问。
在 System.Net.HttpListener.AddAll()
在 System.Net.HttpListener.Start()
在 System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen()
--- 内部异常堆栈跟踪的结尾 ---
在 System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen()
在 System.ServiceModel.Channels.TransportManager.Open(TransportChannelListener channelListener)
在
System.ServiceModel.Channels.TransportManagerContainer.Open(SelectTransportManagersCallback
selectTransportManagerCallback)
在 System.ServiceModel.Channels.HttpChannelListener.OnOpen(TimeSpan timeout)
在 System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
在 System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan timeout)
在 System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
在 System.ServiceModel.ServiceHo...
在Windows 日志看到了这个错误,
网上查了一下,基本是权限问题。
实际上这个问题主要是由于使用了 HTTP 绑定引起的,因为系统中的 HTTP的注册由 HTTP.sys 管理。
所以,不是HTTP的应该没有这个问题。
解决方法给针对部署方式说明
如果是Windows程序, 一般 右键单击, 选择“以管理员方式启动” 既可以,包括VS调试的时候
如果是在IIS下,一般 是没有问题, WPA(Windows进程激活服务)/IIS7
一般是没有问题的,IIS本身就已经具有权限了
如果是Windows 服务(本文重点),可能需要配置一下了
作为一个WCF服务来讲,如果用一般程序来HOST,作为最终产品,始终有点不好,(当然,这个是以服务端是服务器的前提下说的, 如果是那种P2P一类的程序就不是这个问题!)
在部署服务的时候,一般会选择一个系统帐号,来运行服务
默认情况下, 如果使用的是本地系统账户(Local system) 应该是没有问题的,
其他的2个账户,可能就会遇到错误, 分别是 本地服务账户(Local Service Account) 和 网络服务账户(Network Service Account)
当然,你可以自己指定一个账户,这里顺便说一下, 上边的3个账户是没有密码的
下面说一下解决办法
1、用管理模式打开命令行
命令1
netsh http add urlacl url=http://地址可以用+表示通用:端口/ sddl="D:(A;;GX;;;LS) user =domain\user
解释一下
netsh 是HTTP的配置工具 Vista 以上 自带, 之前的版本是HTTPCfg,在额外的工具包里
HTTP 是配置 HTTP相关的
add 是添加,也有其他操作 比如 删除 Delete 和 显示 Show
urlacl 就是最主要的了, URL ACL(URL 访问控制列表)
URL= 就是你要用到的地址,可以是域名 比如 abc.com 之类的,也可以用 + 表示通用, (也包含端口哦)
SDDL 是 安全描述定义语言(Security Descriptor Definition Language),一个很晦涩的东西,我也没有太懂。具体的可以参考后文链接。
这里解释一下上面写的。
D:(A;;GX;;;LS)
D: DACL 标记
A 表示 允许访问
GX 一般执行 权限
LS 本地服务账户(Local service account)
另外还有
SY 本地系统账户( Local system)
NS 网络服务账户(Network service account)
如果不用这个预知的账户,你可能需要输入 对应账户的SID 才可以
User 表示 对应的用户, 和上边的最后一点差不多, 不过应该是用在自定义启动账户上了。
例如, 允许 本地服务 注册 所有地址 的8080端口 的命令是
netsh http add urlacl url=http://+:8080/ sddl="D:(A;;GX;;;LS)"
这个成功的话,你应该可以启动服务。
接下来
命令2
netsh http add iplisten ipaddress=IP地址+端口
解释,前半服务和前边的相同。只说不同的部分
ipListen 是IP侦听列表
ipaddress 是要侦听的IP地址+端口 (可以是IPV6地址)
例如: 监听所有地址的8080端口
netsh http add iplisten ipaddress=0.0.0.0:
接下来,添加防火墙规则, 如果你用的是Win2008以上的服务器,你需要配置一下系统防火墙,当然,你可以关掉。
命令3
netsh advfirewall firewall add rule name=名字 dir=in action=allow protocol=协议 localport=端口
解释:
advfirewall 是高级防火墙功能
firewall 就是防火墙
add 和前边的相同
Rule 是规则
Name 是规则的名字
Dir 是 数据方向,in 表示进入 out 表示 发出
action 是动作 有 allow 允许 和 block 阻止
protocol 是协议 可以是 0-255|icmpv4|icmpv6|icmpv4:type,code|icmpv6:type,code|tcp|udp|any (default=any) 一般是TCP
localport 就是本地使用的宽口号
例如,允许 HTTP 8080 端口 的外来访问, 规则的名字是 "DDNS Client Host Service"
这些完成后,基本程序就能跑了。外边的机器也应该能访问了
如果要删除的话,可以把 Add 换成 Delete ,虽然有些小问题
---------
---------
Win7/Vista/Server2008下VS 环境 调试调用 HTTP.SYS 无法启动监听服务及启动后其他机器无法访问端口的更多相关文章
- oracle登陆,在监听服务启动了的情况下,登陆用户还是报错未启动监听服务的错误(刚开始装oracle是能登陆的,重启之后装了plsql)
刚开始装oracle是能登陆的,重启之后装了140M的plsql,所以有可能是plsql跟oracle监听冲突了,所以我之后换了33M的plsql,oracle就没问题了,可以正常登陆了
- android蓝牙耳机下的语音(输入/识别)及按键监听
背景:本人负责公司android平台的app开发,最近要开发一个语音助手类的app,类似于灵犀语音助手.虫洞语音助手等.其中有两个蓝牙耳机下的语音识别问题,比较折腾人,问题描述:1.蓝牙耳机连接下捕获 ...
- 【oracle】 linux 下oracle 启动监听错误
Message 1070 not found; No message file for product=network, facility=TNSTNS-12545: Message 12545 no ...
- ios 调用js方法(ios监听js方法执行)
下载地址 https://pan.baidu.com/s/1cJvEsY
- Linux下的启动oracle服务 启动监听 开放端口操作
尝试登录oracle 使用root用户将没有sqlplus命令 [root@localhost ~]# sqlplus /nolog bash: sqlplus: 未找到命令... [root ...
- Linux下安装oracle遇到启动监听服务器启动失败
1.发现监听服务器没有启动,则 lsntctl start 启动监听服务器: 2.发现TNS-12555问题: 3.查找TNS-12555错误,找到一个满意的答案: chmod 777 /var/ ...
- MAC 下SFT环境搭建及使用
基本环境的搭建就不说了,网上一搜就是一堆 记录下正常的使用过程,主机-服务器是MAC机,从机-Windows机子 1.STF服务启动(挂后台的服务,启动后输入 exit退出进程即可) 后台启动DB:n ...
- 获取Windows下某进程监听的TCP/UDP端口
1.在Windows下用CMD netstat命令可以获得当前进程监听端口号的信息,如netstat -ano可以看到IP.port.状态和监听的PID. 那么可以执行CMD这个进程得到监听的端口号信 ...
- Dcloud HTML5 监听蓝牙设备 调用 原生安卓实现
最近一直搞Dcloud ,这是HTML5版本的开发,打包时候,可以打包成 apk 和ipa 分别运行在安卓和ios 机器上面, 但是这里面的资料很少,遇到问题,之后只能自己钻研总结, 现在有这么一个需 ...
随机推荐
- CodeForces 499D. Name That Tune(概率dp)
It turns out that you are a great fan of rock band AC/PE. Peter learned that and started the followi ...
- MongoDB整理笔记の移除Shard Server
有些时候有于硬件资源有限,所以我们不得不进行一些回收工作,下面我们就要将刚刚启用的Shard Server 回收,系统首先会将在这个即将被移除的Shard Server 上的数据先平均分配到其它的Sh ...
- python抓网页数据【ref:http://www.1point3acres.com/bbs/thread-83337-1-1.html】
前言:数据科学越来越火了,网页是数据很大的一个来源.最近很多人问怎么抓网页数据,据我所知,常见的编程语言(C++,java,python)都可以实现抓网页数据,甚至很多统计\计算的语言(R,Matla ...
- Android-ListView-SimpleAdapter
我在上一篇博客中Android-动态添加控件到ScrollView,写到可以用Java动态添加控件到Scrollview的孩子LinearLayout里面去,这种方式是不合理的,因为这种方式是一次性把 ...
- PMBOK项目管理PMI主义\IPMA概述
PMP(Project Management Professional)指项目管理专业人士资格认证,是美国项目管理协会(Project Management Institute,PMI)在全球180多 ...
- asp.net—— 基础之截取字符串
在实际开发中有时难免会遇到需要获取某个字符串中的某些字符串,这里我们可以用到字符串截取的办法. 截取字符串的方法很容易(暂不包含中文字符串),只要稍微有点.net基础的人看了都能看懂. /// < ...
- CS0012 类型“DbContext”在未引用的程序集中定义。必须添加对程序集“EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”的引用。 Repository E:\项目\wx\Repository\DbContextFac
严重性 代码 说明 项目 文件 行 禁止显示状态错误 CS0012 类型“DbContext”在未引用的程序集中定义.必须添加对程序集“EntityFramework, Version=6.0.0.0 ...
- [Asp.net Mvc]为js,css静态文件添加版本号
方式一: 思路 string version = ViewBag.Version; @Scripts.RenderFormat("<script type=\"text/ja ...
- VS 发布MVC网站缺少视图解决方案
VS 发布MVC网站缺少视图解决方案 mvc项目发布之后会有一些视图文件缺少,不包含在发布文件中,虽然可以直接从项目文件中直接拷贝过来,但还是想知道是什么原因,发布文件好像没有找到哪里有设置这个的地 ...
- [Perl]通过GD模块获取字符/汉字的点阵
原来Perl获取汉字的点阵如此简单 示例脚本应保存为utf8格式 Code: [全选] [展开/收缩] [Download] (Untitled.pl) use GD; use utf8; my $g ...