我在Blazor Server应用程序中使用Entity Framework访问SQL Server数据库中的数据。该应用程序在IDE中针对SQL Server数据库运行良好,但当我部署到运行IIS 10的测试Web服务器时,它会一直工作,直到从数据库中提取数据,此时它会在浏览器中报告“服务不可用”,并且我在服务器上的事件日志中发现错误,内容如下:
ISAPI向其工作进程报告了不正常的情况。因此,为应用程序池“DefaultAppPool”提供服务的进程ID为“10940”的工作进程已请求回收。
我已经检查了WAS类型事件的事件日志,没有任何相关的内容。没有任何描述原因的错误可见。
这是进程终止后我在浏览器中看到的内容:
我找不到导致解决方案的原因。我可以在它将触发此的点处中断,如果我跳过所有后续代码,Web服务器将保持运行。
这两行代码可以执行,如果从第二行返回,将导致终止:
Account? account = _accountManagerService.GetAccount(Account);
AspnetUser? user = _accountManagerService.GetUser(Account);
在这些方法中,使用如下代码行访问DB:
account = context.Accounts.SingleOrDefault(c => c.AccountName.Equals(accountID));
如果我跳过对DBContext的调用,应用程序将继续存在;如果我进行足够多的调用--不是很多,大约2到5次--最终应用程序将在从代码返回后终止。
这些调用确实起作用,并且返回有效的数据,事实上,整个进程已经运行并返回了正确的数据,但是一旦完成,进程就会终止,原因不明。
当我从SQL Server中提取数据时,为什么会出现这种情况?我该如何解决它?我在Google上搜索了一天多,但没有找到解决这个问题的方法。我搜索了事件日志,但没有结果。我收集了日志,但没有任何结果。
如果我通过EF实体之一访问数据,将导致这种情况。如果我不访问数据,站点将保持活动状态。
它可以在开发Web服务器上工作,但在部署到实际Web服务器时不能。
我在这里遗漏了什么,我需要做些什么来确定根本原因,从而有希望找到解决方案?
我已经查看了日志,观看了代码执行,搜索了谷歌,摆弄了应用程序池设置,减少了数据上下文拉取的数据量,几乎所有我能想到的。
我还对一个完全独立的SQL Server示例进行了测试,Web服务器的行为没有任何变化。我使用SQL Server身份验证,并在没有任何变化的情况下打开和关闭“集成安全性”。
1条答案
按热度按时间ipakzgxi1#
在尝试了我能想到的所有方法数小时后,我决定在应用程序池高级设置上切换启用32位应用程序。这似乎解决了问题,我的应用程序现在在通过实体框架访问SQL Server数据库后仍可运行。