2

WCFファシリティの構成に関する多数のCastleWindsorの投稿を調査した後、次の構成を作成しました。

これはIISでホストされます。

私が行った仮定は次のとおりです。

1)IISでこれをホストしているので、「。Hosted()」拡張子が必要です。「ベースアドレス」はWebサーバーによって解決されます。他のアプリケーションでは、セルフホスティング(Windowsサービスやコンソールアプリなど)で「.AddBaseAddress( " http:// etc ")」を使用しましたが、この場合は必須ではないことを理解しています。

2)コンポーネントは、.svcマークアップの「Service」値に沿った「.Named(...)」である必要があります。

3)Webサーバーアドレスに加えて「.At(...)」が登録されるため、「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