Назад | Перейти на главную страницу

Странная ошибка в SQL Server из приложения ASP.NET

Я разместил этот вопрос о переполнении стека, но безрезультатно. Здесь я уже отчаялся.

Таким образом, в нашем приложении C # ASP.NET MVC5 возникает чрезвычайно случайная ошибка (я имею в виду, что, похоже, не существует шаблона использования, предшествующего ошибке) в нашей производственной среде.

Ошибка возникает только иногда после того, как пользователь входит в систему, и вся система дает сбой и становится недоступной для всех пользователей, пока мы вручную не войдем в IIS8 и не перезапустим веб-сервер. Мы запускаем SQL Server Express 2012 SP2 в среде Windows Server 2012 с IIS.

Сообщение об ошибке выглядит следующим образом:

IndexOutOfRangeException/Account/Login
Index was outside the bounds of the array.

Трассировка стека выглядит следующим образом:

IndexOutOfRangeException·Index was outside the bounds of the array.
Raw
:0System.Data.SqlClient.SqlDataReader.CheckHeaderIsReady(Int32 columnIndex, Boolean permitAsync, String methodName) 
 :0System.Data.SqlClient.SqlDataReader.IsDBNull(Int32 i)    
 :0System.Data.Entity.Core.Common.Internal.Materialization.Shaper+ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal)   
 :0lambda_method(Closure , Shaper ) 
 :0System.Data.Entity.Core.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly(Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet)  
 :0lambda_method(Closure , Shaper ) 
 :0System.Data.Entity.Core.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper) 
 :0System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1+SimpleEnumerator+<MoveNextAsync>d__4.MoveNext() 
 :0System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)    
 :0System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)   
 :0System.Data.Entity.Internal.LazyAsyncEnumerator`1+<FirstMoveNextAsync>d__0.MoveNext()    
 :0System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)    
 :0System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)   
 :0System.Data.Entity.Infrastructure.IDbAsyncEnumerableExtensions+<FirstOrDefaultAsync>d__25`1.MoveNext()   
 :0System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)    
 :0System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)   
 :0Microsoft.AspNet.Identity.TaskExtensions+CultureAwaiter`1.GetResult()    
 :0Microsoft.AspNet.Identity.EntityFramework.UserStore`6+<GetUserAggregateAsync>d__6c.MoveNext()    
 :0System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)    
 :0System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)   
 :0Microsoft.AspNet.Identity.TaskExtensions+CultureAwaiter`1.GetResult()    
 :0Microsoft.AspNet.Identity.UserManager`2+<FindAsync>d__12.MoveNext()  
 :0System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)    
 :0System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)   
 :0Saleboat.Controllers.AccountController+<Login>d__9.MoveNext()    
 :0System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)    
 :0System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)   
 :0System.Web.Mvc.Async.TaskAsyncActionDescriptor.EndExecute(IAsyncResult asyncResult)  
 :0System.Web.Mvc.Async.AsyncControllerActionInvoker+<>c__DisplayClass37.<BeginInvokeAsynchronousActionMethod>b__36(IAsyncResult asyncResult)   
 :0System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)    
 :0System.Web.Mvc.Async.AsyncControllerActionInvoker+AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d()    
 :0System.Web.Mvc.Async.AsyncControllerActionInvoker+AsyncInvocationWithFilters+<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()    
 :0System.Web.Mvc.Async.AsyncControllerActionInvoker+AsyncInvocationWithFilters+<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()    
 :0System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) 
 :0System.Web.Mvc.Async.AsyncControllerActionInvoker+<>c__DisplayClass21+<>c__DisplayClass2b.<BeginInvokeAction>b__1c() 
 :0System.Web.Mvc.Async.AsyncControllerActionInvoker+<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult)

Эта ошибка возникает только на нашем живом сервере / базе данных и не может быть намеренно воспроизведена, нам в значительной степени нужно дождаться ее возникновения и просмотреть исключение, обнаруженное Bugsnag.

РЕДАКТИРОВАТЬ

Вот код, выполняемый при входе в систему:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            var user = await UserManager.FindAsync(model.UserName, model.Password);
            if (user != null)
            {
                var userId = UserManager.FindByName(model.UserName).Id;
                int companyId = db.Users.Find(userId).CompanyId;
                await SignInAsync(user, model.RememberMe);
                return RedirectToLocal(returnUrl);
            }
            else
            {
                ModelState.AddModelError("", "Invalid username or password.");
            }
        }
        return View(model);
    }