我需要另一双眼睛来看看这个。快把我逼疯了。
当运行一个连接到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()
以下是错误行:
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控制器应用程序的相关部分:
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只是一个简单的助手方法,它处理节拍并吐出一个字符串。
发布于 2016-08-29 19:02:22
要理解什么是异常,您必须捕获聚合异常并将它们抛出如下所示
try { // Your code } catch (AggregateException agg) { throw agg.Flatten(); }
https://stackoverflow.com/questions/39212553
复制相似问题