4

我有一个 .NET 4.0 WCF 服务,它使用 Castle Windsor (v3) 通过依赖注入模式实现。该服务托管在 IIS 7 中,我在本地运行时使用 Visual Studio 开发服务器。我的开发服务器为服务分配了一个特定的端口。

现在,如果我不添加基地址,我会从 Castle Windsor 那里得到一个例外:

找不到与绑定 WebHttpBinding 的终结点的方案 http 匹配的基地址。注册的基地址方案是 []。

但是,如果我确实分配了一个与我的开发服务器具有相同端口的本地主机地址,我会遇到端口冲突。

这种情况下为什么需要基地址,端口冲突如何处理?

这是我与温莎城堡相关的代码。该容器是在 Global.asax.cs 文件中的 Application_Start() 中创建的。

public class ServiceInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.AddFacility<WcfFacility>()
            .Register(Component.For<IMyService>().ImplementedBy<MyService>().AsWcfService<IMyService>().IsDefault()
        );
    }
}

另外,我对托管多种服务不感兴趣,只有一种。

4

2 回答 2

4

答案是来自 Castle Project Google Group 的 Craig Neuwirt。

如果它托管在 IIS 中,您可能需要将其标记为托管,因此它应该看起来像

container.AddFacility<WcfFacility>() 
.Register(Component.For<IMyService>().ImplementedBy<MyService>().AsWcfService(new DefaultServiceModel().Hosted()).IsDefault()

作为记录,我的配置是按照 Hally 爵士的建议设置的,这就是端口冲突出现的时候。通过上面额外的 fluent 配置,我从 web.config 中删除了基地址配置。

于 2012-08-09T06:29:52.563 回答
0

你能显示你的配置吗?

如果您在 IIS 上托管您的服务,则基地址取决于站点、应用程序和端口(根据当前协议的 IIS 绑定 - net.tcp、http)。

您可以将 Visual Studio Development Server 用于基于 http 的服务(不是 net.tcp)。您可以在 VS DevelopmentService 的配置中指定基地址(在您的<service>标签内)

    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8000/MyApp/Service.svc"/>
      </baseAddresses>
    </host>
于 2012-08-08T19:31:27.413 回答