【问题标题】:Referenced assembly won't load in new thread on IIS 7引用的程序集不会在 IIS 7 的新线程中加载
【发布时间】:2010-05-25 19:44:13
【问题描述】:

我有一个过程,其中用户将文件上传到网站,然后该文件被处理并上传到数据库中。验证文件的过程可能需要几分钟,因此一旦文件上传,我就会创建一个新线程并在第二个线程上进行处理。这在我的本地机器上很好用,但在我的 IIS 7 测试服务器上根本不起作用。

经过一番调查,我发现问题是该进程正在尝试加载对 Castle 的引用,但找不到 DLL。我的 bin 中有 Castle DLL 的副本,它可以在我的应用程序的其他地方工作。我运行了 Fuslog,发现它试图从错误的位置加载城堡。它正在尝试从 c:/windows/system32/inetsrv/ 加载。

似乎在 IIS 7 下,第二个线程正在不同的上下文中执行。

所以问题是我该怎么做才能让它在应用程序 BIN 文件夹中找到 Castle?

【问题讨论】:

    标签: c# asp.net multithreading iis-7 assemblies


    【解决方案1】:

    我对 IIS 不是很熟悉,但我的猜测是由于某种原因工作目录发生了变化。 一种可能性是将工作目录更改回 bin 文件夹。 另一种可能性是订阅 AppDomain.AssemblyResolve 事件,当 CLR 无法加载程序集时,该事件将被调用 - 在事件处理程序中,您可以从 dll 加载程序集并返回它。

    【讨论】:

    • 你是对的。看起来 IIS 7 处理线程的方式可能与 IIS 6 不同,并且线程是在 Web 应用程序进程之外执行的。我将尝试在 IIS 7 经典模式下运行该应用程序,看看是否能解决我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多