Instalando no site padrão move pools de aplicativos

2

Estou com problemas para instalar um aplicativo da Web no IIS 7.5. Eu estou usando um instalador de aplicativo web padrão construir com VS2010, mas quando eu instalar o aplicativo eu quero que ele seja colocado na raiz do site (em vez de dentro de uma pasta virtual). Aqui está um pequeno diagrama da configuração:

  • C: \ inetpub \ wwwroot \
    • estática < --- pasta padrão do IIS
    • app1
    • app2
    • app3
    • ....

Cada uma das aplicações tem o seu próprio conjunto de aplicações. A pasta estática usa o pool de aplicativos principal que é usado pelo padrão para o site inteiro.

Se eu executar o instalador e deixar o campo do diretório virtual em branco, tudo parece funcionar bem. O problema é que, de alguma forma, todos os meus outros aplicativos são movidos para o pool de aplicativos padrão e, por fim, são interrompidos porque as permissões são relativamente restritivas.

Alguém sabe de uma maneira de contornar isso? Eu não quero que os usuários tenham que digitar .../static/... na URL do site, então simplesmente instalando em um diretório virtual a maneira "normal" não funcionará.

Obrigado,

- Dan

    
por debracey 07.11.2011 / 21:04

1 resposta

0

Depois de muita investigação, acho que há um bug no instalador do aplicativo da web ou no próprio IIS. Porque eu estou preso com os instaladores de aplicativos web por enquanto, aqui está como eu cheguei:

  1. Mover a pasta padrão do IIS para C:\inetpub\wwwroot (esse é o padrão de qualquer maneira)
  2. Defina os pools de aplicativos para todo o site e static para ser o mesmo
    1. O IIS não permite a regravação de URLs nos pools de aplicativos. Se isso é uma preocupação - você teria que configurar um proxy reverso completo.
  3. Instalou o plug-in de regravação de URL do IIS
  4. Criei uma nova regra de regravação de URL com o padrão de correspondência (/*)(.*)
  5. Condições adicionadas à regra da seguinte forma (corresponde a todas)
    1. Entrada {URL} Não corresponde a ^(/*)app1/(.*)
    2. Entrada {URL} Não corresponde a ^(/*)app2/(.*)
    3. ... Um para cada aplicativo ... (sim, é uma dor)
  6. Defina a ação para reescrever para /static/{R:2}

No meu caso, não precisei de nenhuma regra de saída (ou seja, não precisei de um proxy reverso inteiro) porque meus apps retornam URLs válidos.

O interessante dessa solução é que ela é totalmente transparente para o usuário, e os links existentes que começam com / (por exemplo, ...a href="/images/file.jpg"... ) continuarão funcionando porque, quando o usuário final solicitar /images/file.jpg , a URL será reescrito internamente para /static/images/file.jpg .

A principal desvantagem é que eu tenho que manter a lista de padrões de correspondência atualizada com todos os pools de aplicativos. Mas no meu caso isso não é grande coisa. Eu poderia realmente automatizar a injeção de novas sequências de padrões no arquivo web.config - mas isso não é grande coisa no meu caso.

Outra desvantagem é que o usuário pode ver links para /static/images/... no código-fonte, mas não me importo com isso.

Então - espero que isso ajude alguém no futuro.

    
por 09.11.2011 / 04:16