ASP.NET – Anatomia de uma aplicação
Estamos de volta com mais um tutorial sobre ASP.NET. Hoje iremos falar sobre os componentes que fazem parte de uma aplicação ASP.NET. Fiquem atentos e participem neste brainstorming de programação.
1. Anatomia
Estrutura de directorias:
- BIN - Esta directoria contém todas as DLL que a aplicação utiliza. Se criarmos um WebProject no Visual Studio, esta directoria irá também conter o código compilado da nossa aplicação.
- APP_CODE - Nesta directoria ficam todas as classes compiladas dinamicamente. Se criarmos um WebProject no Visual Studio, esta directoria não será necessária.
- APP_GLOBALRESOURCES - Esta directoria contém recursos globais que são utilizados por todas as páginas da aplicação.
- APP_LOCALRESOURCES - Como a directoria GlobalResources, esta pasta guarda recursos mas, apenas para a página associada.
- APP_WEBREFERENCES - Esta directoria guarda referências de WebServices que a aplicação utilize.
- APP_DATA - Esta directoria está reservada para "Data Storage", como bases de dados SQL Express ou ficheiros XML. Claro que, podemos colocá-los noutra directoria.
- APP_BROWSERS - Esta directoria contém ficheiros XML com definições de Browsers, o que torna possível várias renderizações entre Browsers.
- APP_THEMES - Esta directoria contém os Temas utilizados na aplicação.
2. Global.asax
O ficheiro Global.asax, permite escrever código que reage a eventos globais da aplicação. Não é possivel fazer o request directo ao Global.asax, ao invés o ficheiro Global.asax é executado automáticamente em responsta a diferentes eventos da aplicação.
O ficheiro Global.asax é opcional, só é possivel ter um por aplicação e tem de estar na root.
Lista de eventos da aplicação
- Application_BeginRequest() - Este método é chamado a cada novo Request.
- Application_EndRequest() - Este método é chamado no fim de cada Request
- Application_Start() - Este método é invocado sempre que a aplicação é iniciada.
- Session_Start() - Este método é invocado no inicio de cada nova sessão.
- Application_Error() - Este método é invocada quando uma excepção não controlada acontece na aplicação
- Session_End() - Este método é invocado quando uma sessão do utilizador termina. Uma sessão pode terminar, forçando a mesma ou por timeout, normalmente 20 minutos.
- Application_End() - Este método é invocado quando uma aplicação termina.
3. Configurações ASP.NET
As configurações de uma aplicação ASP.NET são efectuadas em ficheiros XML. As grande vantagens deste mecanismo são, os ficheiros nunca ficam bloqueados, são de fácil acesso, leitura, alteração e replicação.
As configurações começam num ficheiro chamado, machine.config. Este ficheiro encontra-se na directoria "c:\windows\microsoft.net\framework\[versão]\config". Este é o primeiro ficheiro de configuração de ASP.NET e contém as configurações mais criticas da aplicação.
<MachineKey> - Esta elemento na configuração do ficheiro machine.config, é responsável pela encriptação das aplicações ASP.NET. Protege os cookies de sessão e pode proteger também o ViewState.
Na mesma pasta do ficheiro machine.config, existe outro ficheiro web.config, que contém mais configurações.
Apesar de existirem estes ficheiros de configuração globais (utilizados em todas as aplicações ASP.NET no servidor), normalmente as configurações são efecutadas por aplicação, com um ou mais, ficheiros Web.config.
No ficheiro de configuração podemos, guardar ligações a bases de dados e configurações particulares de cada aplicação.
Dentro do ficheiro Web.config, um dos atributos mais importantes é o <system.web>, dentro deste atributo existem muitas configurações que podemos costumizar.
- authentication - este elemento configura a autenticação na aplicação.
- compilation - este elemento identifica a versão da framework .NET. Também será aqui que indicamos se queremos ou não fazer debug na aplicação.
- customErrors - este elemento permite definir URL para reencaminhar um pedido, quando um determinado erro ocorre.
- membership - este elemento permite configurar a funcionaliade de gestão de utilizadores do ASP.NET
- pages - este elemento define definições para as páginas
- profile - este elemento permite configurar o mecanismo de profiles do ASP.NET
- sessionState - este elemento permite alterar as configurações de como é guardada e gerida a Sessão.
- trace - este elemento configura o tracing na aplicação.
Além de configurar tudo manualmente o ASP.NET fornece uma ferramenta visual para fazer alterações no Web.config. Através desta aplicação, podemos configurar utilizadores, settings, email.
Para aceder a esta aplicação carregamos no botão que podemos observar na imagem em baixo.
Depois de carregar no botão, entramos na aplicação e podemos alterar as configurações da nossa aplicação.
4. Page Class
Todas as páginas ASP.NET são derivadas do objecto Page. Este é dos objectos mais importante e com mais funcionalidades do ASP.NET.
Request: Este objecto representa os valores e propriedades do Request Http que causou o carregamento da nossa página. Contém todos os parâmetros de URL e todas as informações enviadas pelo cliente.
- Cookies - contém uma colecção de Cookies enviados com o Request.
- Headers e ServerVariables - providenciam uma colecção de HTTP Headers e variáveis de servidor. São informações Low-Level do Request.
- IsAuthenticated - Verifica se o utilizador está autenticado.
- IsLocal - Verifica se o Request foi feito do Servidor.
- QueryString - Disponibiliza os parâmetros que foram passados no URL.
Response: Este objecto representa a resposta do Servidor a um Request do cliente.
- Cookies - contém uma colecção de Cookies enviados com o Response. Podemos usar este objecto para criar Cookies.
- Redirect() - este método dá instruções ao Browser para pedir um novo URL.
- Write() - este método permite escrever no output stream.
Server: Este objecto é uma classe de utilidades, disponibiliza muitos métodos e propriedades.
- MachineName - Nome da máquina em que a aplicação está ser executada.
- GetLastError() - Método que permite obter o último, muito utilizado no global.asax no método Application_Error().
- HtmlEncode() e HtmlDecode() - Altera o valor para HTML e vice-versa.
- MapPath() - Devolve o caminho físico que corresponde a uma pasta virtual.
- Transfer() - Redirecciona o pedido para outra página. Semelhante ao Response.Redirect mas mais rápido, pois o pedido é logo executado no servidor.
Neste tutorial incidimos sobre os componentes que fazem parte da anatomia de uma aplicação ASP.NET. No próximo tutorial vamos falar sobre state management (View State, Cookies, Session, Application).
Caso tenham alguma questão, coloquem nos comentários, terei todo o gosto em responder.
Este artigo tem mais de um ano
Obrigado Henrique, vou seguir atentamente os próximos capitulo.
Ora aqui está uma boa pagina para guardar para consultar coisitas basicas que escapam à memória 😛
Muito bom, sempre quis saber o que está por trás do nome Framework 😀
* Framework e ASP.NET
este esqueleto é mais do ASP.net uma vez que se fizeres um projecto em WPF ou windows forms as estruturas já são diferentes
Bom tutorial.
Já agora aproveito para colocar uma questão! 🙂
Uso membership no meu site, e estou a fazer o login a redireccionar para a propria pagina. No entanto não consigo de forma alguma ir buscar o utilizador.
Consegue dar-me uma ajuda!?
Com os melhores cumprimentos.
Viva,
Primeiro de tudo preciso de saber algumas coisas. Como está a fazer a autenticação do utilizador?
Como está a tentar retornar o utilizador? Membership.GetUser()? Se sim tente verificar que o utilizador está logado “User.Identity.IsAuthenticated” e verificar se esta propriedade “User.Identity.Name” é o username do utilizador.
No web.config verificar que tem este atributo “”
O que quer dizer “redireccionar para a propria pagina”? Que controlos está a utilizar para o login?
Cumprimentos.
Ficou sem o atributo 🙂
authentication mode=”Forms”
HTTPContext.Current.Identity.Name
Penso que seja assim, não tenho o código á frente por isso não te sei dizer exactamente, mas é mt semelhante a isso.
Desculpem o offtopic masnão se fala da mudança de interface do FaceBook?
Não…
Já não vamos a tempo de ganhar dinheiro com esse, mais vale aprender a construir outros! 😀
Abraço!
Gostaria que fosse abordado melhor a pasta App_Theme com mais detalhes! Incluindo as imagens, css e libs (tipo jQuery)…
Tenho uma questão sim senhor:
Disseste que é possível actualizar a aplicação sem, no entanto, fazer restart à aplicação. Eu tenho a ideia que não é possível fazer isso quando as actualização não são de código propriamente dito, mas sim de ficheiros de css, skins, temas, aspx, entre outros e quando se está a trabalhar com WebProjects. Tenho também a ideia que quando se trabalha com Sites, aí sim, podem-se fazer actualizações a tudo, embora que neste casos existam outras desvantagens…
Por isso a minha questão vai no sentido de saber com mais detalhe em que situações e em que tipo de projecto é possível fazer esses updates sem ser necessário fazer restart à aplicação.
Viva,
Colocas uma boa questão.
O ASP.NET cria um novo Application Domain no primeiro Request da aplicação.
O ASP.NET automaticamente recicla o Application Domain, quando alteramos a aplicação, quer seja a configuração, um ficheiro de código, página e até uma Dll.
O ASP.NET cria um novo Application Domain para os Requests futuros e mantém o antigo o tempo suficiente para que os pedidos anteriores terminem.
Isto é válido para qualquer tipo de projecto mas, como é óbvio, num WebProject temos de compilar tudo novamente e passar essa dll, num WebSite apenas passamos o ficheiro alterado. Depois disto o restart é efectuado.
Este é um bom link.
http://odetocode.com/articles/305.aspx
Espero ter ajudado.
Cumprimentos.
Sim ajudaste.
Obrigado.
O restart é sempre feito á aplicação, o que não precisa fazer restart é o servidor aplicacional. Certo Henrique?