Publicando uma aplicação web no IIS 7

Olá pessoal, neste artigo vou mostrar como é simples publicar uma aplicação web no IIS 7 (Internet Information Server), que está presente no Windows Vista, Windows 7 e Windows Server 2008 e 2008 R2.

Publicar uma aplicação na sua rede local ou computador pessoal é um pouco diferente do que publicar em um webhost, que traz ferramentas específicas que ajudam e facilitam o trabalho, visto que dificilmente você terá acesso direto ao IIS do hosting.

Mas no ambiente da sua rede local, será necessário acessar o IIS para publicar sua aplicação web, seja ela Asp.Net, Webservices ou WCF, e é neste caso que este artigo pode lhe ajudar.

Não vou abordar a criação da aplicação propriamente dita, pois existe uma infinidade de artigos na web mostrando técnicas e frameworks que podem lhe ajudar neste processo, aqui vamos abordar simplesmente a publicação e atualização da aplicação.

Então vamos criar uma aplicação bem simples em Asp.Net só para demonstrar a publicação, para isto vá em New Project e escolha Asp.Net e dê o nome de WebTeste:

image

Veja que estamos criando uma aplicação com o Framework 2.0. Estou fazendo isto para demonstrar logo abaixo como podemos publicar uma aplicação com o Framework 4.0, que apresenta algumas diferenças.

Criada a aplicação, vamos apenas escrever um texto qualquer, lembrando que o objetivo é mostrar a publicação apenas:

image

Se você executar esta aplicação, pressionando F5, terá algo como a tela abaixo:

image

O Visual Studio possui um micro servidor web, que serve para ajudar no desenvolvimento de aplicações web, ou seja, com este pequeno servidor, você consegue executar sua aplicação sem precisar instalar o IIS, e para cada aplicação que você executa, ele cria um endereço virtual, como o da imagem acima:

http://localhost:45566/Default.aspx

Isto é bem interessante, pois você pode usar este endereço inclusive dentro da sua rede, ou seja, de um outro computador, se você digitar o nome ou IP deste micro, é possível acessar esta aplicação web, mas lembre-se, somente para o desenvolvimento, pois o Visual Studio compila a aplicação e publica através deste servidor de desenvolvimento.

Mas agora vamos publicar a aplicação corretamente, usando o IIS. Para isto vá no menu Build/Publish do Visual Studio e você verá uma tela igual a este no Visual Studio 2010:

image    image

ou igual a esta no Visual Studio 2008:

image

No Visual Studio 2010, nós temos mais opções na publicação, que você poderá explorar posteriomente. Eu vou escolher publicar em um diretório a nossa aplicação, mas você pode publicar direto no IIS ou por FTP, de acordo com a sua necessidade. Para publicar em um diretório, em Target Location coloque o nome do diretório e depois clique em Publish:

image

Feito isto, o Visual Studio irá compilar e copiar os arquivos necessários para a aplicação web funcionar no diretório especificado, veja:

image

Agora precisamos publicar no IIS, e para isto vamos abrir o Gerenciador do IIS, lembrando que se você não tem o IIS precisará instalá-lo. Abra o gerenciador do IIS clicando Iniciar/Painel de Controle/Ferramentas Administrativas/Gerenciador do Internet Information Services (caso você não veja as Ferramentas Administrativas, use a busca do Painel de Controle) e após isto você vera a tela abaixo:

image

Agora para publicar a aplicação, clique com o botão direito do mouse no site padrão (Default WebSite) e depois em Add Application:

image

Você verá a tela abaixo:

image

Neste tela o Alias é o nome do site, que será usado para acessá-lo pelo navegador e o Physical Path é o diretório onde publicamos a aplicação pelo Visual Studio ou o diretório do seu servidor onde está a aplicação publicada. Clicando em OK, você já poderá acessar a sua aplicação pelo browser:

image

Está pronto, sua aplicação está publicada no IIS 7, mas lembre-se que no eu comentei no início do artigo que para publicar uma aplicação em .Net 4.0 era um pouco diferente e vou mostrar isto agora.

