【问题标题】:How to troubleshoot "System.Web.HttpException (0x80004005): File does not exist"?如何解决“System.Web.HttpException (0x80004005):文件不存在”?
【发布时间】:2011-06-16 16:36:15
【问题描述】:

抱歉,如果这个问题已经在这个网站上得到了回答,我搜索了但没有找到这个确切的场景。

我正在将 log4net 添加到 WCF 服务。我在 Application_Error 事件中添加了一个处理程序,它会在每个请求中捕获一个未找到文件的错误。

我在网站上看到过这种情况,通常该错误可以追溯到根目录中没有“favicon”文件,或者 css 样式表中引用的图像丢失。

但是,这是一个 WCF 服务,没有 CSS 样式表,在根目录下添加一个 favicon 并没有解决问题。

还有其他人有解决此问题的好方法吗?

一些线索:

  • 我还没有将它部署到真正的 IIS 服务器上,我在本地运行它。
  • 当我在 Visual Studio 中的 DEBUG 中运行时不会发生该错误,仅当我从 Web 浏览器(IE 或 Chrome)访问该服务时才会发生此错误
  • 我在错误消息中添加了 url 和文件路径,它们是这样的:

    网址:http://localhost:3994/

    文件路径: /

    错误: System.Web.HttpException (0x80004005):文件不存在。

编辑:以上值显示在记录的异常中:

protected void Application_Error(object sender, EventArgs e)
{
    var objErr = Server.GetLastError().GetBaseException();
    if (objErr is System.Web.HttpException)
    {
        var filePath = Context.Request.FilePath;
        var url = ((HttpApplication) sender).Context.Request.Url;
        Log.Error("URL: " + url + "; FilePath: " + filePath, objErr);
    } else
        Log.Error("Application Error", objErr);
}

任何帮助将不胜感激。

【问题讨论】:

  • 您是否忘记在 URL 中提及 .svc 文件?
  • 查看我发布到我的问题的编辑。
  • 使用 ` 键(也包含 ~ 字符的那个)来格式化 cmets 等中的代码。
  • @Joel,并非所有键盘都在与波浪号相同的键上具有反引号。我的 `, ¬ 和 ¦ 都在一个键上 :)
  • @Drew Noakes - 确实如此,但就像生活中的大多数事情一样,OP 使用 Dvorak qwerty 的百分比很高。

标签: asp.net wcf httpexception


【解决方案1】:

原因很可能是没有指定服务。当 Web 服务器(本地开发者也是如此)收到对文件夹的请求时,他们会在该文件夹中查找默认页面(通常称为:index.htm、index.html、default.asp、default.aspx 等)和呈现(除非您使用的是基于 REST 的服务描述)。当您从 VS 运行时,调试会直接带您进入实际服务。

在这种情况下,因为您已经构建了一个服务,您需要指定确切服务的位置,即http://localhost:3994/service.svc

另外:如果您启动调试会话,然后将 URL 更改为 http://localhost:3994/,您应该能够使用调试器检查这种情况。

【讨论】:

  • 谢谢,这帮助我理解了为什么会发生这种情况。我想它不应该在生产环境中经常发生,所以我将添加一些逻辑来捕获它,而不是太担心它。
  • 更好的是,添加一个静态 html 页面作为默认值,它不会告诉用户该站点上有什么,只是联系谁/在哪里。然后您不必担心处理错误,因为您通常不会记录 404(未找到)错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
  • 2012-03-20
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多