Português English Espanol

Diferença entre Web Site e Web Application no ASP.net

segunda-feira, 18 de outubro de 2010 23:36 | 

Já me perguntaram várias vezes qual a diferença entre WebSite e WebApplication no Visual Studio (onde WebSite está presente apenas nas versões 2005, 2008 e 2010). Se você não está familiarizado com o Visual Studio 2005/2008/2010 pode achar que um WebApplication e WebSite são a mesma coisa. Gostaria de contar uma história para esclarecer ainda mais.

No Visual 2002 e 2003 só havia WebApplication e nunca se falou em WebSite. Com a chegada do Visual Studio 2005, juntamente com o framework .net 2.0, surgiu o que a Microsoft achava ser a salvação do mundo colaborativo de codificação: o WebSite.

Adivinhem o que aconteceu no lançamento do Visual Studio 2005? O VS 2005 para projetos web tinha apenas a opção de WebSite e então começaram as reclamações da comunidade asp.net. As reclamações ganharam força e a Microsoft lançou no Service Pack 1 do Visual Studio 2005 a opção de WebApplication muito similar das versões 2002 e 2003 (Vale lembrar: antes do Service Pack 1 foi lançado uma atualização específica para suportar WebApplication, mas quem ainda utiliza o VS 2005 recomendo atualizar o SP1 e demais atualizações do Microsoft Update).

WebSite no Visual Studio

Um WebSite é apenas um grupo de arquivos em uma pasta e subpastas onde as classes estão em um mesmo namespace (no Java, namespace é similar ao package).

Algo interessante no WebSite é que ao depurar uma aplicação, é possível alterar o código-fonte de uma classe (.cs ou .vb) e continuar depurando obedecendo suas alterações na depuração, algo que o WebApplication não faz.

Você pode criar um WebSite utilizando o menu “File > New> Web Site...”. Há três opções da localização dos arquivos:

  • File System: Permite escolher uma pasta física.
  • HTTP: Permite escolher uma pasta virtual.
  • FTP: Permite escolher um endereço de FTP.

Em qualquer um dos casos acima nenhum arquivo de projeto (.csproj ou .vbproj) é criado automaticamente. Não haverá uma pasta “bin” (exceto no deploy - explicação abaixo) nem um único arquivo assembly (dll).

A maior diferença entre o WebSite e WebApplication está no deployment (“Publish”). O deploy realizado no WebApplication consiste simplesmente em uma DLL para cada projeto em uma solução (.sln). Já no WebSite temos 3 opções de deployment descritas abaixo:

  1. Código totalmente aberto: Esse tipo de deployment deixa todo seu código-fonte no servidor de hospedagem, incluindo as classes.
    Para efetuar este tipo de deployment, basta copiar todos os arquivos da pasta do WebSite para o servidor Web ou utilizar a opção "Copy WebSite" que encontra-se no ícone abaixo:
    website1
     
  2. Código-fonte das classes pré-compiladas e páginas (.aspx) com o código aberto.
    Para publicar seu site onde apenas as classes devem ser pré-compiladas, você deve deixar seu "Publish WebSite" assim:
    website2
     
  3. Todo o website pré-compilado, inclusive as páginas (.aspx).
    Nesta opção as páginas (ASPX) estarão com uma linha de código apenas: "This is a marker file generated by the precompilation tool, and should not be deleted!", ou seja, o arquivo serve apenas para o servidor web saber que a página existe, pois todo o conteúdo estará pré-compilado na pasta "bin".
    website3

Uma dica para quem utiliza os tipos 2 e 3: Utilize a opção "Used fixed naming and single page assemblies". Esta opção vai definir nomes fixos para os arquivos DLL. Se não utilizar esta opção, a cada deploy gerado as DLL mudam de nome e você ficará com arquivos inutilizados dentro da sua pasta BIN (se você apaga todo o seu site antes de publicá-lo, não fará diferença utilizar esta opção).

Web Application no Visual Studio

Para criar um WebApplication: File > New > Project. Selecione Web e escolha o tipo de aplicação ASP.NET Web Application.

webapplication

