2012-08-08 43 views
3

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

现在,如果我不添加基地址,我会从温莎城堡得到一个异常说:

找不到与绑定的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

这里的答案,从城堡项目谷歌集团记克雷格Neuwirt酒店。

如果它在IIS正在承载您可能需要将其标记为托管,因此它应该是这个样子

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

并记录在案,我的配置成立了由Hally先生的建议,那是港口冲突出现的时候。通过上面的附加流畅配置,我从web.config中删除了基本地址配置。

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>