我第一次尝试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的新手,所以也许我错过了一些明显的东西。
感谢。
答案 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站点上有多个绑定,也会发生这种情况。我通过删除额外的命名绑定来解决问题。