WCF 服务的仅配置部署
本文关键字:配置 部署 服务 WCF | 更新日期: 2023-09-27 18:36:09
我们运行一个包含许多(50+)WCF服务主机(用C#编写,在Win 2008R2/IIS 7.5上运行)的Web应用程序,以便与不同的外部供应商集成。我们希望向这些主机中的每一个添加另一个服务以进行管理。这个服务可以足够通用,以至于我们有一个单一的服务定义,我们在某个库中定义,我们可以从集成项目中引用它。但是有没有办法仅在配置中实际添加端点?也就是说,我想避免添加 .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" %>
但是,我真的很想避免这种情况,以便在设置新主机时不太可能出错(我们已经用配置文件做了一堆自动操作,所以添加新服务将是微不足道的)。这可能吗?有什么缺点吗?
过了一会儿自己找到了答案。解决方案是 WCF 4 的无文件激活。这让我把它添加到我的web.config
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true">
<serviceActivations>
<add relativeAddress="AdminService.svc" service="Contracts.AdminService"/>
</serviceActivations>
</serviceHostingEnvironment>
在此之后,我可以通过转到 http://<hostname>/<path>/AdminService.svc
来访问该服务。
WCF 服务托管在服务主机中。
当您不在 IIS/WAS 中承载 WCF 时,必须手动创建服务主机,因为两个 IIS/WAS 都代表您与服务主机交互。
在IIS中的.svc文件中,您基本上所做的是即时启动新的ServiceHost。
由于 ServiceHost 只能托管一种服务类型,因此,如果您计划为管理创建新的服务类型,则每种新类型都需要一个服务主机。
因此,对您的问题的简短回答是,您不能只在 web.config 中为要创建的新服务添加一些信息,您还需要一种机制来实例化 ServiceHost。