Escolar Documentos
Profissional Documentos
Cultura Documentos
www.marcelosincic.com.br
Pgina 1 de 41
Ol, Criei estas apostilas a mais de 5 anos e atualizei uma srie delas com alguns dados adicionais. Muitas partes desta apostila est desatualizada, mas servir para quem quer tirar uma dvida ou aprender sobre .Net e as outras tecnologias.
Perfil Microsoft: https://www.mcpvirtualbusinesscard.com/VBCServer/msincic/profile Marcelo Sincic trabalha com informtica desde 1988. Durante anos trabalhou com desenvolvimento (iniciando com Dbase III e Clipper S'87) e com redes (Novell 2.0 e Lantastic). Hoje atua como consultor e instrutor para diversos parceiros e clientes Microsoft. Recebeu em abril de 2009 o prmio Latin American MCT Awards no MCT Summit 2009, um prmio entregue a apenas 5 instrutores de toda a Amrica Latina (http://www.marcelosincic.eti.br/Blog/post/Microsoft-MCT-Awards-AmericaLatina.aspx). Recebeu em setembro de 2009 o prmio IT HERO da equipe Microsoft Technet Brasil em reconhecimento a projeto desenvolvido (http://www.marcelosincic.eti.br/Blog/post/IT-Hero-Microsoft-TechNet.aspx). Em Novembro de 2009 recebeu novamente um premio do programa IT Hero agora na categoria de especialistas (http://www.marcelosincic.eti.br/Blog/post/TechNet-IT-Hero-Especialista-Selecionado-o-nosso-projeto-de-OCS2007.aspx). Acumula por 5 vezes certificaes com o ttulo Charter Member, indicando estar entre os primeiros do mundo a se certificarem profissionalmente em Windows 2008 e Windows 7.
Possui diversas certificaes oficiais de TI: MCITP - Microsoft Certified IT Professional Database Administrator SQL Server 2008 MCITP - Microsoft Certified IT Professional Database Administrator SQL Server 2005 MCITP - Microsoft Certified IT Professional Windows Server 2008 Admin MCITP - Microsoft Certified IT Professional Enterprise Administrator Windows 7 Charter Member MCITP - Microsoft Certified IT Professional Enterprise Support Technical MCPD - Microsoft Certified Professional Developer: Web Applications MCTS - Microsoft Certified Technology Specialist: Windows 7 Charter Member MCTS - Microsoft Certified Technology Specialist: Windows Mobile 6. Charter Member MCTS - Microsoft Certified Technology Specialist: Windows 2008 Active Directory Charter Member MCTS - Microsoft Certified Technology Specialist: Windows 2008 Networking Charter Member MCTS - Microsoft Certified Technology Specialist: System Center Configuration Manager MCTS - Microsoft Certified Technology Specialist: System Center Operations Manager MCTS - Microsoft Certified Technology Specialist: Exchange 2007 MCTS - Microsoft Certified Technology Specialist: Windows Sharepoint Services 3.0 MCTS - Microsoft Certified Technology Specialist: SQL Server 2008 MCTS - Microsoft Certified Technology Specialist: .NET Framework 3.5, ASP.NET Applications MCTS - Microsoft Certified Technology Specialist: SQL Server 2005 MCTS - Microsoft Certified Technology Specialist: Windows Vista MCTS - Microsoft Certified Technology Specialist: .NET Famework 2.0 MCDBA Microsoft Certified Database Administrator (SQL Server 2000/OLAP/BI) MCAD Microsoft Certified Application Developer .NET MCSA 2000 Microsoft Certified System Administrator Windows 2000 MCSA 2003 Microsoft Certified System Administrator Windows 2003 Microsoft Small and Medium Business Specialist MCP Visual Basic e ASP MCT Microsoft Certified Trainer SUN Java Trainer Java Core Trainer Approved IBM Certified System Administrator Lotus Domino 6.0/6.5
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 2 de 41
1 2
Arquitetura do ASP.NET.................................................................................4 Formulrios .....................................................................................................6 2.1 Propriedades do Projeto .........................................................................6 2.2 Criao e Configurao de Pginas.......................................................7 2.2.1 ViewState e Postback ............................................................................8 2.2.2 Utilizando Cdigos na Pgina ................................................................8 2.2.3 Navegando entre pginas ......................................................................9 2.2.4 Request e Response............................................................................ 10 2.3 Utilizando Controles .............................................................................. 11 2.3.1 Inserindo Cdigos em Controles .......................................................... 11 2.3.2 Codificao Interna .............................................................................. 13
Validadores ................................................................................................... 14 3.1 3.2 3.3 3.4 3.5 3.6 Validador de Campo Obrigatrio.......................................................... 14 Validador de Comparao .................................................................... 15 Validador de Faixa ................................................................................. 15 Validador de Expresso Regular .......................................................... 15 Validador Customizado ......................................................................... 16 Sumrio de Validadores ........................................................................ 17 Variveis de Aplicao .......................................................................... 18 Variveis de Sesso .............................................................................. 18 Cookies ................................................................................................... 19 Master Page ........................................................................................... 19 Themes ................................................................................................... 21 Skins ....................................................................................................... 23
5 6
AJAX.Net ....................................................................................................... 24 Utilizando Controles com DataSet .............................................................. 27 6.1 Utilizando DropDownList e ListBox ..................................................... 28 6.2 Utilizando o DataGrid ............................................................................ 30 6.2.1 Utilizando Link no Grid ......................................................................... 31
7 8
Criando Controles Customizados ............................................................... 34 Segurana de Acesso................................................................................... 36 8.1 8.2 8.3 Autenticao Annima .......................................................................... 36 Autenticao pelo Windows ................................................................. 36 Autenticao por Formulrio ................................................................ 37
Reproduo e distribuio livre
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 3 de 41
Autenticao por Passport ................................................................... 37 Mensagens Customizadas no Trace .................................................... 40 Tipos de Sada ....................................................................................... 40
10 Distribuio ................................................................................................... 41
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 4 de 41
1 Arquitetura do ASP.NET
Uma aplicao baseada em formulrios Windows utiliza os recursos locais da mquina do cliente, necessitando que instale o .NET Framework e um poder de processamento acima de Pentium II 300 e memria de 64 MB, alem de exigir Windows 98 ou superior. Com estas caractersticas limitamos em muito a distribuio e utilizao fora do ambiente corporativo. Com os recursos presentes e adicionados nos browsers web e a aplicao de servidores inteligentes e no apenas transmissores de textos, foi possvel criar um ambiente de aplicaes rico e funcional. Podemos separar os modelos de comunicao e processamento web na famlia Microsoft em 3 fazes. A primeira fase iniciou-se com o Windows NT 4.0 e o IIS 2.0 que fazia apenas o transporte de dados, recebendo uma solicitao de pgina e retornando o texto do html sem qualquer processamento prvio antes da resposta:
Na segunda fase os servidores passaram a ser inteligentes e permitiam o processamento da pgina antes de retornar ao cliente, este processo foi feito com o sistema IDC/HTX e ASP. Nesta poca os arquivos de processamento, como o ASP, uma pgina continha tags html e tambm tags de servidor, como o exemplo abaixo:
<HTML> <P>Bem Vindo</P> <P>Agora so <%Request.Write(Time())%></P> </HTML>
As linhas delimitadas pelo sinal <% eram tags chamadas de diretivas, ou seja, cdigo que antes de retornar ao cliente era processada, e o que chegava no cliente era:
<HTML> <P>Bem Vindo</P> <P>Agora so 09:41:30</P> </HTML>
Este modelo era lento pois o servidor era obrigado a ler a pgina e substituir os dados, ou seja, trabalhava em modo interpretado, ocasionando erros de desenvolvimento e a sintaxe para os programadores no era bem checada por no haver compilao. Para ganhar performance eram criados componentes compilados e chamados pelas diretivas para serem includos. Outra desvantagem do ASP era a necessidade de montar a pgina manualmente, uma vez que era necessrio colocar a diretiva exatamente no local onde queremos que aparece a hora, como no exemplo acima.
www.marcelosincic.com.br Reproduo e distribuio livre
Verso: 2.0
www.marcelosincic.com.br
Pgina 5 de 41
No modelo atual as pginas no precisam ser processadas, uma vez que as diretivas no precisam mais ser utilizadas e passamos a ter o conceito de Code Behind, onde a parte dos cdigos compilada e se transforma em uma dll e a pgina com as tags html ficam em um arquivo texto comum, que ser mesclado ao resultado do processamento da dll. Ganha-se performance por no mais interpretar o cdigo pgina por pgina e a construo dos cdigos idntica ao desenvolvimento comum, onde colocamos uma caixa de texto na pgina e a manipulamos utilizando os mtodos e propriedades comuns, como feito em aplicaes de formulrios Windows. Outra interessante incluso a capacidade do servidor adaptar a pgina e o retorno html ao cliente conforme a verso do browser e sistema operacional, incluindo celular wap. O modelo grfico pode ser representado da seguinte forma:
Os processamentos de objetos, por exemplo, quando se clica em um boto chamado de postback, ou seja, os dados da pgina so enviados para o servidor, este processa monta o retorno e devolve a pgina atualizada, como veremos durante este curso.
www.marcelosincic.com.br Reproduo e distribuio livre
Verso: 2.0
www.marcelosincic.com.br
Pgina 6 de 41
2 Formulrios
Assim como uma aplicao de formulrios, uma aplicao ASP.NET um projeto com estrutura de diretrios, podendo utilizar classes, namespace e todos os outros recursos do framework. Cada projeto web cria um subdiretrio no servidor web e dentro deste um diretrio de nome bin onde estar a dll de todas as pginas. Ou seja, para cada pgina criada, que tambm pode ser chamada de formulrio web, criado um arquivo com extenso aspx que contem o html da pgina e um arquivo com extenso aspx.cs ou aspx.vb dependendo da linguagem, e neste residem os cdigos. Os arquivos aspx por ser o modelo html da pgina copiado normalmente para funcionamento, enquanto os arquivos de cdigo no so copiados pois todos eles se transformam na dll do site, lembrando que cada projeto (que tambm um site) tem uma nica dll.
Ao utilizar este tipo de projeto automaticamente o VS 2008 ir abrir uma pgina de nome webform1.aspx que a pgina padro de todos os projetos. A figura abaixo mostra os principais componentes da aplicao web e do projeto:
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 7 de 41
Podemos criar novas pginas por clicar sobre o nome do projeto com o boto direito e escolher a opo Add...Web Form. Para renomear pginas clique com o boto direito sobre ela e escolha Rename. Ao renomear uma pgina note que o nome da classe no alterado, este teria que ser feito manualmente caso deseje.
Note que a primeira linha a configurao da pgina, onde identificamos no primeiro atributo a linguagem utilizada, na segunda tag temos o arquivo onde a classe com cdigos estar. A terceira tag estar sendo discutida a frente e a quarta tag, a mais importante, indica o nome da dll que ser compilada e o nome da classe que dever estar na dll. Ou seja, neste caso teremos um arquivo WebApplication1.dll no diretrio bin do site e dentro desta dll o CRL ir procurar uma classe chamada WebForm1 que tem os cdigos da pgina acima.
www.marcelosincic.com.br Reproduo e distribuio livre
Verso: 2.0
www.marcelosincic.com.br
Pgina 8 de 41
Ao alterar a tag de herana lembre-se de tambm renomear a classe, pois se na pgina estiver um nome e a classe estiver com outro nome no ser executado nenhum dos cdigos. Nas propriedades do objeto Document e form1 podemos configurar o titulo da pgina que aparece no browser, a imagem de fundo (marca dgua), som de fundo, linguagem dos scripts de cliente e de servidor, etc. Por ultimo, a aba keywords um texto livre utilizado pelos sites de busca como google, yahoo e outros para resumir a pgina, sendo opcional sua utilizao. 2.2.1 ViewState e Postback Nas propriedades do form1 temos a opes EnableViewState. Esta propriedade cria um campo oculto no formulrio com os dados preenchidos nos controles, evitando que tenhamos a necessidade de realimenta-los manualmente. Para entender melhor isto, precisamos entender o postback, uma vez que este processo essencial na arquitetura do ASP.NET. No ASP.NET existe apenas um form sempre. Para utilizar diversos botes no formulrio utilizamos sempre do tipo submit, o que permite que o servidor saiba qual boto foi clicado. O processo de postback quando o servidor recebe os dados que o cliente digitou em uma caixa de texto ou qualquer outro controle, faz o processo interno e retorna ao cliente a mesma pgina j com processo completo e devidamente alterada. Antes do ASP.NET quando uma pgina chamava outra e a pgina voltava do servidor as caixas de texto precisavam ser programaticamente preenchidas com os valores digitados. No ASP.NET isto no necessrio pois o prprio servidor se encarrega de devolver as caixas de texto e quaisquer outros controles j com os dados que estavam digitados. Podemos desligar o postback pela pgina ou pelo prprio controle, uma vez que todos os controles tem a propriedade AutoPostBack e EnableViewState. O autopostback muito utilizado em combo para que quando o usurio escolher um valor na lista, por exemplo o estado, este valor enviado ao servidor que popula a lista de Cidades e retorna ao cliente. A propriedade enableviewstate utilizada pois caso um controle no possa retornar preenchido, como senha, este valor desabilitado, impedindo que ao ser enviado ao servidor e retornar venha com o valor anterior. 2.2.2 Utilizando Cdigos na Pgina Para acessar cdigos, seja da pgina ou em controles, basta utilizar o duplo clique do mouse, assim como fazemos em formulrios windows.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 9 de 41
Veja a similaridade entre os eventos de uma aplicao Windows, como por exemplo, o TextChanged da caixa de texto, onde no Windows se chama apenas Changed, mas tem a mesma funcionalidade. Como exemplo de cdigo no carregamento da pgina podemos alterar o texto da caixa e o nome do boto, portanto teramos o cdigo abaixo no load: Agora temos um problema em decorrncia de termos utilizado o load, pois a cada postback este evento ocorre novamente e o nome do usurio perdido, por ser realimentado. Podemos evitar que isto acontea por testar se o load um postback ou se o primeiro carregamento desta pgina. A propriedade que permite isto IsPostback e utilizada como abaixo:
if(!IsPostBack) { TextBox1.Text = "Digite seu nome"; Button1.Text = "Clique Aqui"; } else Button1.Text = "Clique de novo..."; TextBox1.Text = "Digite seu nome"; Button1.Text = "Clique Aqui";
Com o cdigo acima, na primeira execuo a condio verdadeira, pois ainda no um postback, portanto a caixa de texto alimentada. No momento em que o boto for clicado o postback passa a ser verdadeiro e isto faz com que apenas o boto tenha seu texto alterado. 2.2.3 Navegando entre pginas Complementando o exemplo, ao digitar o nome correto no textbox queremos que seja redirecionado para o site da Curso, ento precisamos validar o que foi digitado e enviar o cliente para o site desejado.
www.marcelosincic.com.br Reproduo e distribuio livre
Verso: 2.0
www.marcelosincic.com.br
Pgina 10 de 41
Isto pode ser feito no evento click do boto, onde iremos verificar o que est digitado na caixa de texto e utilizando o objeto Response chamamos o mtodo Redirect onde informamos o URL. Veja o exemplo no cdigo abaixo que foi colocado no click do boto:
private void Button1_Click(object sender, System.EventArgs e) { if(TextBox1.Text == "taquaritinga") Response.Redirect("http://www.Curso.com.br"); }
Neste exemplo enviamos o usurio a pgina da Curso, mas em momento algum informamos a Curso de onde este usurio est vindo. Para isso utilizamos o mtodo get, ou seja, enviar dados entre pgina utlizando a URL. O cdigo alterado agora informando a origem seria:
private void Button1_Click(object sender, System.EventArgs e) { if(TextBox1.Text == "taquaritinga") { string URL = "http://www.Curso.com.br"; URL += "?Origem=" + TextBox1.Text; Response.Redirect(URL); } } http://www.Curso.com.br/?Origem=taquaritinga
Desta forma enviamos uma varivel para a pgina da Curso de nome Origem com valor taquaritinga. 2.2.4 Request e Response Para lermos um valor na pgina de destino utilizamos o objeto Request, como no exemplo acima, com o cdigo: Os objetos Request e Response so, respectivamente o representante ao cliente para o servidor e o representante servidor para o cliente. Ou seja, quando queremos ler algo que o cliente enviou para o servidor utilizamos request, e quando queremos do servidor enviar dados para o cliente utilizamos o response. As mais utilizamos propriedades do Request so:
Mtodo ou Propriedade Cookies Browser HttpMethod IsAuthenticated IsSecureConnection Path ServerVariables UserAgent UserHostName UserHostAddress UserLanguages Funo Permite ler os cookies do cliente Retorna as propriedades do tipo de browser do cliente Mtodo que o cliente utilizou para enviar dados Booleano indicando se o cliente est anonimo ou identificado Booleano indicando se a conexo se deu em HTTPS Indica o site e a pgina chamada pelo cliente Retorna um array com dados como o tipo de browser, IP do cliente, etc. Retorna o sistema operacional e verso do browser utilizado Nome do cliente, recebido atravs de DNS Endereo IP do cliente Array com os idiomas que o cliente suporta Label1.Text = Request["Origem"].ToString();
Como pode ser visto na relao, o objeto request nos fornece todos os dados necessrios para conhecer melhor o cliente e a conexo. O objeto response envia os dados para o cliente ou manipula a conexo:
Mtodo ou Propriedade Cookies Cache Close End Expires
www.marcelosincic.com.br
Funo Permite gravar cookies no cliente Configura cache do servidor para reaproveitamento de pginas prvias Fecha a conexo com o cliente, que recebe um erro Termina a resposta e envia o resultado imediatamente Define o tempo de expirao da pgina, que se ultrapassado o cliente deve refazer a consulta
Reproduo e distribuio livre
Verso: 2.0
www.marcelosincic.com.br
Pgina 11 de 41
Envia a resposta parcial ao cliente, til quando o resultado e muito grande Retorna um array com dados como o tipo de browser, IP do cliente, etc. Escreve cdigos html diretamente no resultado, permitindo flexibilidade na construo
Conhecer e saber utilizar os objetos request e response importante ao lidarmos com qualquer aplicao, pois com eles manipulamos chamadas e dados entre pginas.
A pgina acima foi criada com uma caixa de texto, um objeto legenda (label) e um boto. O cdigo de load da pgina faz o label ficar invisvel e o click do boto altera o text. Veja o cdigo utilizado abaixo:
private void Page_Load(object sender, System.EventArgs e) { Label1.Visible = false; if(!IsPostBack) { TextBox1.Text = "Digite seu nome"; Button1.Text = "Clique Aqui"; } else Button1.Text = "Clique de novo..."; } private void Button1_Click(object sender, System.EventArgs e) { Label1.Visible = true;
www.marcelosincic.com.br Reproduo e distribuio livre
Verso: 2.0
www.marcelosincic.com.br
Pgina 12 de 41
Agora vamos descrever um exemplo onde a primeira pgina recebe uma pequena ficha de inscrio e a segunda pgina mostra os dados. Abaixo o layout das duas pginas:
O cdigo implementado na pgina de cadastro ter cdigo apenas no boto, sendo o mtodo de envio dos dados por get, conforme o cdigo abaixo:
private void btnEnviar_Click(object sender, System.EventArgs e) { string URL = "RecebeCadastro.aspx"; URL += "?Nome=" + txtNome.Text; URL += "&Endereco=" + txtEndereco.Text; URL += "&Telefone=" + txtTelefone.Text; Response.Redirect(URL); }
Veja que concatenamos uma nica string e utilizamos para redirecionamento, sendo o endereo final aps a montagem, o seguinte cdigo:
http://localhost/WebApplication1/RecebeCadastro.aspx?Nome=aa&Endereco=bb&Telefone=cc
Na pgina que recebe o cadastro processamos os dados no load conforme o exemplo abaixo:
private void Page_Load(object sender, System.EventArgs e) { lblNome.Text = Request["Nome"].ToString();
www.marcelosincic.com.br Reproduo e distribuio livre
Verso: 2.0
www.marcelosincic.com.br
Pgina 13 de 41
2.3.2 Codificao Interna importante notarmos como o VS 2008 monta a estrutura das pginas e como esta referencia os controles para serem utilizados no cdigo. Todos os controles na pgina html precisam conter uma referencia no code behind conforme o cdigo abaixo:
public partial class Cadastro : System.Web.UI.Page { protected System.Web.UI.WebControls.Label Label1; protected System.Web.UI.WebControls.TextBox txtNome; protected System.Web.UI.WebControls.Label Label2; protected System.Web.UI.WebControls.TextBox txtEndereco; protected System.Web.UI.WebControls.Label Label3; protected System.Web.UI.WebControls.Button btnEnviar; protected System.Web.UI.WebControls.TextBox txtTelefone;
Veja que os cdigos acima referenciam cada um dos controles utilizados com o tipo e o nome utilizados. Portanto, ao renomear um controle, note que tambm precisamos renomear o cdigo de referencia. O mesmo acontece se for utilizado um editor de pginas html e incluirmos um controle, precisamos manualmente inserir a referencia a ele no code behind. Caso no seja includa uma referencia no code behind especfica com o mesmo nome da propriedade name no html, ao clicar no boto no sero disparados os eventos. Esse cuidado muito interessante pois no ocorrem erros de compilao se o controle html estiver com nome diferente, uma vez que posso utilizar normalmente controles html nativos por motivo de scripts, assim como tambm podemos criar objetos no code behind sem que estes sejam grficos.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 14 de 41
3 Validadores
O framework possui cinco controles prprios para validaes, sendo de comportamento automtico e til ao encapsularem cdigos trabalhosos, seja no cliente ou no servidor. Trataremos cada um destes controles individualmente a seguir
As propriedades mais importantes so ErrorMessage para mostrar a mensagem de erro desejada, ControlToValidate para indicar o nome do controle que est sendo validado, EnableClientScript para habilitar javascript diretamente na pgina e Display permitindo deixar o controle invisvel. Basta apenas colocar os controles na pgina para que estes funcionem e se tornem visveis tanto quando mudamos de um para outro controle e quando clicarmos no boto, como a imagem a seguir:
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 15 de 41
Funo til ao comparar um controle com outro, como por exemplo, confirmao de senha e email. Indica se a comparao ser de igualdade ou diferena do controle ou valor desejado Tipo de dado a ser comparado, como string, numero, data, etc. Utilizado quando a comparao for para valor fixo
Verso: 2.0
www.marcelosincic.com.br
Pgina 16 de 41
Por exemplo, podemos montar a estrutura de CEP como \d{5}-\d{3} onde estamos indicando cinco dgitos, um ponto e mais trs dgitos.
O que pode ser notado de diferente neste evento a presena do isvalid indicando que o controle dever ficar visvel e os dados do formulrio no devem ser enviados. Para utilizar um script de validao no cliente podemos notar a propriedade ClientValidationFunction onde podemos colocar o nome de uma funo de cliente para validar o controle, como o cdigo abaixo:
<script language="javascript"> function ValidaNome(oSrc, args) { if(Form1.txtNome.value.length <= 5) { alert("Voce ativou o script do nome"); args.IsValid = false; } } </script>
O cdigo acima tem a funo de verificar o tamanho e validar ou no, mas desta vez utilizando diretamente o cliente, sem a necessidades dos dados terem que ser enviados ao servidor para este fazer a validao.
www.marcelosincic.com.br Reproduo e distribuio livre
Verso: 2.0
www.marcelosincic.com.br
Pgina 17 de 41
Note que os validadores apareceram apenas no sumrio, mas para isto nas propriedades display dos validadores colocamos none. Com isto, os validadores individualmente no iro estar visveis, mas o sumrio sim. Tambm note na figura acima a propriedade ShowMessageBox e ShowSummary, permitindo escolher entre aparecer o sumrio como o exemplo acima, ou ento utilizando uma caixa de mensagem ou as duas formas de interao juntas.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 18 de 41
4 Gerenciando Estado
Sempre necessrio guardar dados em algum tipo de repositrio para podermos consultar este dado posteriormente. Uma das formas de guardar estes dados utilizando controles hidden que ficam na pgina ou ento utilizando get, mas nestes casos o usurio poder ter acesso ao dado e altera-lo, executando com direito elevado, por exemplo, por mudar o nome do usurio. Para guardar dados utilizamos as variveis de sesso, mas precisamos conhecer tambm outros objetos, abordados adiante.
Com o cdigo acima conseguimos garantir a atualizao, uma vez que caso j esteja travada por algum o usurio seguinte espera at poder tambm utilizar.
Verso: 2.0
www.marcelosincic.com.br
Pgina 19 de 41
Em termos de segurana podemos afirmar que as variveis de sesso a forma mais utilizada e confivel, pois o usurio no tem como ler diretamente estes valores e nem como altera-los por cdigo de script cliente.
4.3 Cookies
A terceira forma de utilizar valores e reaproveit-los utilizando os cookies. Estes so arquivos texto criados na maquina do usurio, so facilmente lidos e alterados pelo usurio final, o que compromete a segurana. Em certos casos os cookies so teis como, por exemplo guardar dados no confidenciais do usurio para quando este retornar a pginas os valores j estarem preenchidos. A alterao de cdigo abaixo reflete a pgina de cadastro agora com os dados preenchidos e guardados no cookie:
private void Page_Load(object sender, System.EventArgs e) { if(Request.Cookies["Nome"] != null) { txtNome.Text = Request.Cookies["Nome"].Value.ToString(); txtEndereco.Text = Request.Cookies["Endereco"].Value.ToString(); txtTelefone.Text = Request.Cookies["Telefone"].Value.ToString(); } }
Note que foi utilizados o objeto request, aquele que permite ler dados do cliente, e este nos fornece os valores guardados nos cookies por referenciarmos o nome da varivel. necessrio antes de utilizar os valores de cookies verificar se estes no esto nulos, pois caso ainda no existam iro retornar exception. Abaixo segue o cdigo que gravar os cookies, sendo agora desnecessrio passar os dados do usurio pelo get como anteriormente era feito:
private void btnEnviar_Click(object sender, System.EventArgs e) { Response.Cookies["Nome"].Value = txtNome.Text; Response.Cookies["Nome"].Expires = DateTime.Now.AddMinutes(20); Response.Cookies["Endereco"].Value = txtEndereco.Text; Response.Cookies["Endereco"].Expires = DateTime.Now.AddMinutes(20); Response.Cookies["Telefone"].Value = txtTelefone.Text; Response.Cookies["Telefone"].Expires = DateTime.Now.AddMinutes(20); Response.Redirect("RecebeCadastro.aspx"); }
Para ser criado os valores no cookie utilizamos o objeto response que envia dados ao usurio, com o nome da varivel informada. Note que ao gravar um cookie necessrio informar a data de expirao, uma vez que se esta data no for informada, o cookie se torna temporrio. A data de expirao do cookie pode ser informada em horas, minutos, segundos ou mesmo data completa. No exemplo acima utilizamos a data atual mais vinte minutos como data de expirao.
Verso: 2.0
www.marcelosincic.com.br
Pgina 20 de 41
layout bsico da pgina mestre ir proporcionar uma grande rapidez no desenvolvimento, manuteno e visualizao das pginas em tempo real.
Note pelo exemplo acima que o texto Minha pgina padro est fora do quadro ContentPlaceHolder1, portanto aparecer em todas as pginas. Para criar uma pgina utilizando o mestre acima possvel utilizar pginas j existentes, porem ser necessrio retirar todas as tags de form para cima e para baixo, pois o objeto formulrio nestes casos j est na pgina mestre. Ao criar uma pgina escolha o template Web Content Form que na sequencia pede o nome da pgina mestre desejada e traz o layout abaixo. Note que as tags de formulrio, cabealho e corpo no existem, pois como j abordado esto dentro da mestre.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 21 de 41
Todo o contedo especifico dever ficar dentro do quadro, sendo que nem possvel alterar a mestre, a no ser clicando no boto onde aparece o nome da pgina. Note que na diretiva da pgina contem o atributo MasterPageFile indicando a pgina mestre. O sinal ~ serve para indicar a raiz do site em qualquer local em que estiver a pgina ou link desejado. Caso a pgina mestre tenha que ser alterada por cdigo, o nico evento que d suporte o PreInit do formulrio.
4.5 Themes
O recurso de Temas a incorporao ao Visual Studio do j conhecido recurso Cascading Style Sheet (CSS). Este recurso padro do HTML permite definir um padro para que todas as tags fiquem pradronizadas. Vale a pena fazer a resalva de que o CSS altera o layout de tags HTML e no de tags ASP, ou seja, s funcionar corretamente quando envolve tags no browser padro a que se desenvolve, podendo gerar diferente tipo de layout em browsers alternativos, uma vez que o cdigo gerado pelo servidor varia conforme as capacidades e recursos do browser do cliente. Veja abaixo o exemplo de um CSS:
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 22 de 41
Para chegar a esta tela criamos uma nova ASP Folder do tipo Themes e dentro da pasta colocamos um arquivo do tipo Style Sheet. Para adicionar um novo elemento, ou a tag, a ser alterada utilizamos a opo Add Style Rule com o boto direito do mouse, que serve para incluir apenas as tags no contedo. Aps com o boto direito escolha a opo Build Style e configure como quer que a tag aparea no browser. O resultado da pgina pode ser visto abaixo:
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 23 de 41
Para definir o tema bastou indicar na propriedade Theme o nome da pasta criada anteriormente e em StyleSheetTheme o nome do arquivo css criado a pouco, e automaticamente ocorreu a alterao. Com este recurso, mudar o layout das letras e tags incluindo tabelas e outros contedos HTML ficou muito mais fcil, bastando alterar os arquivos css.
4.6 Skins
Vimos acima como os temas podem ajudar em muito o layout, mas ressaltamos o problema de que as tags no tema se referem ao HTML gerado no browser, o que pode causar problemas principalmente em dispositivos mveis. Uma forma de tambm utilizar o conceito de um padro, porem baseado nas tags ASP utilizar os skins. Eles devem ser adicionais dentro do tema, como um arquivo de skin, com o formato abaixo: Como podemos notar so exatamente as mesmas tags utilizadas no cdigo da pgina ASP, porem sem a tag ID. Veja o resultado grfico:
<asp:TextBox runat=server BackColor=AliceBlue Font-Names="Arial"></asp:TextBox> <asp:Label runat=server BackColor=Beige Font-Names="Courier" Font-Size=Large></asp:Label>
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 24 de 41
Os controles j esto formatados e podero ser utilizados com a formatao correspondente em diferentes browsers sem o problema das diferentes renderizaes.
5 AJAX.Net
O AJAX uma tecnologia para renderizao parcial de pginas HTML, que muito utilizada em sites como Google, Live Search, MSN e outros para atualizar blocos de pgina. Todo o processo de troca de dados com o servidor ocorre em background. O controle no Visual Studio foi criado de forma grfica e baseada em eventos, o que facilitou muito o uso do AJAX, que complexo quando construdo a mo.
O controle ScriptManager precisa estar em todas as pginas em que for utilizado o AJAX, pois ele faz o controle. Como em nosso exemplo a pgina mestre j contem um ScriptManager no seria necessrio colocar em cada um dos formulrios. O controle Timer permite criar, por exemplo, uma pgina onde parte dos controles se atualizariam de tempos em tempos.
www.marcelosincic.com.br Reproduo e distribuio livre
Verso: 2.0
www.marcelosincic.com.br
Pgina 25 de 41
No exemplo acima o timer est configurado para rodar a cada 1 segundo (mil miliesegundos) e no evento Tick do timer alteramos o label1 com a hora atual. Para dizer que o evento Tick utiliza a tecnologia do AJAX utilizamos o controle UpdatePanel (onde o label est includo. Neste objeto indicamos qual o evento que ir gerar a atualizao do contedo, como mostrado abaixo nas propriedades do UpdatePanel:
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 26 de 41
Note a referencia ao evento Tick do objeto Timer1. Isso indica que a cada ciclo do timer o contedo do painel ser totalmente atualizado, independente dos controles que nele contenham. Portanto, caso exista em um formulrio diversos controles que se atualizam em momentos diferentes, como por exemplo diversos botes de ao, devemos ter vrios updatepanels. O resultado do cdigo acima uma pgina com um relgio que se atualiza a cada segundo, sem fazer a navegao completa da pgina. O controle Update Progress cria um painel dentro da pgina que nas propriedades ligado a um dos Update Panels e mostrado enquanto ocorre a navegao em background. Alm da propriedade onde indicado a qual Update Panels ele est vinculado, tambm indicamos o tempo aps o qual o contedo do Update Progress ir ser ativado.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 27 de 41
Alem de indicar a tabela e as colunas desejadas, note que possvel fazer os filtros no boto Where e alterar a ordenao no boto Order By. No boto Advanced indicamos se dever ser gerado os comandos de Insert e Update para manuteno dos dados. Porem, na maior parte dos casos as alteraes so efetuadas em comandos programaticamente. Na sequencia da tela acima um boto Test Query permitir fazer o teste da query. A tela a seguir mostra as propriedades do controle Data Source e alterar o tempo de expirao do cache, alterar os comandos de banco de dados e escolher se ser gerado um DataSet ou um DataReader. A escolha deste ultimo item ajudar na manipulao programtica dos dados gerados pelos objetos de dados.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 28 de 41
6.1
A diferena do dropdowlist, ou combo, que este tem dois locais para configurar origem. A primeira propriedade DataTextField indica a coluna que servir de origem para a lista que a combo apresenta, e a propriedade DataValueField em que coluna o valor corrente est na tabela. Ou seja, para montarmos uma lista de estados a propriedade Data Field to Display ser a tabela de estados e a coluna Nome, enquanto na propriedade Data Value to Value utilizamos a tabela de clientes, coluna UF. A figura abaixo mostra a tela de configurao da combo:
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 29 de 41
O Datalist tem uma construo diferenciada no .NET por utilizar o conceito de templates. Ao colocar uma lista de dados no seu formulrio, aparecer apenas a figura abaixo: Ao clicar com o boto direito no controle poder escolher montar o cabealho, rodap e itens que a lista mostrar, e para isso ter que arrastar legendas, caixas de texto, caixas de checagem e qualquer outro controle. Ou seja, o datalist funciona como um repetidor de controles inseridos dentro dele. O resultado aps configurarmos os templates de rodap e cabealho seria:
Nos templates acima foram escolhidos as colunas de nome e sobrenome para serem origem de dados das caixas de texto.
www.marcelosincic.com.br Reproduo e distribuio livre
Verso: 2.0
www.marcelosincic.com.br
Pgina 30 de 41
Alem da escolha da fonte de dados e da formatao padro podemos escolher o que ser mostrado em cada uma das diferentes formas de visualizao dos dados, incluindo em caso de edio dos dados. No caso de utilizar o modo Edit temos acesso aos botes Update e Cancel que permitem a programao do cdigo que ir efetivar alteraes. O mesmo ir ser possvel configurar no modo de Insert.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 31 de 41
O auto format da grade de dados mostra a tela com os modelos grficos mais comuns: Ao termos informado a origem de dados, automaticamente a grade recebe as colunas da tabela utilizada, mas podemos customizar com o construtor clicando sobre o link Edit Columns onde podemos escolher as colunas incluindo colunas do tipo HyperLink onde podemos utilizar uma mscara de formatao para que um redirecionamento ocorra, como o exemplo abaixo: Note que para customizarmos a coluna deve desligar a opo criar colunas automaticamente, ou as colunas selecionadas iro ficar duplicadas. 6.3.1 Utilizando Link no Grid Uma necessidade comum ao se utilizar um grid selecionar uma determinada linha e editar seus dados. Para isso podemos utilizar os botes do grid ou hyperlink. Primeiro vamos ver como utilizar um hyperlink e como fazer por get a resposta ao valor clicado no grid. Crie uma nova coluna e utilize a opo hyperlink como fonte e configure a coluna de hyperlink com o texto desejado, a coluna de dados que ser utilizada no link e a formatao do texto, conforme a figura abaixo demonstra:
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 32 de 41
Note que o hyperlink gerado ir chamar a pgina Detalhes e ir passar como varivel, ou parmetro, o cdigo do histrico. Veja que no foi necessrio incluir nenhum cdigo programtico para este modelo funcionar, sendo simples e funcional. O resultado do grid com o hyperlink pode ser visto abaixo:
Na pgina Detalhes ser necessrio receber o valor e criar um dataadapter, como o exemplo a seguir do load desta pagina:
private void Page_Load(object sender, System.EventArgs e) { sqlDataAdapter1.SelectCommand.CommandText += " Where AU_ID='" + Request["Author"].ToString() + "'"; sqlDataAdapter1.Fill(dataSet11); TextBox1.DataBind(); TextBox2.DataBind(); }
Veja que utilizamos o parmetro enviado pelo grid para alterar o comando select para que este traga apenas o autor desejado, conforme o cdigo recebido.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 33 de 41
Note que alem da auto formatao no h muitas opes exceto a Edit Fields para escolher as colunas desejadas. O restante das configuraes feita na janela de propriedades com a possibilidade de escolher os botes para programao dos cdigos necessrios a manipular os dados. Para isso mude a janela de propriedades para o modo eventos e notar que os eventos para cada uma das operaes desejadas estar disponvel para programao.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 34 de 41
Note que a extenso deste tipo de objeto ascx, e seu cdigo html no contem as tags de cabealhos e corpo, uma vez que ser colocado dentro de outras pginas e estas tags no podem se repetir:
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="Cabecalho.ascx.cs" Inherits="WebApplication1.Cabecalho" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%> <TABLE id="Table1" cellSpacing="1" cellPadding="1" width="100%" border="1"> <TR> <TD width="33%"> <asp:Label id="lblUsuario" runat="server"></asp:Label></TD> <TD width="33%"> <asp:Label id="lblDataHora" runat="server"></asp:Label></TD> <TD width="34%"> <asp:Label id="lblPagina" runat="server"></asp:Label></TD> </TR> </TABLE>
Podemos ver que a diretiva da pgina tambm diferente porque as diretivas vistas anteriormente eram com page e esta utiliza control. Continuando o exemplo, vamos utilizar o controle de cabealho para obrigar o usurio a preencher seus dados para depois poder utilizar qualquer pgina, para evitar que as pginas sejam chamadas sem que o usurio tenha passado pelo login:
private void Page_Load(object sender, System.EventArgs e) { if(Session["Usuario"]==null) Response.Redirect("login.aspx"); else { lblUsuario.Text = Session["Usuario"].ToString(); lblDataHora.Text = DateTime.Now.ToString(); lblPagina.Text = AppDomain.CurrentDomain.RelativeSearchPath.ToString(); } }
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 35 de 41
Como pode ser visto neste cdigo, se a varivel de sesso estiver vazia porque o usurio ainda no passou pelo logon, e como este cabealho estar em todas as pginas, resolveremos o problema de algum tentar utilizar um link direto. Quando o usurio estiver devidamente identificado, a pgina resultante:
Tambm podemos colocar propriedades no controle, utilizando propriedades da linguagem e neste caso precisamos criar a referencia no code behind, uma vez que ao inserir um web user control na pgina, o VS 2008 no incluir a referencia, como explicado anteriormente. Neste caso, teramos que incluir na pgina ListaCadastro a referencia:
protected Cabecalho Cabecalho1;
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 36 de 41
8 Segurana de Acesso
A segurana de um site pode ser feita utilizando mtodos prontos do servidor web, no caso da Microsoft o Internet Information Server (IIS), ou utilizando mtodos programticos. O mais importante validar o usurio e certificar-se, como fizemos com o user control acima, que uma pgina no seja chamada sem autenticao.
Veja que no exemplo acima utilizamos uma stored procedure que recebe como parmetros o nome e senha e retorna os dados do usurio. Se o numero de linhas retornadas for igual a zero porque os dados no foram encontrados, e neste caso voltamos a mesma tela. Se houve retorno positivo guardamos o usurio na sesso para identifica-lo e redirecionamos para a pgina com o menu ou outra desejada.
Verso: 2.0
www.marcelosincic.com.br
Pgina 37 de 41
Nesta configurao vemos que usurios dos grupos marketing e financeiro tem acesso permitido e os annimos, representados pelo ?, so bloqueados. Tambm possvel representar todos os usurios utilizando *.
Neste modelo o procedimento semi-automtico, mas tem a limitao do uso do cookie e em caso do usurio abrir e fechar o browser a autenticao no solicitado, o que prejudica em casos que mais de uma senha utilizada na mesma mquina.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 38 de 41
9 Trace e Debug
O Debug no ASP.NET idntico a debug em aplicaes windows forms, com a nica mudana que o browser fica aberto a parte para permitir o debug. Outra limitao muito sria do debug que o servidor IIS onde o site est hospedado fica travado durante o perodo de debug, o que pararia outros usurios e desenvolvedores enquanto o debug estiver ativo. J o recurso de trace muito interessante para verificar dados, e muito simples de ser ligado. Para ativar o trace habilite a propriedade trace do formulrio e defina em tracemode se deseja ordenado por ordem de execuo ou por categoria, sendo este ultimo o padro. Aps ligar o trace e rodar a pgina ver o seguinte resultado: Request Details
Session Id: Time of Request: Request Encoding: t4isii55pvffzg45ymd5hsfu 23/8/2004 16:07:33 Unicode (UTF-8) Request Type: Status Code: Response Encoding: From First(s) 0,010611 0,032066 0,032124 0,037154 0,048466 0,048564 0,175022 GET 200 Unicode (UTF-8) From Last(s) 0,010611 0,021454 0,000059 0,005030 0,011311 0,000098 0,126458 Viewstate Size Bytes (excluding children) 20 0 0 0 0 0 0 0 0 0 0 Value
Trace Information
Category aspx.page aspx.page aspx.page aspx.page aspx.page aspx.page aspx.page aspx.page Message Begin Init End Init Begin PreRender End PreRender Begin SaveViewState End SaveViewState Begin Render End Render
Control Tree
Render Size Bytes (including children) __PAGE ASP.login_aspx 1601 _ctl0 System.Web.UI.ResourceBasedLiteralControl588 Form1 System.Web.UI.HtmlControls.HtmlForm 959 _ctl1 System.Web.UI.ResourceBasedLiteralControl339 txtUsuario System.Web.UI.WebControls.TextBox 55 _ctl2 System.Web.UI.LiteralControl 113 pwdSenhaSystem.Web.UI.WebControls.TextBox 55 _ctl3 System.Web.UI.LiteralControl 113 btnLogin System.Web.UI.WebControls.Button 68 _ctl4 System.Web.UI.LiteralControl 42 _ctl5 System.Web.UI.LiteralControl 54 Control Id Type
Session state
Session Key HoraLogon System.DateTime Type 23/8/2004 16:07:34 Type System.Int32 Name Value 2 Size
Application State
Application Key Contador Value
Cookies Collection
ASP.NET_SessionId Name Connection Accept Accept-Encoding Accept-Language
www.marcelosincic.com.br
t4isii55pvffzg45ymd5hsfu Value
42
Headers Collection
Keep-Alive */* gzip, deflate pt-br
Verso: 2.0
www.marcelosincic.com.br
Pgina 39 de 41
ASP.NET_SessionId=t4isii55pvffzg45ymd5hsfu Localhost Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322) Name Value HTTP_CONNECTION:Keep-Alive HTTP_ACCEPT:*/* HTTP_ACCEPT_ENCODING:gzip, deflate HTTP_ACCEPT_LANGUAGE:pt-br HTTP_COOKIE:ASP.NET_SessionId=t4isii55pvffzg45ymd5hsfu HTTP_HOST:localhost HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322) Connection: Keep-Alive Accept: */* Accept-Encoding: gzip, deflate Accept-Language: pt-br Cookie: ASP.NET_SessionId=t4isii55pvffzg45ymd5hsfu Host: localhost User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322) /LM/w3svc/1/root/WebApplication1 c:\inetpub\wwwroot\WebApplication1\
Server Variables
ALL_HTTP
ALL_RAW
APPL_MD_PATH APPL_PHYSICAL_PATH AUTH_TYPE AUTH_USER AUTH_PASSWORD LOGON_USER REMOTE_USER CERT_COOKIE CERT_FLAGS CERT_ISSUER CERT_KEYSIZE CERT_SECRETKEYSIZE CERT_SERIALNUMBER CERT_SERVER_ISSUER CERT_SERVER_SUBJECT CERT_SUBJECT CONTENT_LENGTH 0 CONTENT_TYPE GATEWAY_INTERFACE CGI/1.1 HTTPS off HTTPS_KEYSIZE HTTPS_SECRETKEYSIZE HTTPS_SERVER_ISSUER HTTPS_SERVER_SUBJECT INSTANCE_ID 1 INSTANCE_META_PATH /LM/W3SVC/1 LOCAL_ADDR 127.0.0.1 PATH_INFO /WebApplication1/login.aspx PATH_TRANSLATED c:\inetpub\wwwroot\WebApplication1\login.aspx QUERY_STRING REMOTE_ADDR 127.0.0.1 REMOTE_HOST 127.0.0.1 REMOTE_PORT 1862 REQUEST_METHOD GET SCRIPT_NAME /WebApplication1/login.aspx SERVER_NAME localhost SERVER_PORT 80 SERVER_PORT_SECURE 0 SERVER_PROTOCOL HTTP/1.1 SERVER_SOFTWARE Microsoft-IIS/5.1 URL /WebApplication1/login.aspx HTTP_CONNECTION Keep-Alive HTTP_ACCEPT */* HTTP_ACCEPT_ENCODING gzip, deflate HTTP_ACCEPT_LANGUAGEpt-br HTTP_COOKIE ASP.NET_SessionId=t4isii55pvffzg45ymd5hsfu HTTP_HOST Localhost HTTP_USER_AGENT Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322)
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 40 de 41
Veja nos retornos que podemos ler a situao da pgina, como os dados foram enviados, quais dados esto na sesso, etc. Um importante dado est na sesso Control Tree onde podemos ler o tempo acumulado e o tempo individual de cada mtodo, encontrando os mtodos que causaram mais impacto de performance.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 41 de 41
10 Distribuio
Para distribuir uma aplicao em ASP.NET basta copiarmos os arquivos a seguir: Tipo ou Nome Funo Extenso aspx Pginas com os cdigos html Extenso ascx Pginas com cdigos html dos user controls Extenso dll Code Behind das pginas, cada projeto gera um web.config Configuraes da aplicao e segurana Destino raiz raiz raiz\bin raiz
Quando copiamos os arquivos o framework sempre procura a classe da pgina no diretrio bin de onde ela est. Ou seja, podemos desenvolver um sistema usando quatro projetos mas utilizando um nico site na distribuio, bastando copiar as quatro dll no diretrio bin do site e o restante todos juntos na raiz do site. Ainda para funcionar, aps criar o diretrio do site necessrio habilitar a aplicao no IIS, bastando clicar no boto abaixo do IIS Manager:
Ao clicar no boto Configurao pode-se mudar algumas caractersticas do site, como por exemplo, o tempo de timeout padro da sesso. Tambm nestas configuraes podemos na aba Erros Personalizados mudar as pginas padro de erro para tornar amigvel e personalizado com logo da empresa os erros que podem ocorrer, como por exemplo, de pgina no encontrada.
www.marcelosincic.com.br