2017-08-14 42 views
0

我使用ASP.NET MVC Bundling捆绑了我的JavaScript文件。当我检查并检查网络在我的浏览器中,我看到500 Internal Server Error当我的包想要加载。 响应:500 ASP.NET MVC包中的内部服务器错误

在上一次异步操作完成之前,在此上下文上开始第二个操作。在调用此上下文中的另一个方法之前,请使用'await'来确保任何异步操作已完成。任何实例成员不保证是线程安全的。

我知道这个错误发生在我的GenerateIdentityAsync方法中。 我使用ASP.NET 2.0的身份,所以我在Owin启动类使用它从OnValidateIdentity

ApplicationManager.cs

public class ApplicationManager : IApplicationManager 
{ 
    // more code 
    public Func<CookieValidateIdentityContext, Task> OnValidateIdentity() 
    { 
     return SecurityStampValidator.OnValidateIdentity<AppUserManager, User, Guid> 
     (TimeSpan.FromSeconds(0), GenerateIdentityAsync, identity => Guid.Parse(identity.GetUserId())); 
    } 

    public async Task<ClaimsIdentity> GenerateIdentityAsync(AppUserManager manager, User user) 
    { 
     var identity = 
     await CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie).ConfigureAwait(true); 
    identity.AddEnumClaim("lastSeenMode", user.LastSeenMode); 
    identity.AddClaim(new Claim("emailAddress", user.Email)); 
    identity.AddClaim(new Claim("displayName", user.DisplayName)); 
    identity.AddClaim(new Claim("lastseen", user.LastSeen.ToString())); 
    return identity; 
    } 
} 

startup.cs

app.UseCookieAuthentication(new CookieAuthenticationOptions() 
    { 
     Provider = new CookieAuthenticationProvider() 
     { 
      OnValidateIdentity = SmObjectFactory.Container.GetInstance<IAppUserManager>().OnValidateIdentity(), 
     } 
    }); 

堆栈

[NotSupportedException: A second operation started on this context before a previous asynchronous operation completed. Use &#39;await&#39; to ensure that any asynchronous operations have completed before calling another method on this context. Any instance members are not guaranteed to be thread safe.] 
System.Data.Entity.Internal.ThrowingMonitor.EnsureNotEntered() +4906656 
System.Data.Entity.Internal.Linq.InternalSet`1.FindAsync(CancellationToken cancellationToken, Object[] keyValues) +73 
System.Data.Entity.DbSet`1.FindAsync(CancellationToken cancellationToken, Object[] keyValues) +35 
System.Data.Entity.DbSet`1.FindAsync(Object[] keyValues) +26 
Microsoft.AspNet.Identity.EntityFramework.EntityStore`1.GetByIdAsync(Object id) +49 
Microsoft.AspNet.Identity.EntityFramework.&lt;GetUserAggregateAsync&gt;d__6c.MoveNext() +201 
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 
Microsoft.AspNet.Identity.CultureAwaiter`1.GetResult() +59 
Microsoft.AspNet.Identity.&lt;GetSecurityStampAsync&gt;d__42.MoveNext() +302 
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 
Microsoft.AspNet.Identity.CultureAwaiter`1.GetResult() +59 
Microsoft.AspNet.Identity.&lt;CreateAsync&gt;d__0.MoveNext() +860 
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 
System.Runtime.CompilerServices.ConfiguredTaskAwaiter.GetResult() +28 
App.ServiceLayer.UserService.&lt;GenerateIdentityAsync&gt;d__16.MoveNext() in C:\Repository\Barnamenevis.ir\App.ServiceLayer\UserService\AppUserManager.cs:127 
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 
Microsoft.AspNet.Identity.CultureAwaiter`1.GetResult() +59 
Microsoft.AspNet.Identity.Owin.&lt;&lt;OnValidateIdentity&gt;b__1&gt;d__4.MoveNext() +1581 
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 
System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) +25 
Microsoft.Owin.Security.Cookies.&lt;AuthenticateCoreAsync&gt;d__2.MoveNext() +2153 
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 
Microsoft.Owin.Security.Infrastructure.&lt;BaseInitializeAsync&gt;d__0.MoveNext() +571 
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 
Microsoft.Owin.Security.Infrastructure.&lt;Invoke&gt;d__0.MoveNext() +255 
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 
Microsoft.AspNet.Identity.Owin.&lt;Invoke&gt;d__0.MoveNext() +404 
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 
Microsoft.AspNet.Identity.Owin.&lt;Invoke&gt;d__0.MoveNext() +404 
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 
Microsoft.AspNet.Identity.Owin.&lt;Invoke&gt;d__0.MoveNext() +404 
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 
Microsoft.AspNet.Identity.Owin.&lt;Invoke&gt;d__0.MoveNext() +404 
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 
Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.&lt;RunApp&gt;d__5.MoveNext() +182 
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 
Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.&lt;DoFinalWork&gt;d__2.MoveNext() +180 
Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.StageAsyncResult.End(IAsyncResult ar) +69 
Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.EndFinalWork(IAsyncResult ar) +64 
System.Web.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +380 
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&amp; completedSynchronously) +155 

也我测试ConfigureAwait(true)ConfigureAwait(false)和没有ConfigureAwait但没有解决这个问题。

更新
此外,当我使用EF Profiler,它说使用单个对象上下文在多线程可能是一个错误。

此警报只是为了同一个表存在:

[Admin].[UserClaims] 
[Admin].[UserLogin] 
[Admin].[Roles] 
[Admin].[UserRoles] 
[Admin].[Users] 

我怎样才能解决这个问题呢?

更多的代码在Gist

+1

您某处在同一时间启动了两个对数据库的异步请求。使用await检查你错过的地方。 –

+0

我不会错过使用'await'。 –

+0

你可以添加post异常调用堆栈吗? –

回答

2

我不是由我自己使用StructureMap,但我发现,对于MVC使用StructureMap与MVC最好的办法是安装StructureMap.MVC5.Update包(这对最新StructureMap版)。
检查小intro如何使用它。或this文章。

将您现有的所有注册码移动到由包安装的DefaultRegistry.cs中。现在不要使用HybridHttpOrThreadLocalScoped()进行服务注册。

相关问题