【问题标题】:Prevent ASP.Net AppDomain Unload防止 ASP.Net AppDomain 卸载
【发布时间】:2011-01-07 02:01:01
【问题描述】:

如here 所述,我正在编写一个在 ASP.Net AppDomain 中运行的 WinForms GUI。

但是,只要 Web.config 或 bin 文件夹被修改,ASP.Net 就会卸载 AppDomain,整个程序就会死掉。

有什么办法可以防止这种情况发生吗?

2nd 编辑:在我的 EXE 中,我通过调用 ApplicationHost.CreateApplicationHost 创建 AppDomain,并在我的 EXE 中传递一个启动 GUI 的类型。

编辑:我已经知道这是一个可怕的设计。
有没有人有理智的选择?

该程序在类型化数据集中跟踪非营利组织的帐户。
它需要通过电子邮件发送账单,我使用 ASPX 文件来生成电子邮件。 (我宁愿不改变它,除非有一个非常好的替代方案;模板已经写好了)

电子邮件模板是部署在子文件夹中的 ASPX 文件;该子文件夹成为 ASP.Net 应用程序,并在其 bin 目录中包含可执行文件,以便 ASP.Net 将我的所有代码加载到其 AppDomain 中。

UI 和 ASPX 文件都必须访问类型化的数据集,我不想从 SQL Server 下载数据两次

【问题讨论】:

  • 您需要认真的设计审查。你不应该这样做。
  • 我意识到这是一个糟糕的设计,但我还没有找到任何替代方案。 (还没有?)
  • 明智的选择:XML 模板 + XSLT 用于渲染?更好的是,试试 CodeSmith。

标签: c# asp.net winforms appdomain


【解决方案1】:
【解决方案2】:

我注意到您的第一个问题是 10 月 29 日。我知道它在开发轨道上还很遥远......

但出于好奇:为什么不使用T4 templates?

它简单、快速,您可以像 ASPX 页面一样进行编辑,并且它可以在任何 AppDomain 中运行。

【讨论】:

  • 这听起来很有趣。我可以随程序分发模板并在运行时运行它们吗?另外,我可以在编辑模板时获得 ASP.Net 风格的 IntelliSense 吗? (在 Visual Studio 中)
  • 是的,T4 模板是简单的文本文件。不,不是本地的,就是这样。不过,来自第 3 方的 T4 有智能感知。
  • 但是,T4 模板需要 Visual Studio 才能执行;我不想在我的最终用户的机器上安装 Visual Studio。另外,我使用母版页,我不知道它们移植到 T4 有多容易
  • 不,T4 不需要运行 Visual Studio。但是,就像我说的......它在开发轨道上还很遥远。
  • 不是吗?你能给我一个来源吗?
【解决方案3】:

这是 ASP.Net 的核心 - 如果 web.config 被更改,AppDomain 将被回收。如果 machine.config 更改,所有 AppDomains 将被回收。

但是,您可以禁用此功能。在 IIS 控制面板中为您感兴趣的应用程序池开启“配置更改时禁用回收”。

alt text http://img138.imageshack.us/img138/9938/iisdisablerecycle.png

【讨论】:

  • 阅读问题;我没有使用 IIS。有没有办法在 ASP.Net 本身中配置它?
  • 我在问题中看不到任何表明是否使用 ISS 的内容。作为记录,如果不通过 IIS,您究竟是如何启动 ASP.NET 应用程序域的?
  • 你是对的;那只是在链接的问题中。我通过在我的 EXE 中调用 ApplicationHost.CreateApplicationHost 来启动 ASP.Net AppDomain。
  • SLaks - 您所追求的功能在 System.Web.HttpRuntime 中。我不确定你是否会修改它,但你可以尝试这个线程中的方法:forums.iis.net/t/1121400.aspx
  • 我查看了 HttpRuntime 内部,但没有看到类似的东西。我会看看线程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
  • 2012-11-06
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
相关资源
最近更新 更多