什么是在IIS7中使用WAS时的global.asax Application_Start等价物

时间:2010-03-16 09:59:08

标签: wcf iis-7 global-asax was nettcpbinding

我想将netTcpBinding用于我的WCF应用程序,该应用程序当前托管在IIS7中,这意味着将其配置为使用WAS。这是相当直接的,但是,我的应用程序以前在global.asax文件中使用了Application_Start事件。我不需要访问httpContext(我理解IIS7中已经删除了访问权限),但我还是想挂钩启动或初始化方法?

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

使用经典模式不是一个选项(我再次对httpcontext不感兴趣,如果使用http绑定,这似乎只能工作) - 我已经看到了一个将静态类加入app_code文件夹的示例看起来像一个可怕的黑客。

2 个答案:

答案 0 :(得分:26)

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

  

Castle Windsor and non-HTTP Protocol WCF Services

本文的实质是,而不是使用在WAS中不会被调用的Application_Start()

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方法。如果你创建一个类(任何类),   将它放入项目的ASP.NET App_Code文件夹中并给它一个   方法签名定义如下,这个小宝贝会被解雇   确切地说你想要它。然后,您可以初始化您的IoC   容器在那里。

答案 1 :(得分:13)

AppInitialize是初始化服务的有效方法。但是有一些其他方法可能对您更有效,本文将对它们进行描述:How to Initialize Hosted WCF Services