获取错误“此集合已包含带有方案http的地址”,本地计算机上有WCF

时间:2012-10-08 23:12:19

标签: c# .net wcf

我第一次尝试WCF并在尝试实例化主机时收到以下错误:

此集合已包含方案http ...

的地址

我已经找到了很多其他的参考资料,并尝试了一些解决方案无济于事。一个相当常见的线程不适用于我,问题出在某种Web服务器上。我只是在本地机器上运行所有东西。

我发现一个有趣的症状是我正在开发一个c#Forms应用程序。最初我的顶级表单对象继承了我的服务接口而不是单独的Service类。当我以这种方式实现时,主机端没有错误,但我在客户端遇到了麻烦。

基于此解决方案: How to solve "The ChannelDispatcher is unable to open its IChannelListener" error?

...我决定将服务主机分成一个单独的对象。那是我开始看到问题的时候。

ServiceContract非常简单:

[ServiceContract]
public interface ISSAService
{
    [OperationContract]
    void CreateSpaMonitor();
}

我像这样实例化服务:

        Uri baseAddr = new Uri("http://localhost:8000/SSAService");
        ServiceHost localHost = new ServiceHost(typeof(SSAService), baseAddr);

SSAService是Service接口的实现。

如果我将第二行更改为以下(并实现接口...),则错误消失:

        Uri baseAddr = new Uri("http://localhost:8000/SSAService");
        ServiceHost localHost = new ServiceHost(typeof(SSAManager), baseAddr);

SSAManager是我的顶级Forms类...

然后我遇到了客户端问题,这是我开始的地方......

我尝试更改端口号,但似乎没有任何影响。

我是WCF的新手,所以也许我错过了一些明显的东西。

感谢。

3 个答案:

答案 0 :(得分:1)

我收到了这个错误:

此集合已包含方案https的地址。此集合中每个方案最多只能有一个地址。如果您的服务是在IIS中托管的,则可以通过设置&system; service.serviceModel / serviceHostingEnvironment / multipleSiteBindingsEnabled'来解决问题。 to true或指定system.serviceModel / serviceHostingEnvironment / baseAddressPrefixFilters'。 参数名称:item

我通过对web.config执行以下操作解决了这个问题。可能在.NET Framework 4中发生了一些变化,这需要这一行,因为我之前并不需要它:

<system.serviceModel>
      <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />           
    <!--  Rest of the system.serviceModel content omitted for brevity--->

<system.serviceModel>

答案 1 :(得分:0)

我之前发现的一个解决方案是添加类似的东西:

  <serviceHostingEnvironment>
    <baseAddressPrefixFilters>
      <add prefix="http://localhost:8000"/>
    </baseAddressPrefixFilters>
  </serviceHostingEnvironment>

然后绝对指定端点地址。这似乎没有效果,但我仍然在构造函数中使用baseAddr,如上所示。

我的解决方案是从构造函数中删除baseAddr。

答案 2 :(得分:0)

如果在具有不同域名/端口的同一IIS站点上有多个绑定,也会发生这种情况。我通过删除额外的命名绑定来解决问题。