c# - 当位于 ASP.NET Webapi 循环内的 try catch 块中捕获异常时,Foreach 将停止
问题描述
在我的 API 中,我多次调用外部 SOAP API 方法。为了实现这一点,我使用了 foreach 循环,并在其中放置了try catch
块来处理异常并继续循环。在我的机器上一切正常,但是当我将 API 部署到另一台运行 IIS 的服务器时,似乎在抛出异常时停止调用外部 API 的方法,就好像try catch
突然移出循环一样。是否可能与 IIS 配置有关?
我已经尝试将此方法放入另一个方法中,然后将该方法放入try catch
块中,但它没有帮助。
public class Loader
{
private static SoapClient client;
private static string AddItems(Order order)
{
foreach(item in order.items)
{
try
{
client.SoapMethod(item);
}
catch(Exception e)
{
// Log error and go to next iteration
Log.LogError(e.Message);
}
}
}
}
Log
类使用 Log4Net 将错误消息放入文本文件中:
public class Log
{
private static readonly ILog log = LogManager.GetLogger("API");
public static void LogError(string message)
{
log.Error(message);
}
}
如果外部 SOAP API 的方法抛出异常,它应该被跳过,它应该进入foreach
循环的下一次迭代以使用另一个数据调用此方法。
编辑:我将我的 API 部署到另一台服务器,它在那里工作而不会破坏循环,所以看起来那台特定的机器有问题。
解决方案
感谢@Silvermind 的评论,我发现了问题所在。日志也被发送到 Windows EventLog,IOException
每次任何应用程序尝试将日志保存在Application
源(从中创建自定义视图)中时都会抛出日志。我用谷歌搜索了它,它似乎是所有 Windows 系统中的已知问题,从 Windows 7 SP1 和 Windows Server 2008 SP2 开始,如本网站所述。Application
在事件查看器中过滤视图时可以看到相同的错误。
推荐阅读
- javascript - 我将 JSS 样式放在一个自定义的 React 挂钩中。这很糟糕吗?
- google-chrome-extension - Hiding a tab, without killing it with Chrome API
- amazon-web-services - Is there a way to restrict what actions can be added on an IAM Policy by an IAM Role?
- swift - How do I stop the swift playground for a long running process?
- ios - How to switch on a RawRepresentable enum type in Swift
- python - 如何从电子邮件中下载文件并将其保存在 C:\
- python - 在 python 中跨进程共享数据
- python - “OSError: [Errno 22] Invalid argument:” 尝试使用 save() 保存编辑过的工作簿时
- python - 如何通过 ForeignKey 表选择一个具有第二个顺序和范围的表?
- r - 给定一个数字列表,编写一个函数,给出最大间隔及其大小。前任。2, 4, 9, 左=4, 右=9 间隔=5