为什么使用Castle Windsor实现的IIS托管WCF服务需要基址?

时间:2012-08-08 12:47:56

标签: wcf castle-windsor

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

现在,如果我不添加基地址,我将从Castle Windsor获得一个例外:

  

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

但是,如果我使用与开发人员服务器相同的端口分配本地主机地址,则会发生端口冲突。

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

这是我与Castle Windsor相关的代码。容器是在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()
        );
    }
}

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

2 个答案:

答案 0 :(得分:4)

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

  

如果它在IIS中托管,您可能需要将其标记为托管,因此它应该类似于

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

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

答案 1 :(得分: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>