我已经构建了一个托管 WCF 服务的 ASP.NET MVC 3 应用程序。执行实际工作的服务类驻留在类库中。我正在尝试使用 Windsor WCF 设施根据服务请求进行连接。
这是我的温莎集装箱工厂:
public class WindsorContainerFactory
{
private static IWindsorContainer container;
private static readonly object sync = new Object();
public static IWindsorContainer Current()
{
if(container == null) {
lock (sync)
{
if (container == null)
{
container = new WindsorContainer();
container.Install(new ControllerInstaller());
container.Install(new NHibernateSessionInstaller());
container.Install(new RepositoryInstaller());
container.Install(new ServiceInstaller());
}
}
}
return container;
}
}
在 Global.asax 中,我调用 WindsorContainerFactory.Current() 一次以保证工厂正在建造:
protected void Application_Start()
{
WindsorContainerFactory.Current();
ControllerBuilder.Current.SetControllerFactory(typeof(WindsorControllerFactory));
...
我通过以下课程安装我的服务:
public class ServiceInstaller : IWindsorInstaller
{
public void Install(Castle.Windsor.IWindsorContainer container, Castle.MicroKernel.SubSystems.Configuration.IConfigurationStore store)
{
container.Kernel.AddFacility<WcfFacility>();
container.Kernel.Register(
Component
.For<ICustomerService>()
.ImplementedBy<CustomerService>()
.Named("CustomerService"));
}
}
然后我在项目中添加了一个新的 WCF 服务,删除了文件后面的代码并修改了 svc 标记,如下所示:
<%@ ServiceHost Language="C#" Debug="true"
Factory="Castle.Facilities.WcfIntegration.DefaultServiceHostFactory,
Castle.Facilities.WcfIntegration" Service="CustomerService" %>
如您所见,windsor 中还安装了其他组件(存储库、控制器等),但这似乎运行良好。
我的问题是,WCF 客户端(控制台应用程序)收到错误: HttpContext.Current 为空。PerWebRequestLifestyle 只能在 ASP.Net 中使用
客户端代码:
CustomerServiceClient c = new Services.Customers.CustomerServiceClient();
CustomerResponse resp = c.GetCustomerBySurname("Lolman");
c.Close();
谁能指出我正确的方向?先感谢您!