Как устранить неполадку «System.Web.HttpException (0x80004005): файл не существует»? - PullRequest
9 голосов
/ 27 января 2011

Извинения, если на этот сайт уже был дан ответ, я искал, но не нашел этого точного сценария.

Я добавляю log4net в службу WCF. Я добавил обработчик в событие Application_Error, и он перехватывает ошибку «файл не найден» при каждом запросе.

Я видел это на веб-сайтах, и обычно ошибка может быть связана с отсутствием файла favicon в корневом каталоге или отсутствующим изображением, на которое есть ссылка в таблице стилей CSS.

Однако это служба WCF, таблицы стилей CSS нет, и добавление значка root в корень не решило проблему.

У кого-нибудь еще есть хороший способ устранить это?

Некоторые подсказки:

  • Я еще не развернул это на реальном сервере IIS, я запускаю его локально.
  • Ошибка не возникает при запуске в DEBUG в Visual Studio, только при доступе к службе из веб-браузера (IE или Chrome)
  • Я добавил URL и путь к файлу к сообщению об ошибке, и вот что они:

    URL: http://localhost:3994/

    FilePath: /

    Ошибка: 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);
}

Любая помощь будет принята с благодарностью.

1 Ответ

6 голосов
/ 27 января 2011

Вероятно, причина в том, что услуга не была указана. Когда веб-сервер (в том числе локальный разработчик) получает запрос на папку, он ищет в этой папке страницу по умолчанию (обычно она называется: index.htm, index.html, default.asp, default.aspx и т. Д.) представьте это (если вы не используете описание сервиса на основе REST). Когда вы запускаете из VS, отладка приведет вас прямо к текущему сервису.

В этом случае, поскольку вы создали сервис, вам нужно указать точное местоположение сервиса, т.е. http://localhost:3994/service.svc.

Кроме того: если вы запустите сеанс отладки, а затем измените URL-адрес на http://localhost:3994/, вы сможете проверить, что это так с отладчиком.

...