IIS7 - como colocar o aplicativo em uma pasta dentro do site do aplicativo

2

Eu tenho um site estático com um blog (um aplicativo asp.net), o blog está em um subdiretório do site, então:

example.com/ , example.com/Something.htm , example.com/folder/somefile.htm , etc. - são todos arquivos estáticos

example.com/blog , example.com/blog/categories.aspx , example.com/blog/2011/11/09/post-name.aspx , etc. - todos vão para o aplicativo de blog

Estou atualizando a parte estática do site para um site dinâmico (também um aplicativo asp.net) e o blog é incompatível com o novo aplicativo (o aplicativo precisa de manipuladores e módulos carregados em web.config que don ' t trabalhar com o blog)

Além disso, tenho que manter todos os URLs antigos da mesma forma - por isso não posso mover o blog para um subdomínio ou o novo aplicativo para uma pasta e o blog gera links com base em sua pasta. trabalhos.

Existe uma maneira de colocar um aplicativo asp.net em uma pasta dentro de outro aplicativo (como uma pasta real ou virtual) para que as configurações web.config da raiz não se apliquem à pasta do aplicativo? Ou algum outro truque que eu não pensei?

O sistema está executando o IIS7 no Windows Server 2008 64bit, eu tenho controle total sobre a configuração do servidor.

Não consigo modificar o código-fonte do blog, mas posso editar sua web.config e outras configurações.

Eu posso modificar a fonte do novo aplicativo, mas não posso torná-lo compatível com o blog (a maior parte de sua utilidade vem de uma biblioteca de terceiros que não é compatível com o blog).

O blog em um aplicativo de webforms asp.net 3.5

O novo aplicativo de raiz é um aplicativo asp.net 4.0 mvc

    
por Nir 15.11.2011 / 11:26

3 respostas

2

Você pode editar o arquivo web.config do software do blog, manualmente ou por meio da ferramenta "Gerenciador de Serviços de Informações da Internet (IIS)", para desabilitar vários módulos e manipuladores conforme necessário. Por exemplo, para remover um manipulador e um módulo que estão instalados e disponíveis por padrão no IIS 7.5:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <modules>
            <remove name="Session" />
        </modules>
        <handlers>
            <remove name="StaticFile" />
        </handlers>
    </system.webServer>
</configuration>

Você deve ser capaz de apenas "inserir" os nomes dos módulos e manipuladores de problemas e o software do blog começará a funcionar novamente.

As etapas para isso por meio do Gerenciador do IIS são:

  1. Abra o Gerenciador do IIS e conecte-se à máquina que você deseja configurar
  2. Na treeview à esquerda, navegue até o aplicativo que você deseja configurar
  3. Escolha "Mapeamentos do manipulador" ou "Módulos" no painel principal
  4. Clique em cada manipulador ou módulo que você deseja remover e clique em [DEL], use o link "Remover" em ações ou clique com o botão direito do mouse e escolha "Remover" no menu de contexto.
por 19.11.2011 / 12:03
0

Você pode criar um novo aplicativo para essa pasta específica em sua guia Propriedades, Diretório inicial (ou Diretório virtual para diretórios criados virtualmente). Eu acho que você quer diretório home para novo conteúdo .net atualizado. Depois de configurar o site para ir para a pasta do blog e criar um aplicativo para ele. Em seguida, vá para a guia ASP.NET e corrija a versão do aplicativo, pois ao configurar o site pai para a v4.0, a versão do blog também será alterada para isso. Você deve alterá-lo de volta para a v3.5

Sendo mencionado, cada aplicativo terá seu próprio arquivo web.config para que dois aplicativos diferentes não se cruzem.

    
por 18.11.2011 / 14:18
0

Eu não acho que seja possível enquanto os diretórios estão fisicamente aninhados. Provavelmente, a maneira mais fácil é usar as ferramentas do IIS URL reescrita ou Roteiro de Solicitação de Aplicativo .

Usar o material Roteamento ASP provavelmente não funcionará, já que o aplicativo precisa estar em seu próprio domínio.

Se você realmente quiser evitar o uso do IIS, poderá deixar seu novo aplicativo MVC funcionar como um proxy e chamar o outro aplicativo do controle Blog e retornar o resultado. Você também terá que levar em conta quando o aplicativo do seu blog gera links com o URL usando um código como este:

ResolveUrl("~/...")

Você precisará procurar e substituir essas URLs (não testado, você precisará ajustar algumas coisas aqui para que funcione, mas a ideia básica pode ser extraída):

public class BlogController : Controller {
  protected override void HandleUnknownAction(string actionName) {
    string newUrl = ConvertToNewUrl(Request.Url);
    System.Net.HttpWebRequest newRequest = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(newUrl);
    System.Net.HttpWebResponse newResponse = (System.Net.HttpWebResponse)newRequest.GetResponse();

    System.IO.Stream resStream = newResponse.GetResponseStream();
    byte[] content = new byte[resStream.Length];
    resStream.Read(content, 0, (int)resStream.Length);

    if (newResponse.ContentType == "text/html") {
      System.IO.MemoryStream ms = new System.IO.MemoryStream(content);
      using (System.IO.StreamReader sr = new System.IO.StreamReader(ms)) {
        string strContent = sr.ReadToEnd();

        strContent = strContent.Replace("example.com/something", "example.com/blog");
        using (ms = new System.IO.MemoryStream()) {
          using (System.IO.StreamWriter sw = new System.IO.StreamWriter(ms)) {
            sw.Write(strContent);
            content = ms.ToArray();
          }
        }
      }
    }

    Response.Write(content);
  }
}

mas devo admitir que essa é a solução mais suspeita que eu posso imaginar :-) Eu recomendo que você primeiro dê URL reescrita ou Roteamento de Solicitação de Aplicativo .

    
por 19.11.2011 / 11:29

Tags