IIS 7 工作进程与共享应用程序池挂起.两个站点之一工作正常



我有两个网站共享一个应用程序池.Net V4.0 Integrated
一个站点ASP.NET MVC 4,另一个站点VB.NET Website

它们通过web.config中包含以下内容来共享登录信息和服务器会话

<authentication mode="Forms">
  <forms loginUrl="http://www.example.com/login.aspx" name=".MYCUSTOMAUTH" protection="All" path="/" domain=".example.com" timeout="30" />
</authentication>
<httpCookies domain=".example.com" />
<sessionState mode="StateServer" stateConnectionString="tcpip=loopback:42424" />
<machineKey validationKey="XXX" decryptionKey="XXX" validation="SHA1" />

我还使用以下方法在 global.asax Application_Start中设置应用程序名称:

FieldInfo runtimeInfo = typeof(HttpRuntime).GetField("_theRuntime", BindingFlags.Static | BindingFlags.NonPublic);
HttpRuntime theRuntime = (HttpRuntime)runtimeInfo.GetValue(null);
FieldInfo appNameInfo = typeof(HttpRuntime).GetField("_appDomainAppId", BindingFlags.Instance | BindingFlags.NonPublic);
appNameInfo.SetValue(theRuntime, "MyApplicationName");

位于 www.example.com 的主站点显示登录屏幕,正确登录时将创建对象会话并将用户重定向到 subdomain.example.com
问题是 Worker 线程只是无限期地挂起,使每个线程最大。当我昨晚 6:00 离开时,此设置工作正常,但当我今天早上 9:00 尝试登录时,它没有停止工作。

我重新部署了这两个站点,回收了应用程序池,删除并创建了新的应用程序池,重新启动了 ASP.NET 状态服务。一切都重新启动整个 IIS 服务,直到周日凌晨 3:00 才真正成为一个选项......
此外,即使重新启动IIS服务器可以暂时解决问题,如果问题继续存在,则无法每天执行。

此外,除非我手动结束该过程,否则服务器永远不会使连接超时,并且事件日志中不会产生错误或警告。

它们确实需要位于同一应用程序池中,以便共享会话信息如果您尝试回收应用程序池,它会立即挂起吗?

您需要确定导致其挂起的操作 - (例如,单击任一站点上的按钮登录)。为什么使用自定义身份验证而不是表单身份验证?

最新更新