0

我们使用许多(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" %>

但是,我真的很想避免这种情况,这样在设置新主机时出错的可能性就会降低(我们已经用配置文件做了一堆自动的东西,所以添加一个新服务是微不足道的)。这可能吗?有什么缺点吗?

4

2 回答 2

1

一段时间后自己找到了答案。解决方案是 WCF 4 的无文件激活。这让我只需将其添加到我的web.config

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
    multipleSiteBindingsEnabled="true">
  <serviceActivations>
    <add relativeAddress="AdminService.svc" service="Contracts.AdminService"/>
  </serviceActivations>
</serviceHostingEnvironment>

在此之后,我可以访问该服务http://<hostname>/<path>/AdminService.svc

于 2012-06-03T19:21:24.853 回答
-1

WCF 服务托管在ServiceHost中。

当您不在 IIS/WAS 中托管 WCF 时,必须手动创建 ServiceHost,因为 IIS/WAS 都代表您与 ServiceHost 交互。

您在 IIS 中的 .svc 文件中所做的基本上是实例化一个新的 ServiceHost。

由于 ServiceHost 只能托管一种服务类型,因此如果您计划创建新类型的管理服务,您将需要为每种新类型提供服务主机。

因此,对您的问题的简短回答是,您不能只在 web.config 中为要创建的新服务添加一些信息,还需要一种机制来实例化 ServiceHost。

于 2012-06-03T15:11:50.640 回答