我尝试将WCF应用程序上载到服务器时出错

时间:2012-02-08 06:22:36

标签: c# asp.net wcf asp.net-4.0

我正在尝试在Web服务器上托管我的WCF应用程序。我收到此错误,但它在我的本地系统中运行良好

错误

  

此集合已包含方案http的地址。那里   在此集合中,每个方案最多只能有一个地址。如果你的   服务正在IIS中托管,您可以通过设置来解决问题   'system.serviceModel / serviceHostingEnvironment / multipleSiteBindingsEnabled'   为真或指定   'system.serviceModel / serviceHostingEnvironment / baseAddressPrefixFilters'。

     

参数名称:item

     

描述:在执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息: System.ArgumentException:此集合已包含方案http的地址。最多可以   此集合中每个方案的一个地址。如果你的服务正在   在IIS中托管,您可以通过设置来解决问题   'system.serviceModel / serviceHostingEnvironment / multipleSiteBindingsEnabled'   为真或指定   'system.serviceModel / serviceHostingEnvironment / baseAddressPrefixFilters'。   参数名称:item

     

来源错误:

     

执行期间生成了未处理的异常   当前的网络请求。有关的来源和位置的信息   可以使用下面的异常堆栈跟踪来识别异常。

     

堆栈追踪:

     

[ArgumentException:此集合已包含一个地址   计划http。每个方案最多只能有一个地址   采集。如果您的服务是在IIS中托管,则可以修复   设置问题   'system.serviceModel / serviceHostingEnvironment / multipleSiteBindingsEnabled'   为真或指定   'system.serviceModel / serviceHostingEnvironment / baseAddressPrefixFilters'。   参数名称:item]
  System.ServiceModel.UriSchemeKeyedCollection.InsertItem(Int32 index,   Uri项目)+12089046
  System.Collections.Generic.SynchronizedCollection`1.Add(T item)+78
  System.ServiceModel.UriSchemeKeyedCollection..ctor(Uri []地址)   +72 System.ServiceModel.ServiceHost..ctor(类型serviceType,Uri [] baseAddresses)+141
  System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(类型   serviceType,Uri [] baseAddresses)+30
  System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(字符串   constructorString,Uri [] baseAddresses)+420
  System.ServiceModel.HostingManager.CreateService(字符串   normalizedVirtualPath)+1440
  System.ServiceModel.HostingManager.ActivateService(字符串   normalizedVirtualPath)+44
  System.ServiceModel.HostingManager.EnsureServiceAvailable(字符串   normalizedVirtualPath)+615

     

[ServiceActivationException:服务'/GUIService.svc'不能   由于编译期间的异常而激活。例外   消息是:此集合已包含带有scheme的地址   HTTP。此集合中每个方案最多只能有一个地址。   如果您的服务是在IIS中托管,则可以通过以下方式解决问题   设置   'system.serviceModel / serviceHostingEnvironment / multipleSiteBindingsEnabled'   为真或指定   'system.serviceModel / serviceHostingEnvironment / baseAddressPrefixFilters'。   参数名称:item。] System.Runtime.AsyncResult.End(IAsyncResult   结果)+679246
  System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult的   结果)+190
  System.ServiceModel.Activation.ServiceHttpModule.EndProcessRequest(IAsyncResult的   ar)+300622
  System.Web.AsyncEventExecutionStep.OnAsyncEventCompletion(IAsyncResult的   ar)+8837348

任何人都可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:3)

来自SO的原帖:WCF service startup error "This collection already contains an address with scheme http"

请在发布问题前进行搜索。

您可以查看以下解决方案

  • 代码解决方案:Here
  • 配置解决方案:Here

我建议您使用配置解决方案,轻松随时更改。

检查如何更改应用程序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文件中添加前缀。

答案 1 :(得分:0)

通过以下链接,您将解决您的问题。在这些链接中解决了同样的问题。

WCF service startup error "This collection already contains an address with scheme http"

Server error in WCF

我建议您检查您的网络配置文件层次结构,以确认您没有使用“无地址”的多个端点。