1

Мне нужна еще одна пара глаз, чтобы взглянуть на это. Это сводит меня с ума.проблема с съемкой System.AggregateException

Я периодически перехожу к «System.AggregateException» при запуске консольного приложения, которое подключается к веб-api.

Я делаю это в локальной тестовой среде через визуальную студию (IIS Express).

Как указано, у меня есть два разных приложения, работающих локально на IIS Express (2 разных порта). Один из них - консольное приложение, а другое - веб-приложение. Консольное приложение подключается к веб-ави.

Это примерно 50/50, если оно работает или нет. 50% времени он отлично работает и выплевывает ожидаемые результаты. Но другие 50% времени, он терпит неудачу с ошибками ниже. Когда он завершается неудачно, он всегда мгновенно, например, через 2 или 3 секунды после запуска консольного приложения.

Через некоторое Googling и возиться с различными настройками, я знаю, что это не одно из них: не проблема тайм-аут не вопрос брандмауэра

Я попытался установить точки останова в различных точках, но никогда по-настоящему показывает что-то значительное.

Исключение я получаю, когда он не является:

Исключение типа «System.AggregateException» произошло в mscorlib.dll, но не был обработан в пользовательском коде

Вот внутреннее исключение: Нет соединение может быть сделано, потому что целевая машина активно отказалась его http://localhost:45321

трассировка стека указывает:

в System.Net.HttpWebRequest.EndGetRequestStream (I AsyncResult AsyncResult, TransportContext & контекст) в System.Net.Http.HttpClientHandler.GetRequestStreamCallback (IAsyncResult ар) в System.Threading.Tasks.Task.ThrowIfExceptional (Boolean) includeTaskCanceledExceptions на System.Threading.Tasks.Task 1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task 1.get_Result() у BeatGenerator.BeatGeneratorMain. <> c.b__2_0 (Task 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); 
    } 

} 

} 

Это соответствующий раздел приложения веб-контроллера апи:

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