首页 > 解决方案 > 应用程序池 - 启用 32 位应用程序 = false 生成堆栈溢出错误

问题描述

如果将其设置为 True - IIS > Application Pools > DefaultApplicationPool > Enable32BitApplication 那么应用程序工作正常。但是,如果将其设置为 False,则应用程序正在运行,但在记录后,它会显示 StackOverflowException。

.Net 框架:4.0

为什么它在 32bit-true 上正常运行并且无法运行 -false?信息是否足够?如果需要,我可以提供更多。

我尝试了很多解决方案来解决 - 框架注册、ISAP、处理程序、ISAP-CGi 限制、在 x64 上构建应用程序,但它没有解决。

观察:当我查看进程探索时,它从 SYSWOW64 加载 dll。

你能帮忙吗,那对我们来说会很棒。

标签: iisstack-overflow32bit-64bitwow64syswow64

解决方案


我们最近遇到了同样的问题,由于我们引入的一项更改显着增加了在某些数据驱动的自动生成代码中调用的方法数量,巧合的是,驱动代码生成的数据显着增加。

我们的客户在将 Enable32BitApplication 设置为 false 的情况下在 IIS 下运行我们的组件时遇到了同样的问题。

原来 IIS 在 2008R2 和更高版本上创建的线程的默认堆栈大小现在更小了。请参阅: https: //support.microsoft.com/en-us/help/932909/by-default-the-maximum-stack-size-of-a-thread-that-is-created-in-a-nat

我们能够通过让我们的代码显式创建一个堆栈大小为 1MB 的线程(这是 IIS 外部的默认值)来解决这个问题。我们的组件是用 C#/.NET 编写的。

如果您无法以编程方式更改堆栈大小,您仍然可以editbin按照此处所述使用:https ://blogs.msdn.microsoft.com/tom/2008/03/31/stack-sizes-in-iis-影响-asp-net/


推荐阅读