Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net WCF服务启动错误“;此集合已包含方案为“http”的地址;_.net_Wcf - Fatal编程技术网

.net WCF服务启动错误“;此集合已包含方案为“http”的地址;

.net WCF服务启动错误“;此集合已包含方案为“http”的地址;,.net,wcf,.net,Wcf,我构建了一个web应用程序,其中包含一个WCF服务契约和一个Silverlight控件,该控件调用该WCF服务。在我的开发和测试服务器上,它工作得很好 当我部署到我们的实时服务器并运行应用程序时,我得到一个类型为System.ServiceModel.ServiceActivationException的异常,该异常表示由于编译期间出现异常,无法激活服务。例外情况是: 此集合已包含具有方案http的地址。此集合中每个方案最多只能有一个地址 我了解到,如果网站有多个主机头,可能会引发此异常,这在我

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

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

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

我了解到,如果网站有多个主机头,可能会引发此异常,这在我们的实时服务器上是正确的。显然,IIS中承载的WCF服务只能有一个基址。我怎样才能避开这个问题?

你看到这个了吗-

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

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


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


摘要

代码解决方案:

配置解决方案:

在的帮助下,我找到了一些关于如何通过代码实现这一点的解决方案。因为这个问题将影响我们部署到实时环境中的几乎所有项目,所以我提出了一个纯配置解决方案。我最终在.NET3.0和.NET3.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>

是吗
仅基地址,用于它们的
各自的计划,将
允许通过。这个
baseAddressPrefixFilter不支持
支持任何通配符

IIS提供的基地址可能是 将地址绑定到其他方案 baseAddressPrefixFilter中不存在 列表这些地址将不会被删除 过滤掉

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

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

<system.serviceModel>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true">
    </serviceHostingEnvironment>
</system.serviceModel>

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


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

在我的例子中很简单:我在Visual Studio中使用了“添加WCF服务”向导,该向导会自动在app.config中创建相应的部分。然后我继续阅读。问题是:我不需要指定运行web服务的url

替换:

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

错误消失了


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

我有这个问题,原因很愚蠢。我正在试用Microsoft的演示,演示如何在命令行可执行文件中从w/运行ServiceHost。我按照说明进行操作,包括在其中添加适当的服务(和接口)。但是我得到了上面的错误


当我添加服务类时,VS自动将配置添加到app.config。演示也试图添加这些信息。因为它已经在配置中了,所以我删除了演示部分,它成功了。

我在旧的2010 Exchange服务器上遇到了相同的错误。 服务(Exchange邮箱复制服务)发出上述错误,迁移过程无法继续。 通过互联网搜索,我得到了以下信息:

首次安装或对IIS服务器进行任何更改时,Exchange GRE无法打开。由于管理单元错误而失败,当您尝试打开管理单元页面时,将显示以下内容:

This collection already contains an address with scheme http.  There can be at most one address per scheme in this collection. If your service is being hosted in IIS you can fix the problem by setting 'system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled' to true or specifying 'system.serviceModel/serviceHostingEnvironment/baseAddressPrefixFilters'."
原因: 发生此错误是因为http端口号443已被其他应用程序使用,并且IIS服务器未配置为处理到同一端口的多个绑定

解决方案: 配置IIS服务器以处理多端口绑定。请与供应商(Microsoft)联系以进行配置

由于这些服务是从IIS Web服务器提供的,因此检查根站点上的绑定修复了该问题。有人搞乱了站点绑定,定义了相互重叠的规则,并搞乱了服务


对我来说,修复正确的绑定解决了问题,而且我不必配置Web.Config。

谢谢。我将继续搜索,看看是否有非代码解决方案。一些可以在配置中完成的事情,因为这将影响我们所做的任何项目。我希望不必编写自定义代码。将基址前缀筛选器添加到web.config非常有效。谢谢你,杰里米!我想不出有什么理由想要这样的限制,更不用说默认设置了……我开始不考虑WCF与ASP.net和通过JavaScript访问的web服务的结合。我对简单的旧ASMX服务的问题要小得多……好吧,如果你有一个混合了.NET4和.NET2应用程序的站点,那么该怎么办呢。该应用程序的基础是.net4,它下面有几个应用程序需要.net2。是否在所有.net4文件中使用前缀以及.NET2应用程序中使用前缀?是的,但这仅适用于.net4.0及更高版本。无法将此与.NE一起使用
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService))
This collection already contains an address with scheme http.  There can be at most one address per scheme in this collection. If your service is being hosted in IIS you can fix the problem by setting 'system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled' to true or specifying 'system.serviceModel/serviceHostingEnvironment/baseAddressPrefixFilters'."