1

我的 Web 应用程序中有一个 HttpApplication (Global.asax),我使用它来捕获和记录未处理的异常并设置 WebFormURLRouting。这一切都有效,但是我想将此代码移动到我的应用程序框架中(即不在 Global.asax.cs 中)

我刚刚尝试在框架中创建一个 HttpApplication 类,但似乎我无法覆盖事件?无论如何,我相信我可以使用 HttpModule 来使用这些事件,这样做:

1) 完全消除对 Global.asax 的需求?

2)这种影响如何扩大,即最终在网络农场上运行应用程序

3) 我有 HttpHandlers 来处理文件上传和文件下载等其他事情,是否应该使用多少个 HttpModule/HttpHandlers 或者应该以某种方式组合这些以减少开销?

任何意见表示赞赏

4

2 回答 2

3

在 HTTP 模块中侦听您从 Global.asax 中知道的事件就像在模块的 Init 方法中连接到 HttpApplication 实例的事件一样简单。你不能覆盖 HttpApplication 的方法,你应该听它的事件。

至于您的其他问题:1)是的,在我的许多网络项目中,我们不使用 Global.asax

2)这并不真正影响放大。对于场中的每个 Web 服务器,您需要正确连接 HTTPModule。但由于这是在 web.config 中完成的,它应该已经存在。

3) 简短回答:否。对于 httphandler,它们是根据传入的 http 请求文件扩展名和/或路径和 HTTP 方法来选择和运行的。在选择特定处理程序成为性能问题之前,您确实需要很多这些。对于 HttpModules,您可以选择在每次请求时运行一些代码,显然,如果该代码需要时间来运行,它会影响性能。但花时间的是你的代码,而不是它通过 http 模块运行的事实。

于 2009-08-16T08:51:46.300 回答
1

您可以在您的框架中创建您的应用程序类,并在每个应用程序中从它继承。因此,您将在框架中拥有所有句柄。
答案:

  1. 您可以避免使用 Application 类,但为此添加处理程序不是一个好主意。
  2. 处理程序的数量通常不会影响可扩展性。但它确实会影响可维护性
  3. 由于#2,保持处理程序的数量很少。
于 2009-08-16T09:15:56.740 回答