我有一个使用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()
);
}
}
另外,我对托管多项服务不感兴趣,只有一项。
答案 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>