我几乎完成了一次大的 NHibernate 升级,最终也成为了 Castle 升级。除了 ASP.NET 网站无法运行之外,我已经快到了,因为我在 ServiceSecurityContext.Current 为空时遇到错误。我可能是错的(我还是 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 为空?(是的,我已经看到了):
https://groups.google.com/forum/#!topic/castle-project-devel/VOQKW4XlvLM%5B1-25%5D
感谢您的任何建议。干杯,-戴夫