在研究了众多Castle Windsor关于配置WCF设施的帖子后,我编写了以下配置。
这将托管在IIS中。
我所做的假设是:
1)我需要" .Hosted()"扩展,因为我在IIS和#34;基地址#34;将由Web服务器解决。在其他应用程序中,我使用了" .AddBaseAddress(" http://etc")"当自托管(Windows服务或控制台应用程序等),但我的理解是这不是必需的。
2)组件必须是"。命名(...)"符合"服务" .svc标记的值。
3)" .At(...)"将在Web服务器地址之外注册,因此不需要" http://localhost:9278/"字首。
设置如下:
global.asax文件中的中央安装程序。
public static IWindsorContainer CreateContainer()
{
var container = new WindsorContainer();
container.AddFacility<WcfFacility>()
.Install(FromAssembly.This());
return container;
}
WCF服务的特定安装程序类。
private const string FileServiceAddress = "Services/FileService.svc";
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container
.Register(Component.For<IFileService>()
.ImplementedBy<FileService>()
.Named("FileService")
.AsWcfService(new DataServiceModel()
.Hosted()
.PublishMetadata(o => o.EnableHttpGet())
.AddEndpoints(
WcfEndpoint
.BoundTo(new BasicHttpBinding())
.At(FileServiceAddress))));
}
.svc标记
<%@ ServiceHost
Language="C#"
Debug="true"
Service="FileService"
CodeBehind="FileService.svc.cs"
Factory="Castle.Facilities.WcfIntegration.DefaultServiceHostFactory,
Castle.Facilities.WcfIntegration" %>
但是,当我尝试调试/运行此解决方案时,它不会解析端点。如果我取出.Hosted()并替换为我安装的每个服务的.AddBaseAddress(...),那么它似乎正常工作?!但这肯定是错误的行为?并复制一个基地址?当我在IIS中部署它来处理基地址和端口的绑定时,这不会正确注册吗?
我缺少什么?在设施中注册WCF服务的正确方法是什么?
非常感谢!
更新:经过调整后,这可行,但为什么?我没有指定任何配置,但端点是否可用?
container
.Register(Component.For<IFileService>()
.ImplementedBy<FileService>()
.Named("FileService")
.LifeStyle.PerWcfOperation());