在 IIS7 中使用 WAS 时 global.asax Application_Start 等效项是啥

Posted

技术标签:

【中文标题】在 IIS7 中使用 WAS 时 global.asax Application_Start 等效项是啥【英文标题】:what is the global.asax Application_Start equivalent when using WAS in IIS7在 IIS7 中使用 WAS 时 global.asax Application_Start 等效项是什么 【发布时间】:2011-01-28 01:01:48 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

Castle Windsor and non-HTTP Protocol WCF Services

文章的精髓在于,不用Application_Start(),它不会在WAS中被调用:

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 容器在那里。

【讨论】:

感谢您的回复。我遇到过这种情况,但轻描淡写看起来相当“hacky”......我真的不认为我必须依赖 app_code 文件夹......真的没有其他合适的替代品吗?跨度> 但似乎它被 VS Web 服务器(又名 Casini,ASP.NET 开发服务器)忽略了 @abatishchev - IIS Express 怎么样? 同理。无论服务在哪个主机下运行,我都必须开发自己的 WCF 扩展以使其正常工作。诡异的。想知道为什么没有这样的内置功能。 【参考方案2】:

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

注意:原始链接已消失。上面的链接是archive.org上的一个副本。

【讨论】:

感谢 Graham - 我没有机会查看这段代码来验证它,但与不得不依赖其他 hacky 解决方案相比,这篇文章看起来确实是一个更好的选择。 Application_Start 为整个应用程序运行一个。使用链接提到的服务工厂将为每个服务运行一次,因此您需要额外的逻辑来防止您的代码运行两次。 这个答案中提到的@grahamesd 链接未找到 404 页面即将到来 文章也可以找到here

以上是关于在 IIS7 中使用 WAS 时 global.asax Application_Start 等效项是啥的主要内容,如果未能解决你的问题,请参考以下文章

如果我使用VS2012如何在IIS7.0中托管WCF服务? [关闭]

在 IIS7 上使用 MVC3 时如何启用 gzip 压缩?

从 WAS8 迁移到 WAS9 时遇到 myFaces 错误?

尝试在IBM WAS服务器中使用Netty时无法打开输入流错误

当我在 IIS7 中托管应用程序时,未加载 CSS 和 Javascript

IIS7 中的 ***Exception 但在 Cassini 中没有