小编典典

WCF 服务启动错误“此集合已包含带有方案 http 的地址”

all

我构建了一个 Web 应用程序,其中包含一个 WCF 服务协定和一个调用该 WCF 服务的 Silverlight
控件。在我的开发和测试服务器上,它运行良好。

当我部署到我们的实时服务器并运行应用程序时,我得到一个类型的异常System.ServiceModel.ServiceActivationException,指出由于编译过程中的异常而无法激活服务。例外是:

这个集合已经包含一个带有 http 方案的地址。此集合中的每个方案最多可以有一个地址。

我读到如果网站有多个主机标头,则可能会引发此异常,这在我们的实时服务器上是正确的。显然,托管在 IIS 中的 WCF
服务只能有一个基地址。我该如何解决这个问题?


阅读 92

收藏
2022-07-29

共1个答案

小编典典

概括,

代码解决方案: 这里

配置解决方案:
这里

在Mike Chaliy的帮助下,我找到了一些关于如何通过代码执行此操作的解决方案。因为这个问题将影响我们部署到实时环境的几乎所有项目,所以我坚持使用纯粹的配置解决方案。我最终找到了一个详细说明如何在
.net 3.0 和 .net 3.5 中执行此操作的内容。

取自该站点,以下是如何更改应用程序 Web 配置的示例:

<system.serviceModel>
    <serviceHostingEnvironment>
        <baseAddressPrefixFilters>
            <add prefix="net.tcp://payroll.myorg.com:8000"/>
            <add prefix="http://shipping.myorg.com:9000"/>
        </baseAddressPrefixFilters>
    </serviceHostingEnvironment>
</system.serviceModel>

在上面的示例中,net.tcp://payroll.myorg.com:8000 和
http://shipping.myorg.com:9000是它们各自方案的唯一基地址,它们将被允许通过。baseAddressPrefixFilter
不支持任何通配符。

IIS 提供的 baseAddresses 可能具有绑定到 baseAddressPrefixFilter
列表中不存在的其他方案的地址。这些地址不会被过滤掉。

Dns 解决方案(未经测试): 我认为,如果您创建一个特定于您的 Web 应用程序的新 dns 条目,添加一个新网站,并为其提供与 dns
条目匹配的单个主机标头,您将完全缓解此问题,并且不会必须编写自定义代码或为您的 web.config 文件添加前缀。

2022-07-29