在我的asp.net/c#项目中,我正在使用iTextsharp dll从许多pdf文档中读取文本,但有时会出现此错误

System.Web.HttpException:请求超时。

但是执行此操作的代码是:

    public static bool does_pdf_have_keyword(string keyword, string pdf_src)
    {
        try
        {
            PdfReader pdfReader = new PdfReader(pdf_src);
            string currentText;
            int count = pdfReader.NumberOfPages;
            for (int page = 1; page <= count; page++)
            {
                ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
                currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
                if (currentText.IndexOf(keyword, StringComparison.OrdinalIgnoreCase) != -1) return true;
            }
            pdfReader.Close();
            return false;
        }
        catch
        {
            return false;
        }
    }


那么,为什么页面在尝试捕获中并应该捕获所有内容时却进入未处理的异常?

最佳答案

我认为您的try没有捕获此异常的原因是,您获取的异常不是从代码本身而是从服务器抛出的。

这样考虑:


您的代码运行良好,只需要很长时间。
服务器监视请求花费多长时间,杀死请求并引发异常。


因此,您的代码实际上不会引发该异常。

现在,如果要查找或记录它,可以在Application_Error文件中使用Global.asax方法(假设您有权访问它,我不确定它如何与SharePoint一起使用)。

例如,在我的一个Web项目中,我想记录所有错误,甚至未捕获的错误。所以我要做的是这样的:

protected void Application_Error(object sender, EventArgs e) {
    //Log ALL uncaught exceptions
    Exception exc = Server.GetLastError();
    if (exc is HttpUnhandledException) {
        exc = Context.Error.InnerException;
    }
    //Log error here
}


除了将其记录下来,我不确定您能做很多事情。我不知道这在页面生命周期中的什么地方发生,所以我不确定是否可以做一些事情,例如获取当前的HTTP请求对象并重定向用户。

希望这可以帮助。

关于c# - C#/asp.net-如何捕获“System.Web.HttpException:请求超时”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13768850/

10-17 02:00