【问题标题】:Why does a IIS hosted WCF service implemented with Castle Windsor require a base address?为什么使用 Castle Windsor 实现的 IIS 托管 WCF 服务需要基地址?
【发布时间】:2012-08-08 12:47:56
【问题描述】:

我有一个 .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()
        );
    }
}

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

【问题讨论】:

    标签: wcf castle-windsor


    【解决方案1】:

    这就是答案,来自 Castle Project Google 集团的 Craig Neuwirt。

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

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

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

    【讨论】:

      【解决方案2】:

      你能展示你的配置吗?

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

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

          <host>
            <baseAddresses>
              <add baseAddress="http://localhost:8000/MyApp/Service.svc"/>
            </baseAddresses>
          </host>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-14
        • 1970-01-01
        • 2012-06-06
        相关资源
        最近更新 更多