首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WCF服务启动错误“此集合已包含具有方案http的地址”

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

Stack Overflow用户
提问于 2009-02-18 16:28:15
回答 7查看 162.5K关注 0票数 187

我构建了一个包含WCF服务契约和Silverlight控件的web应用程序,该控件调用该WCF服务。在我的开发和测试服务器上,它工作得很好。

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

此集合已包含方案为http的地址。在此集合中,每个方案最多只能有一个地址。

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

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-02-18 17:06:50

总结,

代码解决方案: Here

配置解决方案: Here

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

下面是一个如何更改应用程序web配置的示例,摘自该站点:

代码语言:javascript
复制
<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文件中添加前缀。

票数 148
EN

Stack Overflow用户

发布于 2010-07-09 02:52:18

在.Net 4中,您可以使用multipleSiteBindingsEnabled选项:

代码语言:javascript
复制
<system.serviceModel>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true">
    </serviceHostingEnvironment>
</system.serviceModel>

这样,您就不必指定每个地址了。

http://msdn.microsoft.com/en-us/library/system.servicemodel.servicehostingenvironment.multiplesitebindingsenabled.aspx

票数 172
EN

Stack Overflow用户

发布于 2009-02-18 16:35:30

你看到这个了吗- http://kb.discountasp.net/KB/a799/error-accessing-wcf-service-this-collection-already.aspx

您可以通过更改web.config文件来解决此错误。

使用ASP.NET 4.0,将以下行添加到web.config中:

代码语言:javascript
复制
<system.serviceModel> 
     <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 

对于ASP.NET 2.0/3.0/3.5,请在web.config中添加以下行:

代码语言:javascript
复制
<system.serviceModel> 
     <serviceHostingEnvironment> 
          <baseAddressPrefixFilters> 
               <add prefix="http://www.YourHostedDomainName.com"/> 
          </baseAddressPrefixFilters> 
     </serviceHostingEnvironment> 
</system.serviceModel> 
票数 63
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/561823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档