当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《WCF服务启动错误"此集合已包含带有方案http的地址"》经验,为你挑选了5个好方法。

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

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

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

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



1> ericvg..:

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


    
    

然后,您不必指定每个地址.

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


注意 - 这里有一个拼写错误 - 没有关闭>,所以如果你复制粘贴,你就会遇到麻烦
它不适用于这个问题:"只有使用HTTP协议才能使用此功能."

2> Jeremy..:

摘要,

代码解决方案: 这里

配置解决方案: 这里

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

从网站上获取,下面是如何更改应用程序Web配置的示例:


    
        
            
            
        
    

在上面的示例中,net.tcp://payroll.myorg.com:8000和 http://shipping.myorg.com:9000是唯一的基本地址,用于各自的方案,允许传递.baseAddressPrefixFilter不支持任何通配符.

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

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


我开始认真思考WCF与ASP.net和通过JavaScript访问的Web服务的结合.普通的旧ASMX服务问题要少得多......
将基地址前缀过滤器添加到web.config工作得很好.谢谢杰里米!
我想不出为什么会有人想要这样的限制,更不用说默认设置......

3> Mike Chaliy..:

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

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

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

 
      
 

使用ASP.NET 2.0/3.0/3.5,将以下行添加到web.config:

 
      
           
                
           
      
 



4> 小智..:

在我的情况下,这个问题的根本原因是在父网站上定义了多个http绑定,即InetMgr-> Sites-> Mysite-> properties-> EditBindings.我删除了一个不需要的http绑定,问题得到了解决.


遗憾的是,这是在底部.在我们的案例中,这为我们修复了它.

5> bohdan_trots..:

在我看来这很简单:我在Visual Studio中使用了"添加WCF服务"向导,该向导会自动在app.config中创建相应的部分.然后我继续阅读如何:在托管应用程序中托管WCF服务.问题是:我不需要指定运行Web服务的URL.

更换:

using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))

附:

using (ServiceHost host = new ServiceHost(typeof(HelloWorldService))

错误消失了.

一般的想法:如果您提供基址作为参数在配置中指定它,则会出现此错误.很可能,这不是获得错误的唯一方法,你.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有