加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

使用FindByIdAsync时取消ASP.Net核心标识

发布时间:2020-12-16 07:11:07 所属栏目:asp.Net 来源:网络整理
导读:我有一个小项目,它使用Asp.Net核心身份框架和EF Core. 一个函数调用UserManager.FindByIdAsync(id)并返回正确的对象.但是,它仅在应用程序启动后的几分钟内工作.只要服务器忙,它就可以正常工作,但只要应用程序空闲超过1-2分钟,请求就会失败. 它失败了: *Oper
我有一个小项目,它使用Asp.Net核心身份框架和EF Core.
一个函数调用UserManager.FindByIdAsync(id)并返回正确的对象.但是,它仅在应用程序启动后的几分钟内工作.只要服务器忙,它就可以正常工作,但只要应用程序空闲超过1-2分钟,请求就会失败.

它失败了:

*OperationCanceledException: The operation was canceled.
System.Threading.CancellationToken.ThrowOperationCanceledException()*

stacktrace看起来像这样:

*System.Threading.CancellationToken.ThrowOperationCanceledException()
Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore.FindByIdAsync(string userId,CancellationToken cancellationToken)
Microsoft.AspNetCore.Identity.UserManager.FindByIdAsync(string userId)
MyProject.Areas.Admin.ControllerServices.UserService+<GetUser>d__11.MoveNext() in UserService.cs*

我还在登录,因为其他页面工作正常.
对EF context.Users.FindAsync(new object [] {id})的简单调用将按预期工作,但包含FindByIdAsync的下一行将失败.

所有这些在开发环境中都很完美,当在WS 2008 R2上运行IIS的服务器上安装应用程序时会发生错误.回收应用程序池将使其再次工作,直到它再次闲置几分钟.

我注意到当’Connection id’0HL5E91K33IIQ“重置”时.正在记录,然后应用程序开始失败.在此之前,它的工作原理.

FindByIdAsync不是唯一失败的标识函数,许多其他函数失败并出现相同的错误.

我错过了什么?

解决方法

我将回答我自己的问题,希望这将有助于将来的其他人.

对我来说,这一切都归结为注入服务的生命周期.UserManager依赖于IHttpContextAccessor(这是CancellationToken的来源),并且当生命周期不匹配时它的行为不正确.IHttpContextAccessor作为Singleton服务添加,而UserManager作为作用域服务添加.我使用UserManager的服务被添加为Singleton服务.将此更改为Scoped会使错误消失.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读