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());