端点未找到; WCF设施,Castle Windsor 3.0,WCF 4

时间:2012-04-30 11:48:51

标签: c# wcf iis castle-windsor

在研究了众多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中部署它来处理基地址和端口的绑定时,这不会正确注册吗?

enter image description here enter image description here

我缺少什么?在设施中注册WCF服务的正确方法是什么?

非常感谢!

更新:经过调整后,这可行,但为什么?我没有指定任何配置,但端点是否可用?

        container
            .Register(Component.For<IFileService>()
                          .ImplementedBy<FileService>()
                          .Named("FileService")
                          .LifeStyle.PerWcfOperation());

0 个答案:

没有答案