积极答复者
关于WCF host 在IIS中的ServiceHost实例问题

问题
答案
-
每个service-name>.svc都对应着1个ServiceHost.
IIS或WAS使用ServiceHostingEnvironment.EnsureServiceAvailable激活配置的Service,用Reflector可以查看这个方法的实现,功能大致是:
在一个HashTable中,按VirtualPath为key保存Service关联的ServiceHostBase实例,即每个不同VirtualPath的Service都联系 且 仅联系着1个ServiceHostBase对象,如果对应的VirtualPath尚没有ServiceHost,那么创建一个新的,并记录在这个HastTable里;如果已经有了,就不必重复创建了.
VirtualPath就是这种东西: /<app-name>/<sub-directory/<service-name>.svc
而ServiceHostingEnvironment在AppDomain范围内有效
- 已标记为答案 Anders Tan 2011年2月15日 13:42
全部回复
-
http://msdn.microsoft.com/zh-cn/library/system.servicemodel.servicehost.aspx
实现 服务模型编程模型所使用的主机。
当您没有使用 Internet 信息服务 (IIS) 或 Windows 激活服务 (WAS) 公开服务时,请使用 ServiceHost 类来配置和公开服务以供客户端应用程序使用。 IIS 和 WAS 均代表您与 ServiceHost 对象交互。
若要公开一项服务以供调用方使用, 需要完整的服务说明(由 ServiceDescription 类表示)。 ServiceHost 类根据服务类型和配置信息创建 ServiceDescription,然后再使用该说明为说明中的每个终结点创建 ChannelDispatcher 对象。
使用 ServiceHost 对象加载服务、配置终结点、应用安全设置并启用侦听程序来处理传入的请求。
我猜测应该是可以多个,而单单是限制在一个。
可以想象一下,IIS的工作进程的个数 都没说一定限制为1,ServiceHost 宿主实例 为什么要限制为1呢?
而且如果只有一个 会不会影响并发请求时的性能问题?
Frank Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
【老徐的网站】:http://www.frankxulei.com/
-
这个有时间可以查下资料。
但是可以肯定要使用AppDomain,
Frank Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
【老徐的网站】:http://www.frankxulei.com/
-
每个service-name>.svc都对应着1个ServiceHost.
IIS或WAS使用ServiceHostingEnvironment.EnsureServiceAvailable激活配置的Service,用Reflector可以查看这个方法的实现,功能大致是:
在一个HashTable中,按VirtualPath为key保存Service关联的ServiceHostBase实例,即每个不同VirtualPath的Service都联系 且 仅联系着1个ServiceHostBase对象,如果对应的VirtualPath尚没有ServiceHost,那么创建一个新的,并记录在这个HastTable里;如果已经有了,就不必重复创建了.
VirtualPath就是这种东西: /<app-name>/<sub-directory/<service-name>.svc
而ServiceHostingEnvironment在AppDomain范围内有效
- 已标记为答案 Anders Tan 2011年2月15日 13:42
-
每个service-name>.svc都对应着1个ServiceHost.
IIS或WAS使用ServiceHostingEnvironment.EnsureServiceAvailable激活配置的Service,用Reflector可以查看这个方法的实现,功能大致是:
在一个HashTable中,按VirtualPath为key保存Service关联的ServiceHostBase实例,即每个不同VirtualPath的Service都联系 且 仅联系着1个ServiceHostBase对象,如果对应的VirtualPath尚没有ServiceHost,那么创建一个新的,并记录在这个HastTable里;如果已经有了,就不必重复创建了.
VirtualPath就是这种东西: /<app-name>/<sub-directory/<service-name>.svc
而ServiceHostingEnvironment在AppDomain范围内有效
Frank Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
【老徐的网站】:http://www.frankxulei.com/
- 已建议为答案 Frank Xu LeiModerator 2011年2月19日 15:31