首页 > 解决方案 > 当位于 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 部署到另一台服务器,它在那里工作而不会破坏循环,所以看起来那台特定的机器有问题。

标签: c#iisasp.net-web-api

解决方案


感谢@Silvermind 的评论,我发现了问题所在。日志也被发送到 Windows EventLog,IOException每次任何应用程序尝试将日志保存在Application源(从中创建自定义视图)中时都会抛出日志。我用谷歌搜索了它,它似乎是所有 Windows 系统中的已知问题,从 Windows 7 SP1 和 Windows Server 2008 SP2 开始,如本网站所述。Application在事件查看器中过滤视图时可以看到相同的错误。


推荐阅读