2016-10-12 4 views
1

昨日の朝、夜間サイトのリサイクルを03:00 UTCにした後、エンティティフレームワークは異なる種類の非同期メソッド呼び出し(CountAsyncToArrayAsyncなど)にNullReferenceExceptionをスローします。エンティティフレームワークasync mehodsがiisリサイクル後に突然例外をスローする

(Gitログに基づいて)コードや設定の変更は行われておらず、サーバー自体は自動更新を実行していないため、

今、私はこのような振る舞いやアイデアの原因となるものは何もわからないのですか?

は、以下の

  • 再デプロイ既存のコード
  • 再起動
  • Windowsアップデート
  • 新サイト我々は生産を展開し、テストサーバー上の

ワークス(サーバがあるとしようとしましたWindows Server 2012 R2、すべてAWSでホストされています)。

非同期メソッドに切り替えると問題は解決しますが、現時点ではどこでも実行できません。

通知コントローラーのスタックトレースですが、ジョブコントローラーと同様の動作があります。

at System.Data.Entity.Core.Objects.Internal.BufferedDataReader.ReadAsync(CancellationToken cancellationToken) 
    at System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1.<StoreReadAsync>d__0.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 
    at System.Data.Entity.Utilities.TaskExtensions.CultureAwaiter`1.GetResult() 
    at System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.<MoveNextAsync>d__4.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 
    at System.Data.Entity.Utilities.TaskExtensions.CultureAwaiter`1.GetResult() 
    at System.Data.Entity.Internal.LazyAsyncEnumerator`1.<FirstMoveNextAsync>d__0.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 
    at System.Data.Entity.Utilities.TaskExtensions.CultureAwaiter`1.GetResult() 
    at System.Data.Entity.Infrastructure.IDbAsyncEnumerableExtensions.<SingleAsync>d__2d`1.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 
    at Web.Notifications.AlertService.UnmappedCheck`4.<Check>d__0.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 
    at Web.Notifications.AlertService.<Check>d__12.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 
    at Web.ApiControllers.NotificationsController.<Count>d__14.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 
    at System.Threading.Tasks.TaskHelpersExtensions.<CastToObject>d__3`1.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) 
    at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) 
    at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) 
    at System.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>d__0.MoveNext() 

答えて

0

はテストと検索の多くの後、私たちは、データベースへのWEBAPIと非同期呼び出しと接続詞で使用した場合SetExecutionStrategyである犯人を見つけました。

我々は特定のケースでの戦略を設定するためにいくつかの時間のために、このアプローチを使用

https://msdn.microsoft.com/en-us/data/dn307226.aspx#transactions_workarounds

public class MyConfiguration : DbConfiguration 
{ 
    public MyConfiguration() 
    { 
     this.SetExecutionStrategy("System.Data.SqlClient",() => SuspendExecutionStrategy 
      ? (IDbExecutionStrategy)new DefaultExecutionStrategy() 
      : new SqlAzureExecutionStrategy()); 
    } 

    public static bool SuspendExecutionStrategy 
    { 
     get 
     { 
      return (bool?)CallContext.LogicalGetData("SuspendExecutionStrategy") ?? false; 
     } 
     set 
     { 
      CallContext.LogicalSetData("SuspendExecutionStrategy", value); 
     } 
    } 
} 

これがエラーをケースに入れ、そして最近まで、通常のリサイクル後、私はまだ持っていないのはなぜの答え。

関連する問題