WCF 部署问题 小总结 (HTTP 不能注册的解决方法 和 部署Bat脚本)[转]

本文涉及的产品
云防火墙,500元 1000GB
简介:

可是工具写完,部署之后, 却出错了, Windows 服务 却没有启动。

当时原因是不知道的,因此我是在 Windows  2008 R2 Core 下部署的,查看不了日志(为什么要用 R2? 恩,因为我在Win 2008 Core下安装 .NET 3.5 的时候出错了~)

今天,又找了一下测试机,发现问题了

日志名称:          Application 
来 源:            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:8080

 

接下来,添加防火墙规则, 如果你用的是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"

 

netsh advfirewall firewall add rule name="DDNS Client Host Service"  dir=in action=allow protocol=TCP localport=8080

 

 

这些完成后,基本程序就能跑了。外边的机器也应该能访问了

如果要删除的话,可以把 Add 换成 Delete  ,虽然有些小问题

 

最后,附上 写的 Bat 脚本, 包含卸载, 不过给在 管理员的模式下运行。点击这里下 载

 

@echo  off

::  安装工具 
::
 第一个是32位版的,第二个是64位版的, 注意: 在64位系统中,2个都可以 用,根据需求选择

if "%PROCESSOR_ARCHITECTURE%"=="AMD64"  set InstallUtil=%windir%\Microsoft. NET\Framework64\v2.0.50727\InstallUtil.exe   else  set InstallUtil=%windir%\Microsoft. NET\Framework\v2.0.50727\InstallUtil.exe 

:: 服务程序文件
set Service=DDNSService.exe

:: 服务端口
set port=8080

:: 服务显示名字
set Name="DynamicDNS Client Host Service"


if "%1"=="/u"  goto Uninstall



   echo 正在安装服务 %Name%

  %InstallUtil% %Service%


   echo 正在配置本地端口


  netsh http add urlacl url=http://+:%port%/  sddl="D:(A;;GX;;;SY)"

  netsh http add iplisten ipaddress=0.0.0.0:%port%

   echo 正在设置防火墙

  netsh advfirewall firewall add rule name=%Name%  dir=in action=allow protocol=TCP localport=%port%


   :: 启动服务,可以注释掉
   echo 启动服务

   net  start %Name%

   echo 安装完毕! 你 可以运行 “Setup.bat” /u 进行卸载。

   goto  end

:Uninstall

   echo 开始卸载服务
  
   echo 正在停止服务

   net stop %Name%
  
   echo 正在卸载服务 %Name%

  %InstallUtil% %Service% /u


   echo 正在清理本地端口配置

  netsh http delete urlacl url=http://+:%port%/ 

  netsh http delete iplisten ipaddress=0.0.0.0

   echo 正在清理防火墙设 置

  netsh advfirewall firewall delete rule name=%Name% 

 
   echo 卸载完毕! 

   goto  end
  

:end
pause


 

 

其他参考

受限用户问题和分持机密 <http://msdn.microsoft.com/zh-cn/magazine/cc163531.aspx>

配置 HTTP 和 HTTPS <http://msdn.microsoft.com/zh-cn/library/ms733768.aspx>

Netsh Commands for Hypertext Transfer Protocol (HTTP) <http://technet.microsoft.com/en-us/library/cc725882(WS.10).aspx>

Security Descriptor Definition Language <http://msdn.microsoft.com/en-us/library/aa379567(VS.85).aspx>

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 330987132 | Go:217696290 | Python:336880185 | 做人要厚道,转载请注明出处!http://www.cnblogs.com/sunshine-anycall/archive/2010/04/30/1725357.html
相关文章
|
5月前
|
编解码 测试技术 索引
性能工具之 Jmeter 使用 HTTP 请求编写 HLS 脚本
在我们简要介绍了 HLS 协议的基础知识,接下来我们详细介绍一种使用 Jmeter 编写压测 HLS 协议脚本的方法。
139 1
性能工具之 Jmeter 使用 HTTP 请求编写 HLS 脚本
|
3月前
|
Java Spring
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
69 3
|
2月前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
133 0
|
2月前
|
Java Android开发 UED
安卓scheme_url调端:如果手机上多个app都注册了 http或者https 的 intent。 调端的时候,调起哪个app呢?
当多个Android应用注册了相同的URL Scheme(如http或https)时,系统会在尝试打开这类链接时展示一个选择对话框,让用户挑选偏好应用。若用户选择“始终”使用某个应用,则后续相同链接将直接由该应用处理,无需再次选择。本文以App A与App B为例,展示了如何在`AndroidManifest.xml`中配置对http与https的支持,并提供了从其他应用发起调用的示例代码。此外,还讨论了如何在系统设置中管理这些默认应用选择,以及建议开发者为避免冲突应注册更独特的Scheme。
|
5月前
|
Android开发 数据安全/隐私保护 iOS开发
ios和安卓测试包发布网站http://fir.im的注册与常用功能
ios和安卓测试包发布网站http://fir.im的注册与常用功能
204 0
ios和安卓测试包发布网站http://fir.im的注册与常用功能
|
5月前
|
网络协议 安全
【专栏】`curl`是广泛用于网络编程和自动化脚本的命令行工具,支持HTTP、HTTPS等协议
【4月更文挑战第28天】`curl`是广泛用于网络编程和自动化脚本的命令行工具,支持HTTP、HTTPS等协议。在处理大文件或慢速服务器时,设置超时参数至关重要。本文介绍了`curl`的超时参数,如`-m`(最大操作时间)、`-c`(连接超时)、`--dns-timeout`(DNS解析超时)和`-t`(时间条件)。通过示例展示了如何设置这些超时,并提到了一些高级技巧和注意事项,如错误处理和带宽限制。合理设置超时能提高效率和可靠性,对编写健壮的自动化脚本非常有用。
150 0
|
5月前
|
应用服务中间件 Linux 网络安全
Linux【脚本 06】HTTPS转发HTTP安装OpenSSL、Nginx(with-http_ssl_module)及自签名的X.509数字证书生成(一键部署生成脚本分享)
Linux【脚本 06】HTTPS转发HTTP安装OpenSSL、Nginx(with-http_ssl_module)及自签名的X.509数字证书生成(一键部署生成脚本分享)
94 1
|
12月前
|
Oracle 关系型数据库 API
C# LIS检验系统源码,接口技术:RESTful API + Http+WCF
LIS检验系统一种专门用于医院化验室的计算机系统,它致力于提高医院化验室的工作效率和检测准确率。LIS系统由多个子系统组成,包括样本管理系统、质控系统、检验结果管理系统、报告管理系统等。体系结构:Client/Server架构 SaaS模式 客户端:WPF+Windows Forms 服务端:C# +.Net 数据库:Oracle 接口技术:RESTful API + Http+WCF
101 2
|
Java 测试技术 Android开发
Loadrunner脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试
Loadrunner脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试
134 0

热门文章

最新文章