仅配置部署WCF服务

时间:2012-06-02 11:55:52

标签: c# wcf iis

我们运行一个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" %>

但是,我真的想避免这种情况,以免在设置新主机时出现错误(我们已经对配置文件进行了大量自动操作,因此添加新服务将是不重要的)。这可能吗?有什么缺点吗?

2 个答案:

答案 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。