Quando desenvolvemos uma aplicação, ela está ligada a versão do Framework em que foi escrita, e isto acontece também com o Servidor Web (IIS). Nele as aplicações executam sob um Pool de Aplicações, onde você informa qual a versão do framework será executada. Isto possibilita que executemos em um mesmo servidor web aplicações escritas em várias versões do framework. Mas como gerenciar estes Pools  de Aplicação ? Bom isto é bem simples, veja: clicando em Application Pools no gerenciador do IIS você tem esta tela:

image

Ela mostra todos os pools que temos atualmente e você pode notar que temos .Net 2.0 e .Net 4.0, mas não temos o 3.5, pois ele faz parte do 2.0. Vamos então criar e publicar uma aplicação com .Net 4.0, para isto basta primeiramente criarmos a aplicação em  .Net 4.0, então vamos em New Project/Web:

image

Só um detalhe importante é que quando clicamos uma aplicação no Visual Studio 2010 para .Net 4.0, ela já tem um esqueleto pronto, então se você quiser, troque somente o texto da tela inicial, de maneira que fique como a tela abaixo:

image

Depois publique da mesma maneira que foi demonstrado acima. Só para demonstrarmos um erro bem comum, publique a aplicação da mesma maneira que a anterior, e veja que ao executá-la obterá o seguinte erro:

image

Este erro acontece porquê o DefaultAppPool está apontando para o .Net 2.0 e sua aplicação agora é feita em 4.0, vamos então ver a maneira correta de criar a aplicação no IIS. Na verdade os passos são os mesmos com uma pequena diferença, temos que escolher um outro Pool para nossa aplicação, clicando no botão Select da tela de criação de aplicação:

image

Clicando no botão Select, você verá a tela abaixo:

image

Onde escolheremos ASP.NET v4.0, e está pronto, agora você pode acessar sua aplicação sem problemas:

image

Se você já tiver criado a aplicação no IIS e quiser trocar o Pool, basta clicar em Advanced Settings e trocar o Pool. Você pode também criar seu próprio Pool no IIS, clicando com o botão direito em Application Pools/Add Application Pool.

Para finalizar, quando você atualizar a sua aplicação, basta publicar novamente que o IIS irá executar a nova versão.

Se você quer configurar a segurança da sua aplicação, veja estes outros posts:
http://technet.microsoft.com/pt-br/library/cc731278(WS.10).aspx
http://technet.microsoft.com/pt-br/library/cc730708(WS.10).aspx

É isto aí pessoal, espero que seja útil para vocês!

Abraços,
Carlos dos Santos.

