1

我需要另一雙眼睛來看看這個。這讓我瘋狂。故障排除System.AggregateException

我在運行連接到web api的控制檯應用程序時,會間歇性地收到'System.AggregateException'。

我正在通過Visual Studio(IIS Express)在本地測試環境中執行此操作。如上所述,我有兩個不同的應用程序在IIS Express(2個不同的端口)上本地運行。一個是控制檯應用程序,另一個是web api。控制檯應用程序連接到Web API。

如果它工作與否,大約是50/50。 50%的時間工作正常,並吐出預期的結果。但另外50%的時間,它會因下面的錯誤而失敗。當它失敗時,它始終是立即的,就像啓動控制檯應用程序後2到3秒鐘一樣。

一些谷歌搜索後,並使用不同的設置左右擺弄,我知道這不是任一: 不超時問題 不是防火牆的問題

我試過設置在不同的點斷點,但它從來沒有真正揭示任何重大事件

的例外,我得到,當它失敗是:

型「System.AggregateException」的異常出現在mscorlib.dll,但在用戶代碼中沒有處理

下面是內部異常: 無連接可以作出,因爲目標機器積極地拒絕它http://localhost:45321

堆棧跟蹤表明:

在System.Net.HttpWebRequest.EndGetRequestStream(我AsyncResult asyncResult,TransportContext &上下文) 在System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult的AR) 在System.Threading.Tasks.Task.ThrowIfExceptional(布爾includeTaskCanceledExceptions) 在System.Threading.Tasks.Task 1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task 1.get_Result () 在BeatGenerator.BeatGeneratorMain。 <> c.b__2_0(任務1 postTask) in C:\Users\xxx\Documents\VS2012\DrumBeats\BeatGenerator\BeatGeneratorMain.cs:line 72 at System.Threading.Tasks.ContinuationResultTaskFromResultTask 2.InnerInvoke() 在System.Threading.Tasks.Task.Execute()

以下是錯誤行:

var response = await http.PostAsJsonAsync("http://localhost:45321/api/drumcorp/beats/generate", drumbeat) 
       .ContinueWith((postTask) => postTask.Result.EnsureSuccessStatusCode()); 

這是連接控制檯應用程序到API控制器:

public class DrumBeats 
{ 
    public int StartBeat { get; set; } 
    public int EndBeat { get; set; } 
    public int ChordId { get; set; } 
} 

public class BeatGeneratorMain 
{ 

    static void Main(string[] args) 
    { 
     Generate().Wait(); 
} 

private static async Task Generate() 
{ 

     var drumbeat = new DrumBeats(); 
     drumbeat.ChordId = 122; 
     drumbeat.StartBeat = 2; 
     drumbeat.EndBeat = 4; 

     var creds = new NetworkCredential("testUser", "xxxx", "xxx"); //username, pw, domain 
     var handler = new HttpClientHandler { Credentials = creds }; 

    using (var http = new HttpClient(handler)) 
    { 
      http.Timeout = TimeSpan.FromMinutes(10); 
      var response = await http.PostAsJsonAsync("http://localhost:45321/api/drumcorp/beats/generate", drumbeat) 
       .ContinueWith((postTask) => postTask.Result.EnsureSuccessStatusCode()); 
      var result = await response.Content.ReadAsStringAsync(); 
      Console.WriteLine(result); 
    } 

} 

} 

這是Web API控制器應用程序的相關部分:

public class DrumBeats //same as in console app 
{ 
    public int StartBeat { get; set; } 
    public int EndBeat { get; set; } 
    public int ChordId { get; set; } 
} 


    [HttpPost("api/drumcorp/beats/generate")] 
    public string PostMethodBeats([FromBody] DrumBeats drumbeat) 
    { 
     string beatsChart = DrumBeatMaster.ReturnBeatsChart(DrumBeats.ChordId, DrumBeats.StartBeat, DrumBeats.EndBeat); 
     var mesg = "<b>Beats Created</b><br /><br /> "; 
     return mesg + beatsChart; 
    } 

DrumBeatMaster.ReturnBeatsChart只是一個簡單的幫助程序方法,它處理節拍並吐出一個字符串。

回答

1

要了解什麼是例外,你將不得不趕上聚集異常,並把它們展平狀

try { // Your code } catch (AggregateException agg) { throw agg.Flatten(); }

+0

我得到了同樣的錯誤:類型System.AggregateException「的異常出現在mscorlib中。 DLL,但沒有在用戶代碼中處理 – SkyeBoniwell

+0

是否有可能在github上籤入解決方案。我可以編譯來檢查問題。似乎更像是資源獲取的衝突 – lazy