我构建了一个包含WCF服务契约和Silverlight控件的web应用程序,该控件调用该WCF服务。在我的开发和测试服务器上,它工作得很好。
当我部署到我们的实时服务器并运行应用程序时,我得到了一个System.ServiceModel.ServiceActivationException
类型的异常,它指出由于编译过程中的异常,服务不能被激活。例外情况是:
此集合已包含方案为http的地址。在此集合中,每个方案最多只能有一个地址。
我读到,如果网站有多个主机头,这个异常可能会被抛出,这在我们的实时服务器上是真的。显然,IIS中托管的WCF服务只能有一个基地址。我该如何解决这个问题呢?
发布于 2009-02-18 17:06:50
总结,
代码解决方案: Here
配置解决方案: Here
在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文件中添加前缀。
发布于 2010-07-09 02:52:18
在.Net 4中,您可以使用multipleSiteBindingsEnabled
选项:
<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true">
</serviceHostingEnvironment>
</system.serviceModel>
这样,您就不必指定每个地址了。
发布于 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中:
<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
对于ASP.NET 2.0/3.0/3.5,请在web.config中添加以下行:
<system.serviceModel>
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://www.YourHostedDomainName.com"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
</system.serviceModel>
https://stackoverflow.com/questions/561823
复制相似问题