41 Comments

  1. Excelente post, Carlos!
    Parabéns!

  2. Carlos dos Santos says:

    Valeu Michel.

  3. Guilherme says:

    Quando tento adicionar o aplicativo, e esto a conexão aparece esse alerta, Autorização Não é possível verificar o acesso ao camninho.

    O servidor está configurado para usar autenticação pass-through com uma conta interna para acessar o caminho físico especificado. No entanto, o Gerenciador do IIS não pode verificar se a conta interna tem acesso. Verifique se a identidade do pool de aplicativos tem acesso de Leitura ao caminho físico. Se o servidor ingressar em um domínio, e a identidade do pool de aplicativos for NetworkService ou LocalSystem, verifique se $ tem acesso de Leitura ao caminho físico e teste essas configurações novamente.

    O que é que eu faço

  4. casablanca says:

    Valeu Carlos! Coloquei o VS2010, em Windows 7, em funcionamento perfeito no meu PC, sem stress, usando o seu tutorial – até mesmo a mensagem de erro do “Framework 4.0″ apareceu e consegui corrigir de imediato! Muito obrigado! Agora vou tentar usar com banco de dados (MS-Access, para iniciantes como eu!)

  5. Jackson Faria says:

    Eu publico o projeto em outro computador, e la eu adiciono no IIS (default WebSite) o projeto publicado. Tento acessa-lo de outro computador digitando seu ip/nomedosite mas este nao é encontrado, sendo que funciona perfeitamente no computador onde foi adicionado o projeto.

    Gostaria de uma opinião.
    Att, Jackson Faria.

  6. junior says:

    Carlos, tenho um web site feito no vs 2010 e o acesso a dados é feito pelo Entity Framework, no meu micro tudo funciona perfeito, vi seu post e segui passo a passo, estou publicando meu projeto em um servidor próprio windows server 2008, depois de publicado quando vou tentar executar o site no meu micro pelo servidor dá o seguinte erro e naõ sei como resolver, erro :

    “A identidade atual (AUTORIDADE NTSERVIÇO DE REDE) não tem acesso para gravar em ‘C:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Files’.”

    • Carlos dos Santos says:

      Junior,
      Isto é problema de permissão no servidor. Basta você dar permissão para o usuário AUTORIDADE NTSERVIÇO DE REDE para esta pasta.

      []s,
      Carlos.

      • junior says:

        Carlos, nessa pasta não achei como adicionar esse usuário mais nos usuários que tinha coloquei todos como “permissão total” e finalmente a página abriu,sendo que tenho uma página de login que é a página padrão apenas criei uma classe que herda da MemberShipProvider para validar meus usuários verificando em meu banco próprio qdo clico no acessar onde ele vai chamar “http://localhost/centrodados/Account/Login.aspx” dá o seguinte erro :

        “Mensagem de erro 401.2.: Não autorizado: falha no logon devido à configuração do servidor. Verifique se você tem permissão para exibir esse diretório ou página com base nas credenciais fornecidas e nos métodos de autenticação habilitados no servidor Web. Contate o administrador do servidor Web para obter assistência adicional.”

        Detalhe estou acessando meu banco de dados com entity framework e o servidor de banco é um servidor a parte diferente do servidor do IIS.

  7. Carlos dos Santos says:

    Veja se a página que é acessada logo após o login existe e você consegue acessar. Isto ainda parece problema de permissão de pasta.

    []s,
    Carlos.

  8. junior says:

    Carlos, tenho alguns sites já publicados no windows server 2003 e sempre achei muito prático publicar páginas lá pois copiava toda a estrutura de pastas e sempre que atualizo o projeto pego apenas a dll e salvo no servidor, pronto está atulizado o site, agora não, tudo é bem diferente, mais vamos lá. Olhando a pasta criada no servidor notei que dentro da pasta account tinha um web como se fosse um web config e nele estava apontando para o register.aspx, mudei para login.aspx e a página apareceu e dou login, sendo que eu testo no load do site.master para ver se foi autentiticado e conforme essa autenticação eu crio um menu, informo o usuário e senha não dá erro mais tb não me monta o menu como tb não me monta algumas informações do usuário que crio session qdo o login é feito com sucesso.

    assim
    if (HttpContext.Current.User.Identity.IsAuthenticated && HttpContext.Current.User.IsInRole(“RADIO”))

    Ví em alguns sites que existe o package/publish sql onde passo todas as informações sobre meu acesso ao banco de dados, será que preciso informar isso ?

  9. Carlos dos Santos says:

    Junior,
    Esta aplicação funciona em sua máquina local ?

    []s,
    Carlos.

    • junior says:

      Funciona normalmente, Carlos notei um detalhe interessante a página original é essa

      http://sol/centrodados/

      Qdo informo o usuário e senha ele fica assim

      http://sol/centrodados/(F(T8r69wSjwU8CcgBhAGQAaQBvAAAAXeugeF9XzAEAXR-DqWNXzAEAAC8AAAA1))/default.aspx

      Realmente ele é para ir para a default.aspx lá eu verifico se a página foi autenticada e se foi foi no banco e pesquiso os funcionários e preencho um gridview com os aniversariantes do mes, isso não aparece, pensei tb que poderia ser que ele não tivesse indo no banco fazer o teste do usuario e senha, mais se informo a senha ou usuário inválido ele testa e diz que houve erro no login, então ele está indo no banco verificar.

      Só não sei pq ele colocou tudo isso na url

      Detalhe: criei um pasta chamada forms e nela criei subpastas onde está as páginas aspx, pensei que seria questão de permissão tb dentro dessa pasta e então fiz a mesma coisa que fiz nas outras coloquei controle total para todos os usuário, mais continua do mesmo jeito.

      • Carlos dos Santos says:

        Junior,
        Realmente parece problema na aplicação. Acho que seria interessante você dar uma revisada geral no processo de login, talvez inicialmente implementando um login mais simples para ver se o problema não é com o membership.

        []s,
        Carlos.

        • junior says:

          Carlos, esse provider eu criei uma pasta chamada seguranca e coloquei as duas classes dentro dela e notei que no servidor nao foi criada essa pasta e qdo publiquei não deu erro o que pode ser ?

          Tentei publicar agora e deu erro, mais não me mostra os erros, onde eu posso ver os erros na publicação ?

  10. Carlos dos Santos says:

    Junior,
    Como você está publicando, pelo visual studio ?

    []s,
    Carlos.

    • junior says:

      Sim estou fazendo como vc mostrou clico no projeto e vou em publish e escolho File system e aponto para meu servidor do IIS, deu certo assim qdo fiz a primeira vez, agora esta dando erro.

      • junior says:

        Carlos só para te deixar mais atualizado é o seguinte qdo vou na opção filesystem dá erro mais não mostra o erro, mais se eu for na opção web deploy ele diz que a URL do serviço web deploy esta inválida.

        O nome do meu servidor é sol e coloquei a aplicação no c:/inetpub/wwwroot/aplicação no web deploy estou informando assim no service url //sol/aplicacao ou será que tenho que colocar o caminho como um todo ?

        Instalei no servidor iis o web deployment agent

        qualquer coisa meu msn é junior_luiz@hotmail.com

  11. Carlos dos Santos says:

    Junior,
    Se voce configurou corretamente o IIS o problema só pode estar na aplicação, mas neste caso precisaria ver o código fonte para entender o problema.

    []s,
    Carlos.

  12. Carlos dos Santos says:

    Junior,
    Quando você faz o deploy pelo VS usando FileSystem, ele copia todos os arquivos necessários para a aplicação funcionar na pasta que você selecionou. Se a aplicação no IIS estiver apontando para o mesmo local e usando o mesmo framework no pool de aplicativos, então deve funcionar da mesma maneira que quando você roda de dentro do VS.

    []s,
    Carlos

    • junior says:

      Carlos eu entendi, mais pq não levou a pasta segurança, pois é dentro desta pasta que tenho as classes do membershipprovider e rolerprovider ?

      E não é a mesma coisa que eu copiá-la na mão ?

      E outra dúvida no publish na opção deploy web qual o caminho que devo colocar, pois dá o erro dizendo que url do serviço deploy esta inválida.

      No servidor IIS coloquei a aplicação na pasta c:/inetpub/wwwroot, nesse caso como deveria colocar o caminho na url do deploy ?

  13. Carlos dos Santos says:

    Junior,
    Você não pode copiar a pasta do seu projeto e colocar no IIS, precisa fazer o publish, pois neste processo as DLLs são compiladas e separadas. O caminho do publish pode ser uma pasta qualquer do seu disco, por exemplo c:temp. Depois você copia todos os arquivos desta pasta para a pasta do seu IIS, ou publica diretamente na pasta do IIS se o servidor for local. O ideal é criar uma pasta em seu servidor, pode até ser abaixo de wwwroot, por exemplo: c:inetpubwwwrootminhaaplicacao e neste caso a aplicação no IIS (conforme post) deverá apontar para este mesmo diretório.

    []s,
    Carlos.

    • junior says:

      Carlos só para constar, instalei o iis em um micro com XP e publiquei o site lá, sem nenhuma alteração e funciona perfeito, como funciona no meu micro.

  14. Carlos dos Santos says:

    Junior,
    Pode então ser algum problema na instalação do seu IIS. Da uma olhada no EventViewer do Windows, talvez você ache alguma informação relevante lá.

    []s,
    Carlos.

  15. Victor says:

    Tu falou que posso acessar a aplicação em ambiente de desenvolvimento (no servidor do vs) pela rede local. Mas não consigo! Tem como me ajudar? Obrigado!

  16. Carlos dos Santos says:

    Victor,
    Quando você roda a aplicação pelo Visual Studio, ele sobre um servidor de desenvolvimento com uma porta específica, tipo: http://localhost:1754/aplicacao.aspx
    Para acessar via rede você precisa liberar isto no firewall da máquina.
    []s,

  17. Olá Carlos,
    Muito boa noite.

    Pode ajudar, estou tentando fazer o upload de um projeto teste neste caminho http://www.brasilbares.com.br/icashcontrol/default.htm porem ele dá erro de dll faltando, porem as dll estão na pasta BIN e essa pasta está como aplicação. Tem ideia de como devo proceder para conseguir informar ao servidor web onde ele deve encontrar as dll, lembrando que estou usando o uol host e não posso ir no servidor e alteração sua configuração teria de ser via web.config

    TODA AJUDA É MUITO BEM VINDA.

  18. Carlos dos Santos says:

    Francisco,
    A pasta que está como aplicação deve ser a pasta principal do projeto e não a BIN. Foi isto que você fez ?
    []s,
    Carlos.

  19. Boa tarde…, estou com o seguinte problema: o internet explorer (IIS 6 (Windows Server 2008 r2)) está exibindo a árvore de diretório ao invés da página em sí, o que pode ser?

    Em outra máquina está funcionando corretamente a minha aplicação.

  20. Boa tarde…, estou com o seguinte problema: o internet explorer (IIS 6 (Windows Server 2008 r2)) está exibindo a árvore de diretório ao invés da página em sí, o que pode ser?

    Em outra máquina está funcionando corretamente a minha aplicação.

  21. Junior says:

    Carlos, estou aqui mais uma vez, tenho uma solution(vs2010) e nela estou usando o reportviewer como gerador de relatórios, localmente tudo funciona, mais qdo publico ele carrega o report mais não exibe nada, nem mesmo o cabeçalho. Tenho uma página que fiz um handler que faz um autocomplete e novamente o mesmo problema localmente funciona mais qdo vou no site publicado e chamo essa página dá erro “referencia não definida” acho que é a chamada o handler, mais qdo vou na pasta do iis ele está lá.

    Só conseguir fazer com que os relatórios sejam exibidos colocando em páginas que não herdamm da masterpage e abrindo um pop-up com window.open

    Inicialmente achava que o problema estivesse no report, mais agora vejo que não, vc teria algo que pudesse ocasionar isso ? Será que o problema está na publicação ?

  22. IVO says:

    Primeiramente, parabéns pelo artigo. Muito bom.
    Desde 2007 tenho uma aplicação .Net 2.0 que, na época, bastava criar um diretório virtual no IIS 6. Já no IIS 7, continuei a criar o tal diretório virtual. Bom, hoje, tenho um cliente testando o WinSrv 2012 e IIS 8. Gostaria de entender, primeiro, qual a diferença entre “add diretório virtual” e “add application”.
    Obrigado. Ivo.

  23. Carlos dos Santos says:

    Uma aplicação virtual está ligada ao .Net Framework, por exemplo Asp.Net. Se você cria uma aplicação “pura” em html, precisa somente de um diretório virtual.

  24. Marcos says:

    Primeiramente parabens pela publicação, muito esclarecedor e didatico.

    Eu estou precisando de ajuda , pois no meu computador qdo vou esclher a ‘POOL’
    somente as tres primeiras opções(as que aparecem na imagem da publicação)
    preciso de uma ‘luz’ sobre esta questao…. por exemplo, se tenho q atualizar algo,
    ou alguma outra coisa q deve ser feito.

    Obrigado pela atenção.

  25. Marcos says:

    Bom e o seguinte:
    estou desenvolvendo uma aplicação em mvc no vs13
    porem ela so esta rodando localmente, e creio q seja algum problema
    de com o iis, qdo fui configura-lo so tinha 3 opções de pool(defaultapppool;classic.netpool; easp.net4.0)

    desde ja agrdeço..

  26. Loas says:

    Olá Carlos.

    Tenho uma aplicação Silverlight que roda perfeitamente no meu computador. Quando publico, não aparecem os gráficos da minha aplicação, mas também não dá erro.

    Criei um diretório virtual no IIS…

    Alguma dica?

    Agradeço a ajuda.

    Loas

  27. caio says:

    Criei a aplicação e rodou no meu computador só não estou conseguindo acessar ela de outro computador da minha rede, tenho que mapear esta pasta? qual seria um exemplo de url?

Leave a Reply

In an effort to prevent automatic filling, you should perform a task displayed below.


WP-SpamFree by Pole Position Marketing