【问题标题】:trouble shooting System.AggregateException故障排除 System.AggregateException
【发布时间】:2016-08-29 18:11:56
【问题描述】:

我需要另一双眼睛来看看这个。快把我逼疯了。

在运行连接到 Web api 的控制台应用程序时,我间歇性地收到“System.AggregateException”。

我正在通过 Visual Studio(IIS Express) 在本地测试环境中执行此操作。

如上所述,我在 IIS Express 上本地运行了两个不同的应用程序(2 个不同的端口)。一个是控制台应用程序,另一个是 Web api。控制台应用程序连接到 Web api。

不管它是否有效,大约是 50/50。 50% 的时间它工作正常并吐出预期的结果。但另外 50% 的时间,它会因以下错误而失败。当它确实失败时,它总是立即发生,例如在启动控制台应用程序后 2 或 3 秒。

在谷歌搜索和摆弄各种设置之后,我知道这不是以下任何一个: 不是超时问题 不是防火墙问题

我尝试在不同的点设置断点,但它从来没有真正揭示任何重要的东西。

失败时我得到的异常是:

在 mscorlib.dll 中发生了“System.AggregateException”类型的异常,但未在用户代码中处理

这是内部异常: 无法连接,因为目标机器主动拒绝http://localhost:45321

堆栈跟踪表明:

在 System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context) 在 System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar) 在 System.Threading.Tasks.Task.ThrowIfExceptional(布尔 includeTaskCanceledExceptions) 在 System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task1.get_Result() 在 BeatGenerator.BeatGeneratorMain.c.b__2_0(Task1 postTask) in C:\Users\xxx\Documents\VS2012\DrumBeats\BeatGenerator\BeatGeneratorMain.cs:line 72 at System.Threading.Tasks.ContinuationResultTaskFromResultTask2.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 只是一个简单的辅助方法,用于处理节拍并输出字符串。

【问题讨论】:

    标签: c#-4.0 visual-studio-2015 asp.net-core asp.net-web-api2 iis-express


    【解决方案1】:

    要了解什么是异常,您必须捕获聚合异常并将它们像扁平化一样抛出

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

    【讨论】:

    • 我得到同样的错误:在 mscorlib.dll 中发生了“System.AggregateException”类型的异常,但未在用户代码中处理
    • 是否可以在github上签入解决方案。我可以编译来检查问题。看起来更像是资源获取的冲突
    猜你喜欢
    • 1970-01-01
    • 2013-07-15
    • 2010-11-30
    • 2021-09-11
    • 2012-02-18
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多