我有一个简单的Rest Web服务,它会随机引发一个异常(内部服务器错误)。 在50.000次迭代循环中的控制台程序中强调此Web api时,我注意到了这一点。 我从这个客户那里得到什么:
{状态代码:500,ReasonPhrase:“内部服务器错误”,版本:1.1,
我想要的是获取此Error 500详细信息。 但是我无法在我的控制器中捕获它,代码也没有捕获。 控制器代码:
[HttpPost]
[Route("{IdLog}/message")]
public string CreateLogMsg(long IdLog, [FromBody] TlogLineDTO oLogLine)
{
long lTmp = 0;
try
{
if (ModelState.IsValid)
{
string sTmp = _oExploitBll.InsertNewLogLine(oLogLine).ToString();
if (!long.TryParse(sTmp, out lTmp))
{
// Create a new file
Random rnd = new Random();
using (System.IO.StreamWriter sw = System.IO.File.AppendText(@"E:\Temp\20200707\REF_" + rnd.Next().ToString() + ".txt"))
{
sw.WriteLine(sTmp);
}
}
return sTmp;
}
else
{
// Create a new file where to put the error message
Random rnd = new Random();
using (System.IO.StreamWriter sw = System.IO.File.AppendText(@"E:\Temp\20200707\REF_" + rnd.Next().ToString() + ".txt"))
{
sw.WriteLine("Ko");
}
return "Ko";
}
}
catch (Exception ex)
{
string sMsgErr = ex.Message + "-" + ex.StackTrace;
// Create a new file
Random rnd = new Random();
using (System.IO.StreamWriter sw = System.IO.File.AppendText(@"E:\Temp\20200707\REF_" + rnd.Next().ToString() + ".txt"))
{
sw.WriteLine(sMsgErr);
}
return "0";
}
}
我怎样才能使它成功? 有人有主意吗?
非常感谢。
埃里克
答案 0 :(得分:0)
如您所说,如果错误是由于服务器压力太大而发生的,则请求永远无法到达控制器。实际上,服务器甚至无法将它们排入队列。如此一来,您将无法处理它们,除非您添加了一个副车服务器,该服务器接收来自客户端的请求,将其转发到您的服务器,然后
在实际情况下,您可以使用负载平衡器在更多服务器之间分配请求负载
答案 1 :(得分:0)
实际上,我已经更正了代码,并为http请求添加了2次重试的循环,这似乎可行:当http请求失败时,我重试一次(或重试次数),通常http在第二次重试中请求成功。 但是我仍然不知道为什么HTTP请求有时会失败。