Como resolver problemas " Sistema.Site.HttpException (0x80004005): File does not exist"?

desculpas se isso já foi respondido neste site, Eu procurei, mas não encontrei este cenário exato.

Estou a adicionar log4net a um serviço WCF. Eu adicionei um manipulador no evento Application_Error, e ele está pegando um arquivo não encontrado erro em cada pedido.

eu vi isso com sites da web, e normalmente o erro pode ser rastreado até não ter um arquivo "favicon" no diretório raiz, ou para uma imagem em falta referenciada em um css folha.

No entanto, este é um serviço WCF, não há nenhuma folha de estilo CSS, e adicionar um favicon à raiz não resolveu o problema.

Mais alguém tem uma boa maneira de resolver isto?

Algumas pistas:
    Ainda não enviei isto para o verdadeiro servidor IIS, estou a executá-lo localmente.
  • o erro não acontece quando estou a correr em depurar dentro do Visual Studio, apenas quando acedo ao serviço a partir de um navegador web (ou seja, ou Cromado)
  • adicionei o url e o caminho do ficheiro à mensagem de erro, e isto é o que eles são:

    URL: http://localhost:3994/

    FilePath: /

    Erro: Sistema.Site.HttpException (0x80004005): o ficheiro não existe.

editar: os valores acima são os que aparecem na excepção registada:

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);
}
Qualquer ajuda seria muito apreciada.

Author: camainc, 2011-01-27

1 answers

A razão é provável que o serviço não tenha sido especificado. Quando um servidor web (o dev local também) recebe um pedido de uma pasta, eles olham dentro dessa pasta para a página padrão (normalmente chamado: index.htm, index.html, por omissão.asp, por omissão.aspx, etc) e apresentar isso (a menos que você esteja usando uma descrição de serviço com base em repouso). Quando você correr de VS a depuração vai levá-lo direto para o serviço real.

Neste caso, porque construiu um serviço que precisa de indique a localização exacta do serviço, ou seja http://localhost:3994/service.svc.

Também: se iniciar uma sessão de depuração e depois mudar o URL para http://localhost:3994/, deverá ser capaz de verificar este é o caso com o depurador.

 6
Author: David McEwing, 2011-01-27 19:29:30