首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >故障排除System.AggregateException

故障排除System.AggregateException
EN

Stack Overflow用户
提问于 2016-08-29 18:11:56
回答 1查看 3.5K关注 0票数 1

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

当运行一个连接到web的控制台应用程序时,我会间歇性地得到一个“System.AggregateException”。

我正在通过visual (IIS Express)在本地测试环境中这样做。

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

不管是否有效,大约是50/50。50%的时间,它工作良好,并吐出了预期的结果。但在其他50%的时间里,它失败了,下面的错误。当它确实失败时,它总是即时的,就像启动控制台应用程序之后的2到3秒。

在Googling和摆弄了各种设置之后,我知道这两者都不是:不是超时问题,也不是防火墙问题

我尝试过在不同的点设置断点,但它从未真正揭示任何有意义的东西。

当它失败时,我得到的例外是:

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

下面是内部异常:由于目标机器主动拒绝http://localhost:45321,所以无法建立连接

堆栈跟踪指示:

在System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult,TransportContext& context)在System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar)在System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)在System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task1.get_Result() at 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() at System.Threading.Tasks.Task.Execute()

以下是错误行:

代码语言:javascript
复制
 var response = await http.PostAsJsonAsync("http://localhost:45321/api/drumcorp/beats/generate", drumbeat)
                .ContinueWith((postTask) => postTask.Result.EnsureSuccessStatusCode()); 

这是连接到API控制器的控制台应用程序:

代码语言:javascript
复制
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控制器应用程序的相关部分:

代码语言:javascript
复制
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只是一个简单的助手方法,它处理节拍并吐出一个字符串。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-29 19:02:22

要理解什么是异常,您必须捕获聚合异常并将它们抛出如下所示

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39212553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档