我们运行一个Web应用程序,其中包含许多(50多个)WCF服务主机(以C#编写,在Win 2008R2 / IIS 7.5上运行),以便与不同的外部供应商集成。我们想为每个主机添加另一个服务以进行管理。这个服务可以是通用的,我们有一个服务定义,我们在一些库中定义,我们可以从集成项目中引用它。但有没有办法只在配置中添加端点?也就是说,我想避免添加.svc文件,只在web.config
服务部分添加一些行。
我尝试将其添加到web.config
:
<service name="Contracts.AdminService">
<endpoint address="AdminService" contract="Contracts.IAdminService" binding="basicHttpBinding" />
</service>
然而,这不起作用。如果我添加一个如下所示的简单.svc
文件,则可以使用
<%@ ServiceHost Language="C#" Debug="true" Service="Contracts.AdminService" CodeBehind="Contracts.AdminService.cs" %>
但是,我真的想避免这种情况,以免在设置新主机时出现错误(我们已经对配置文件进行了大量自动操作,因此添加新服务将是不重要的)。这可能吗?有什么缺点吗?
答案 0 :(得分:1)
过了一会儿,我自己找到了答案。解决方案是WCF 4的file-less activation。这样我就可以将其添加到我的web.config
:
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true">
<serviceActivations>
<add relativeAddress="AdminService.svc" service="Contracts.AdminService"/>
</serviceActivations>
</serviceHostingEnvironment>
在此之后,我可以转到http://<hostname>/<path>/AdminService.svc
来访问该服务。
答案 1 :(得分:-1)
WCF服务托管在ServiceHost。
当您未在IIS / WAS中托管WCF时,必须手动创建ServiceHosts,因为IIS / WAS代表您与ServiceHost进行交互。
您在IIS中的.svc文件中基本上做的是实例化一个新的ServiceHost。
由于ServiceHost只能托管单一服务类型,因此如果您计划为管理创建新类型的服务,则需要为每种新类型提供服务主机。
因此,对您的问题的简短回答是,您不能只在web.config中为要创建的新服务添加一些信息,还需要一种机制来实例化ServiceHost。