2016-07-21 6 views
3

Application Insight Webアプリケーションのログでエラーが表示されていますが、どこに来るのかわかりませんし、アプリやWebで奇妙な動作が見つからないAPI(Web APIを2.0と.NET 4.5、OutputCacheを使用してWeb Api 2 Cache、2つのインスタンスを持つWebアプリケーションのようなアズールでのMongoDB):タスクの例外は検出されませんでした

Aタスクの例外(複数可)は、タスク の待機またはアクセスすることにより、いずれかの観察されませんでしたExceptionプロパティ。結果として、観察されなかった 例外がファイナライザスレッドによって再現されました。オブジェクト参照は ではなく、オブジェクトのインスタンスに設定されています。

私はエラーがどこから来るか、私はあなたにいくつかのサンプルコードが表示されます見つけることができない、私はデータを得るために、私のWeb APIとJavaスクリプトの多くを使用しています:

例コントローラ:

public Task<IActionResult> GetDataFromMyMongoDB(string id){ 

     var data = await _service.GetData(id); 

     if(data == null) 
       return BadRequest("Error"); 

     return Ok(data); 
} 

サービス:

public Task<ICollection<MyDto>> GetData(id) 
{ 
    //Check security operations for example, or business login like this: 

    var data = await _repositoryData.Where(d=>d.Id == id); 

    //For example, sometimes I do some business logic operations in which 
    // I use try ... catch (this code is just for show example code) 

    try 
    { 
     var dataToJson = JSON.parse(data); 

     //Dummy code dataJson to obtain a value of this and changed and update 
     //to repository 

     //** Code omited **// 

     var bool = await _repository.UpdateManyAsync(data); 

     if(bool == false) 
     return null; 

     else 
     { 
      //Here I do typical mapper operations from my 
      //entities to my DTOs 

      //** Code omited **// 

      return mappedListDto; // <-- Type: ICollection<MyDto> 
     } 

    } 
    catch(Exception ex) 
    { 
     //Log in Elmah 
     //Elmah stuff code here 

     //** Code omited **// 

     return null; 

    } 





} 

私のリポジトリは簡単な操作を行うための標準コードであり、単体テストではうまくいきます。何度も問題なく、何度も100人以上のユーザーを使用していますが、ログでは仕事。

私はこれを読み取ったquestionthis oneでも、私のコードでどのように適用するのか理解できません。私は馬鹿だと感じます。

EDIT:詳細情報:私は最後の12時間でこのタイプの約500例外を得ているが、アプリケーションは、私はおよそ167 Kの要求を持って、最後の12時間で、正常に動作しています。

スタックトレース:

System.AggregateException: 
System.NullReferenceException: 
    at System.Web.ThreadContext.AssociateWithCurrentThread (System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a) 
    at System.Web.HttpApplication.OnThreadEnterPrivate (System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a) 
    at System.Web.HttpApplication.System.Web.Util.ISyncContext.Enter (System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a) 
    at System.Web.Util.SynchronizationHelper.SafeWrapCallback (System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a) 
    at System.Threading.Tasks.Task.Execute (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089) 

任意のアイデア?私はそれに完全に夢中だ...ありがとう!

+1

私には間違いはありません。スタックトレースを投稿してみてください。 –

+0

@JonathanAllen更新しました。興味がありがとう... – chemitaxis

+0

くそー、私はそこに何か役に立つものは見当たりません。私はあなたがデバッガを接続し、何かがそれをトリガすることを期待しなければならないと思う。 –

答えて

3

おそらく間違いはありません。 AppInsightsのようなサウンドは少し編集的です。

これは最も一般的な原因は2つあります。

1つは、コード内の論理フォークの「待機」です。これは通常、Task.WhenAnyを使用するコードです。 "WhenAny"のコードを検索することをお勧めします。

もう1つは、「火と忘れた」種類のロジックです。これは、通常、Task.Runを呼び出して、返されたタスクを無視するコードです。コンパイラはFire-and-Forgetコードについて警告するのはかなり良いです(ほとんどの場合間違いなので)。最初にチェックするのはコンパイラの警告です。

ユニットテストスイートがあるので、TaskScheduler.UnobservedTaskExceptionのハンドラを接続することができます。このハンドラはこれらの例外をキャッチし、テストスイートを実行/デバッグし、ヒットしたテストを確認します。 AppInsightsを静かにしたい場合は、プロダクトコードにUnobservedTaskExceptionEventArgs.SetObservedというハンドラを追加することができます。

関連する問題