私は大規模な NHibernate のアップグレードをほぼ完了し、最終的に Castle のアップグレードにもなりました。ServiceSecurityContext.Current が null であるというエラーが発生するため、ASP.NET Web サイトが実行されないことを除けば、ほぼ完了です。私は間違っている可能性があります (私はまだ Castle に慣れていません)、WCF 機能の登録に加えた変更と関係があると思います。
以前 (ServiceLocator.cs というクラスに) 次のようなコードがありました。
/// <summary>
/// Register the WindsorServiceHostFactory with the container
/// </summary>
public static void RegisterWcfServer()
{
RegisterWcfFacility();
DefaultServiceHostFactory.RegisterContainer(Container.Kernel);
}
RegisterWcfFacility() メソッドは次のようになります。
private static void RegisterWcfFacility()
{
IFacility[] facilities = Container.Kernel.GetFacilities();
bool hasWcfFacility = false;
foreach (IFacility facility in facilities)
{
if (facility.GetType() != typeof (WcfFacility))
continue;
hasWcfFacility = true;
break;
}
if (!hasWcfFacility)
Container.AddFacility<WcfFacility>();
}
その後、これを次のように変更しました (明らかにコンパイルしようとしていたため、DefaultServiceHostFactory には「RegisterContainer」メソッドがなくなりました)。
/// <summary>
/// Register the WindsorServiceHostFactory with the container
/// </summary>
public static void RegisterWcfServer()
{
RegisterWcfFacility();
// see: http://stackoverflow.com/questions/9729395/castlewindsor-3-0-and-defaultservicehostfactory-registercontainer
// obsolete:
//DefaultServiceHostFactory.RegisterContainer(Container.Kernel);
Container.Register(Component.For<DefaultServiceHostFactory>());
}
そして、私の新しいバージョンの "RegisterWcfFacility()" は次のようになります。
private static void RegisterWcfFacility()
{
var facilities = Container.Kernel.GetFacilities();
var hasWcfFacility = facilities.Any(facility => facility.GetType() == typeof (WcfFacility));
if (!hasWcfFacility)
Container.AddFacility<WcfFacility>();
}
私は主に次のようなことを尋ねるためにこれを投稿しています:私は完全に間違ったツリーを吠えていますか? この施設を登録する方法は合法ですか? 私の ServiceSecurityContext.Current が null である理由を説明できますか? (そして、はい、私はこれを見ました):
https://groups.google.com/forum/#!topic/castle-project-devel/VOQKW4XlvLM%5B1-25%5D
アドバイスをありがとう。乾杯、-デイブ