34

我想为我当前托管在 IIS7 中的 WCF 应用程序使用 netTcpBinding,这意味着将其配置为使用 WAS。这是相当直接的,但是,我的应用程序之前使用了 global.asax 文件中的 Application_Start 事件。我不需要访问 httpContext(我知道在 IIS7 中已经删除了访问权限),但是我仍然想挂钩到 start 或 init 方法?

在 WAS 中托管应用程序时是否存在与 IIS7 相对的等效项?

使用经典模式不是一个选项(同样我对 httpcontext 不感兴趣,这似乎只在使用 http 绑定时才有效) - 我已经看到了一个将静态类放入 app_code 文件夹中的示例,它看起来像一个可怕的黑客攻击。

4

2 回答 2

26

我相信AppInitialize()这是您正在寻找的方法。这是一篇关于使用它在 WAS 托管的 WCF 服务中初始化 Castle Windsor 的文章:

Castle Windsor 和非 HTTP 协议 WCF 服务

这篇文章的本质是,在 WAS 中不会使用Application_Start()which 不会被调用:

protected void Application_Start(object sender, EventArgs e)
{
   var container = new WindsorContainer("ioc.config");
   DefaultServiceHostFactory.RegisterContainer(container.Kernel);
}

利用:

public class InitialiseService
{
   /// <summary>
   /// Application initialisation method where we register our IOC container.
   /// </summary>
   public static void AppInitialize()
   {
      var container = new WindsorContainer("ioc.config");
      DefaultServiceHostFactory.RegisterContainer(container.Kernel);
   }
}

引用马特的话:

我承认我花了一段时间更详细地查看主机工厂,希望将DefaultServiceHostFactory. 但是,似乎有一个更简单的解决方案,那就是利用很少记录的 AppInitialize 方法。如果您创建一个类(任何类),将其放入App_Code项目中的 ASP.NET 文件夹并为它提供如下定义的方法签名,这个小宝贝将在您想要的时候被解雇。然后你可以在那里初始化你的 IoC 容器。

于 2010-03-16T12:11:04.760 回答
13

AppInitialize 是初始化服务的有效方法。但是还有一些其他方法可能对您更有效,它们在本文中进行了描述:如何初始化托管的 WCF 服务

注意:原始链接消失了。上面的链接指向archive.org 上的副本。

于 2011-12-08T18:40:32.490 回答