0

我正在将 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: Kernel was null, 你忘了调用 DefaultServiceHostFactory.RegisterContainer() 吗?参数名称:Castle.Facilities.WcfIntegration.WindsorServiceHostFactory 的内核`1..ctor(IKernel kernel) at Castle.Facilities.WcfIntegration.DefaultServiceHostFactory..ctor()

4

1 回答 1

1

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

于 2011-04-21T10:20:56.053 回答