救命! - 在application_startup和容器创建之前执行的DefaultServiceHostFactory

时间:2011-04-18 15:49:37

标签: wcf iis castle-windsor castle was

我正在将WCF工具用于WAS中托管的服务(iis7中的net.tcp绑定),并且仅在冷应用程序启动时(即尚未运行)遇到奇怪的问题。

首次实例化我的容器时,应执行以下语句。

DefaultServiceHostFactory.RegisterContainer(c.Kernel);

请求服务时,我的WCF跟踪文件

中出现以下异常

内核为空,你忘了调用DefaultServiceHostFactory.RegisterContainer()

问题似乎是ServiceHostFactory在创建容器之前尝试创建服务主机的实例。

注意:

  • Application_Start 执行
  • 之前发生此异常
  • 如果应用程序正在运行(并且容器已初始化),则服务将按预期运行。可以通过HTTP访问相应的IIS站点或从Visual Studio启动调试会话来启动应用程序。

重新创建问题的步骤

  • 发出IISReset以关闭所有IIS应用程序池。
  • 调用有问题的服务
  • WCF追踪吐出:

    System.ServiceModel.ServiceActivationException:由于编译期间发生异常,无法激活服务'/abcd.svc'。异常消息是:调用目标抛出异常.. ---> System.Reflection.TargetInvocationException:调用目标抛出了异常。 ---> System.ArgumentNullException:内核为null,你忘了调用DefaultServiceHostFactory.RegisterContainer()吗? 参数名称:内核 在Castle.Facilities.WcfIntegration.WindsorServiceHostFactory`1..ctor(IKernel kernel) 在Castle.Facilities.WcfIntegration.DefaultServiceHostFactory..ctor()

1 个答案:

答案 0 :(得分:1)

问题是global.asax及其所有方法仅与HTTP处理有关。顺便说一句。 global.asax中的类派生自HttpApplication,这应该非常清楚。一旦在WAS中托管应用程序(这是基于net.tcp的绑定的情况),您就无法使用这些方法。尝试使用类似AppInitialize的内容。