Pergunta

No ASP clássico, Server.MapPath () nem sempre funciona adequadamente no Application_OnStart evento dentro de global.asa . Eu tenho uma página ASP em "\ testfolder \ test.asp" dentro de uma raiz virtual, eu tenho um arquivo XSLT em "\ xsl \ transform.xsl" . Minha raiz virtual está localizada em "c: \ inetpub \ wwwroot \ testapp \".

Eu uso MapPath dentro da página ASP para obter o caminho completo para o arquivo XSLT. A chamada é:

sXslPath = Server.MapPath("xsl\transform.xsl")

retornos Algumas vezes MapPath "c: \ inetpub \ wwwroot \ testapp \ xsl \ transform.xsl" como esperado, outras vezes incorretamente retorna "c: \ inetpub \ wwwroot \ TestApp \ testfolder \ xsl \ transform.xsl ". O caminho incorreto, obviamente, causa sérios problemas.

Foi útil?

Solução

Eu estou respondendo a minha própria pergunta aqui:

Esse problema ocorre porque quando chamado em Application_OnStart , MapPath incorretamente inclui o contexto da página que causou a aplicação da colocação em funcionamento. Se a primeira página ASP para ser executado quando a aplicação ainda não é iniciado não é na raiz da raiz virtual, em seguida, MapPath fica confuso e adiciona o caminho para o chamado página ASP para o caminho ele retorna .

Por exemplo, se a página que iniciou o aplicativo estava em "c: \ inetpub \ wwwroot \ testapp \ folder1 \ Folder2 \ test.asp" seguida MapPath incorretamente adicionar "\ folder1 \ folder2 " no meio do caminho e retorno " c: \ inetpub \ wwwroot \ testapp \ folder1 \ folder2 \ xsl \ transform.xsl "

Se seu site tem apenas arquivos na pasta raiz ou não usa MapPath na global.asa , então você nunca vai notar esta pequena estranheza. Eu suspeito que há muitos sites ASP Clássico lá fora, que não conseguem iniciar corretamente, por vezes, por causa disso, mas seus proprietários apenas fazer um iisreset rápida, sem saber o bastante deu errado.

O resultado disto é que você não pode utilizar com segurança MapPath na global.asa se você tem um site que tem ASP arquivos em qualquer lugar que não seja apenas a pasta raiz .

Se é um one-off site, então a solução mais fácil é para o código apenas difícil qualquer caminho que você usa em global.asa .

Se você vender um produto para outras pessoas com base em ASP clássico, em seguida, disco rígido codificação os caminhos não é uma opção. Você tem que mover todos os usos de MapPath para fora da inicialização do aplicativo ou lidar com a questão, escrevendo caminhos para os arquivos ASP como parte do instalador.

Outras dicas

Como alternativa, use sXslPath = Server.MapPath ( "\ xsl \ transform.xsl")

que irá mapear o caminho do diretório raiz

naturalmente se você estiver desenvolvendo no IIS em um sistema operacional que não seja um servidor, raiz será o website padrão, você tem que lembrar de mudança na implantação ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top