記録のために、これが私が使用した構文であり、最終的に機能しました。(より多くのキャッスルのドキュメントが必要であることを考えると、動作する構文の例はどれも問題ないと思います)!
Container.Kernel.Register(Component.For(serviceType)
.LifeStyle.Is(lifestyle)
.DependsOn(new
{
clientModel = new DefaultClientModel
{
Endpoint = WcfEndpoint
.FromConfiguration(serviceType.Name.Substring(1) + "Client")
}
}));
また、記録のために、 ServiceSecurityContext.Current が null であるという問題は、別の理由で発生していました。
構成ファイルに変更を加えましたが、これは重要ではないと考えていました (特定のクラスが廃止されたように見えたため) が、非常に重要であることが判明しました (これらのクラスは非常に必要とされていました)。
城の構成ファイルの「コンポーネント」ノードは次のようになります。
<component id="FederatedServiceHostBuilder"
service="Castle.Facilities.WcfIntegration.IServiceHostBuilder`1[[Castle.Facilities.WcfIntegration.DefaultServiceModel,
Castle.Facilities.WcfIntegration, Version=3.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc]], Castle.Facilities.WcfIntegration"
type="OurCustomer.Framework.Service.Security.FederatedServiceHostBuilder, OurCustomer.Framework.Service"
lifestyle="Transient">
<interceptors>
<interceptor>${InstrumentationInterceptor}</interceptor>
</interceptors>
</component>
「FederatedServiceHostBuilder」クラス:
/// <summary>
/// The default implementation of <see cref="IServiceHostBuilder{M}"/>.
/// </summary>
public class FederatedServiceHostBuilder : AbstractServiceHostBuilder<DefaultServiceModel>
{
/// <summary>
/// Constructs a new <see cref="FederatedServiceHostBuilder"/>.
/// </summary>
/// <param name="kernel">The kernel.</param>
public FederatedServiceHostBuilder(IKernel kernel)
: base(kernel)
{
}
#region AbstractServiceHostBuilder Members
/// <summary>
///
/// </summary>
/// <param name="model"></param>
/// <param name="serviceModel"></param>
/// <param name="baseAddresses"></param>
/// <returns></returns>
protected override ServiceHost CreateServiceHost(ComponentModel model,
DefaultServiceModel serviceModel,
params Uri[] baseAddresses)
{
return CreateServiceHost(model, GetEffectiveBaseAddresses(serviceModel, baseAddresses));
}
/// <summary>
///
/// </summary>
/// <param name="model"></param>
/// <param name="baseAddresses"></param>
/// <returns></returns>
protected override ServiceHost CreateServiceHost(ComponentModel model,
params Uri[] baseAddresses)
{
return new FederatedServiceHost(model, baseAddresses);
}
/// <summary>
///
/// </summary>
/// <param name="serviceType"></param>
/// <param name="baseAddresses"></param>
/// <returns></returns>
protected override ServiceHost CreateServiceHost(Type serviceType,
params Uri[] baseAddresses)
{
return new FederatedServiceHost(serviceType, baseAddresses);
}
#endregion
}
そして (重要な) FederatedServiceHost クラス:
public class FederatedServiceHost : Castle.Facilities.WcfIntegration.DefaultServiceHost
{
/// <summary>
///
/// </summary>
/// <param name="model"></param>
/// <param name="baseAddresses"></param>
public FederatedServiceHost(ComponentModel model, params Uri[] baseAddresses)
: base(model, baseAddresses)
{
}
/// <summary>
///
/// </summary>
/// <param name="serviceType"></param>
/// <param name="baseAddresses"></param>
public FederatedServiceHost(Type serviceType, params Uri[] baseAddresses)
: base(serviceType, baseAddresses)
{
}
/// <summary>
/// <remarks />
/// </summary>
protected override void OnOpening()
{
FederatedServiceCredentials.ConfigureServiceHost(this);
base.OnOpening();
}
}
つまり、「FederatedServiceCredentials.ConfigureServiceHost(this)」行が欠落していたため、ServiceSecurityContext.Current が null になりました。