2

在研究了大量关于配置 WCF 设施的 Castle Windsor 帖子后,我编写了以下配置。

这将托管在 IIS 中。

我所做的假设是:

1) 我需要“.Hosted()”扩展名,因为我在 IIS 中托管它,“基地址”将由 Web 服务器解析。在其他应用程序中,我在自托管(Windows 服务或控制台应用程序等)时使用了“.AddBaseAddress(” http://etc “)”,但我的理解是在这种情况下不需要这样做。

2) 组件必须是“.Named(...)”,符合 .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());
4

0 回答 0