3

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

该集合已经包含一个带有 http 方案的地址...

我发现了很多其他对此的引用,并尝试了一些解决方案无济于事。一个不适用于我的相当常见的线程是问题出在某种网络服务器上。我只是从我的本地机器上运行所有东西。

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

基于此解决方案: 如何解决“ChannelDispatcher 无法打开其 IChannelListener”错误?

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

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 是我的顶级表单类...

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

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

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

谢谢。

4

3 回答 3

2

我收到了这个错误:

此集合已包含一个采用方案 https 的地址。此集合中的每个方案最多可以有一个地址。如果您的服务托管在 IIS 中,您可以通过将“system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled”设置为 true 或指定“system.serviceModel/serviceHostingEnvironment/baseAddressPrefixFilters”来解决问题。参数名称:项目

我通过对我的 web.config 执行以下操作来解决它。也许在需要这条线的 .NET Framework 4 中发生了一些变化,因为我以前不需要它:

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

<system.serviceModel>
于 2013-06-05T02:00:36.277 回答
1

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

于 2014-01-22T00:08:33.703 回答
0

我之前找到的解决方案之一是添加如下内容:

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

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

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

于 2012-10-08T23:38:37.537 回答