Um "Web Application Project" organiza os arquivos do projeto em um arquivo chamado <nomedoprojeto>.csproj (para C#) ou <nomedoprojeto>.vbproj (para VB.net). Esses arquivos podem ser úteis para quem faz deploy automático juntamente com o Source Safe criando "labels", por exemplo.

Seu único tipo de build / deployment gera um único arquivo DLL (pré-compilação) que fica na pasta BIN do projeto. No WebSite tudo que é adicionado participa do deploy, já no Web Application é possível colocar arquivos DOC, por exemplo, e setá-los para não participarem do Deployment. Para isso clique com o botão direito do mouse no arquivo desejado dentro do projeto e em seguida em "Properties", modifique a opção "Build Action" para "None".

WebApplication tem suas classes organizadas por namespaces, podendo ser criada classes em qualquer pasta do projeto, diferentemente do que ocorre no WebSite onde é possível apenas inserir classes na pasta App_Code.

Performance

Sabemos que o .net tem 2 fases de compilação: A primeira quando você faz o Build é a que chamamos de pré-compilação onde os arquivos DLLs estão pré-compilados em uma linguagem comum (Intermediate Language) para o Framework .NET. A segunda é quando a aplicação é executada, neste momento ocorre a compilação binária.

Devido a compilação da aplicação ocorrer 2 vezes, a velocidade no WebSite é questionada e dependerá do tipo de deployment (já visto acima) utilizado. A opção 3 de deploy do WebSite deve ser considerada a mais veloz, mas com testes realizados no cliente (navegador) o resultado é imperceptível comparado ao WebApplication.

Comparação WebSite X Web Application

   WebApplication WebSite
Arquivo de projeto Sim Não
Pasta App_Code Sim* Sim
Classes organizadas por Namespaces Sim Não
Opções de Deployment 1 3
Alteração das classes na Depuração (Debug) Não Sim
Alteração na página (.aspx) na Depuração (Debug) Sim Sim
Properties do Arquivo no projeto Sim Não


*é necessário criá-la manualmente com a opção New Folder e, se necessário, mudar a Propriedade "Build Action" das classes dentro da App_Code para "Compile".

Conclusão

Utilizar WebSite ou Web Application pode parecer, dependendo do caso, indiferente, por isso é preciso analisar seu ambiente, seu modo de gerenciar o código-fonte, versionamento e a geração de builds e deployments.

Pela experiência com aplicações ASP.NET, percebi que o WebSite já causou alguns problemas na empresa onde trabalho em relação a referências, deployments e versionamento com Source Safe (às vezes por falta de conhecimento mesmo).

Em um Web Application você tem maior controle de configuração, principalmente porque temos propriedades do projeto e as propriedades de cada arquivo no Visual Studio. Devido a essas propriedades você consegue trabalhar melhor com objetos COM+ (por exemplo, definindo Copy Local = true na referência). Também pode gerar builds em modo Debug e/ou Release e seu código-fonte é organizado em namespaces.

Provavelmente se você utiliza o Visual Studio apenas em casa para projetos pessoais pode acabar gostando do WebSite, mas utilizando em grandes projetos empresariais onde Build e Deployment são peças chaves do processo, o Web Application acaba sendo a melhor opção.


Tags: website, web application, asp.net, visual studio.


Comentários
 

Deixe seu comentário
 
   
 
 
  500 caracteres restantes.
ENVIAR COMENTÁRIO
carregando

10 Comentários
BrasilStephan Garcia (Brasil)
quinta-feira, 11 de novembro de 2010 11:06:00
Parabéns!
United StatesKarl Lass (United States)
segunda-feira, 15 de novembro de 2010 15:40:42
Really thanks for your useful article!
best regards
IndiaManoj Kumar (India)
quarta-feira, 24 de novembro de 2010 7:55:20
Hey thanks for writing this, I always wanted to understand that!
IndiaSantosh Singh (India)
sexta-feira, 4 de março de 2011 4:59:04
Hi ,
Your article differentiate better diff between website project and website App project clearly. I understood now.
Thanks!
BrasilRoberto Gullo (Brasil)
terça-feira, 15 de março de 2011 17:17:25
Muito bom ! Muito explicativo !
EcuadorHugo Landines (Ecuador)
terça-feira, 19 de abril de 2011 17:21:09
Muchas gracias Mauricio por la explicacion, muy clara.
MexicoAlejandro Rivera (Mexico)
quinta-feira, 30 de junho de 2011 0:46:42
Yo siempre trabajo con WebSites y nunca he tenido problemas, de hecho si hay algo que me gusta mucho de los websites es que cuando lo ejecutas para programar corre mas rapido que un website y esto es debido a que el website primero se compila antes de ser executado, cosa que no ocurre con el website.

Pero bueno como dices, es cuestion de gustos y necesidades.

Saludos...
BrasilAndre (Brasil)
quinta-feira, 7 de julho de 2011 16:52:42
Muito legal bem esclarecedor esta zona toda da microsoft vlw..
BrasilMarcos Júnior Lopes (Brasil)
sexta-feira, 7 de outubro de 2011 10:40:24
Muito bom este poste. Deu para esclarecer as diferenças.
Parabens!!
IndiaDevi (India)
segunda-feira, 10 de outubro de 2011 4:05:53
I like one benefit of using Website instead of Web Application and that is
"You can create two Web Forms in a single WebSite with different language (one in VB and another in C#) but you can't do the same in Web Application."