我构建了一个包含WCF服务契约和Silverlight控件的Web应用程序,该控件调用该WCF服务.在我的开发和测试服务器上它运行良好.
当我部署到我们的实时服务器并运行应用程序时,我得到一个类型的异常,该异常System.ServiceModel.ServiceActivationException
表明由于编译期间的异常而无法激活该服务.例外是:
此集合已包含方案http的地址.此集合中每个方案最多只能有一个地址.
我读到如果网站有多个主机头,则可能抛出此异常,这在我们的实时服务器上是正确的.显然,IIS中托管的WCF服务只能有一个基地址.我该如何解决这个问题?
在.Net 4中,您可以使用以下multipleSiteBindingsEnabled
选项:
然后,您不必指定每个地址.
http://msdn.microsoft.com/en-us/library/system.servicemodel.servicehostingenvironment.multiplesitebindingsenabled.aspx
摘要,
代码解决方案: 这里
配置解决方案: 这里
在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文件中添加前缀.
你有没有看到这个 - 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:
在我的情况下,这个问题的根本原因是在父网站上定义了多个http绑定,即InetMgr-> Sites-> Mysite-> properties-> EditBindings.我删除了一个不需要的http绑定,问题得到了解决.
在我看来这很简单:我在Visual Studio中使用了"添加WCF服务"向导,该向导会自动在app.config中创建相应的部分.然后我继续阅读如何:在托管应用程序中托管WCF服务.问题是:我不需要指定运行Web服务的URL.
更换:
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
附:
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService))
错误消失了.
一般的想法:如果您提供基址作为参数并在配置中指定它,则会出现此错误.很可能,这不是获得错误的唯一方法,你.