SlideShare une entreprise Scribd logo
1  sur  18
com rev. 2
Foco em
Escalabilidade Capacidade Máxima: 100 usuários 100 usuários = 100% 150 novos usuários Capacidade necessária: 250 usuários = 150%+!
#Comofas?
#Comofas2?
#Comofas3?
Load Balance 1 2 3 4 5 6
Tratamento de Exceções
Como tratar?
A solução! Global.asax protected void Application_Error(object sender, EventArgs e){    Exception ex = Server.GetLastError();    RSLHandler handler = new RSLHandler().Configure();    handler.Handle(ex);}
E o usuário ve isso...
Quando deveria ver...
A solução! Web.Config: <customErrorsdefaultRedirect=“erroPadrao.html" mode="On">  <error statusCode=“403" redirect=“NaoPermitida.html"/> 	<error statusCode=“404" redirect=“NaoEncontrada.html"/>  </customErrors>
Errado #1 private void Salvar(UsuarionovoUsuario) { //Abreconexão com banco de dados DataReader dr = cmd.Execute(sql); 	//Executaumainstruçãoquegera exception throw new Exception(“Whatever”); } Certo #1 private void Salvar(UsuarionovoUsuario) { DataReader dr = cmd.ExecuteReader(sql, CommandBehavior.CloseConnection); try { 	//Executaumainstruçãoquegera exception throw new Exception(“Whatever”); }finally{ dr.Close(); } }
Errado #2 private void Foo() { try { 	//Executa uma operação que lança exceção } catch (Exception ex) { 	string Message = ex.Message; 	throw ex; } } Certo #2 private void Foo() { try { 	//Executa uma operação que lança exceção } catch (Exception ex) { 	string Message = ex.Message; 	throw; } }
Logging/Debugging
var exemplo = (x => x.Log4Net) private void Log(string message) { ILog log = LogManager.GetLogger(“MyLoggerName”);  	log.Info(“Debug message”); 	log.Error(“A big error!”); } <log4net>  	<!-- A1 is set to be a ConsoleAppender -->  	<appender name=“MyAppender" type="log4net.Appender.ConsoleAppender">  	<!-- A1 uses PatternLayout -->  	<layout type="log4net.Layout.PatternLayout">  		<conversionPattern value=“ %-4timestamp [%thread] %-5level %logger %ndc - %message%newline" />  	</layout>  	</appender>  	<!-- Set root logger level to DEBUG and its only appender to A1 -->  	<root>  		<level value="DEBUG" />  		<appender-ref ref="A1" />  	</root>  </log4net>
Contato Email:antonio.zegunis@fnac.com.br ou me@tucaz.net Blog: 	http://blog.tucaz.net Twitter: 	http://www.twitter.com/tucaz Referências http://msdn.microsoft.com/en-us/library/ff647787.aspx http://msdn.microsoft.com/en-us/library/ff649308.aspx http://msdn.microsoft.com/en-us/library/ms229014%28VS.80%29.aspx http://blog.tucaz.net/en/2009/07/21/basic-stuff-handling-exceptions-in-net/ http://logging.apache.org/log4net/release/manual/configuration.html http://haacked.com/archive/2005/03/07/ConfiguringLog4NetForWebApplications.aspx http://intrafnac.fnac.br/dosi/sistemas/WikiSistemas/Paginas%20Wiki/Home.aspx http://intrafnac.fnac.br/dosi/sistemas/WikiSistemas/Paginas%20Wiki/Tratamento%20de%20Exceções.aspx

Contenu connexe

Similaire à Café com Bug - 2a Edição em 13/05/2010

(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
Carlos Santos
 
Combinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma práticaCombinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma prática
Milfont Consulting
 
LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09
Carlos Santos
 
T11_LM3: Subalgoritmose colisões (2013-2014)
T11_LM3: Subalgoritmose colisões (2013-2014)T11_LM3: Subalgoritmose colisões (2013-2014)
T11_LM3: Subalgoritmose colisões (2013-2014)
Carlos Santos
 
Programacao Com Asp Ii
Programacao Com Asp   IiProgramacao Com Asp   Ii
Programacao Com Asp Ii
guest3118b2
 

Similaire à Café com Bug - 2a Edição em 13/05/2010 (20)

Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
Ajax em java
Ajax em javaAjax em java
Ajax em java
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
Aula 2 - ASP
Aula 2 - ASPAula 2 - ASP
Aula 2 - ASP
 
JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para Webdesigners
 
Palestra de segurança em PHP - Hacking
Palestra de segurança em PHP - HackingPalestra de segurança em PHP - Hacking
Palestra de segurança em PHP - Hacking
 
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
 
Combinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma práticaCombinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma prática
 
Melhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryMelhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQuery
 
BDD com Easyb
BDD com EasybBDD com Easyb
BDD com Easyb
 
Beagajs
BeagajsBeagajs
Beagajs
 
Artigoajax
ArtigoajaxArtigoajax
Artigoajax
 
Offline Web com Service Workers - Sérgio Lopes
Offline Web com Service Workers - Sérgio LopesOffline Web com Service Workers - Sérgio Lopes
Offline Web com Service Workers - Sérgio Lopes
 
RubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoRubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direito
 
LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09
 
T11_LM3: Subalgoritmose colisões (2013-2014)
T11_LM3: Subalgoritmose colisões (2013-2014)T11_LM3: Subalgoritmose colisões (2013-2014)
T11_LM3: Subalgoritmose colisões (2013-2014)
 
Aplicacoes Web Com AJAX
Aplicacoes Web Com AJAXAplicacoes Web Com AJAX
Aplicacoes Web Com AJAX
 
Conhecendo o Struts 2 - Java Tech Day 2007
Conhecendo o Struts 2 - Java Tech Day 2007Conhecendo o Struts 2 - Java Tech Day 2007
Conhecendo o Struts 2 - Java Tech Day 2007
 
Programacao Com Asp Ii
Programacao Com Asp   IiProgramacao Com Asp   Ii
Programacao Com Asp Ii
 

Café com Bug - 2a Edição em 13/05/2010

  • 3. Escalabilidade Capacidade Máxima: 100 usuários 100 usuários = 100% 150 novos usuários Capacidade necessária: 250 usuários = 150%+!
  • 7. Load Balance 1 2 3 4 5 6
  • 10. A solução! Global.asax protected void Application_Error(object sender, EventArgs e){    Exception ex = Server.GetLastError();    RSLHandler handler = new RSLHandler().Configure();    handler.Handle(ex);}
  • 11. E o usuário ve isso...
  • 13. A solução! Web.Config: <customErrorsdefaultRedirect=“erroPadrao.html" mode="On"> <error statusCode=“403" redirect=“NaoPermitida.html"/> <error statusCode=“404" redirect=“NaoEncontrada.html"/> </customErrors>
  • 14. Errado #1 private void Salvar(UsuarionovoUsuario) { //Abreconexão com banco de dados DataReader dr = cmd.Execute(sql); //Executaumainstruçãoquegera exception throw new Exception(“Whatever”); } Certo #1 private void Salvar(UsuarionovoUsuario) { DataReader dr = cmd.ExecuteReader(sql, CommandBehavior.CloseConnection); try { //Executaumainstruçãoquegera exception throw new Exception(“Whatever”); }finally{ dr.Close(); } }
  • 15. Errado #2 private void Foo() { try { //Executa uma operação que lança exceção } catch (Exception ex) { string Message = ex.Message; throw ex; } } Certo #2 private void Foo() { try { //Executa uma operação que lança exceção } catch (Exception ex) { string Message = ex.Message; throw; } }
  • 17. var exemplo = (x => x.Log4Net) private void Log(string message) { ILog log = LogManager.GetLogger(“MyLoggerName”); log.Info(“Debug message”); log.Error(“A big error!”); } <log4net> <!-- A1 is set to be a ConsoleAppender --> <appender name=“MyAppender" type="log4net.Appender.ConsoleAppender"> <!-- A1 uses PatternLayout --> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=“ %-4timestamp [%thread] %-5level %logger %ndc - %message%newline" /> </layout> </appender> <!-- Set root logger level to DEBUG and its only appender to A1 --> <root> <level value="DEBUG" /> <appender-ref ref="A1" /> </root> </log4net>
  • 18. Contato Email:antonio.zegunis@fnac.com.br ou me@tucaz.net Blog: http://blog.tucaz.net Twitter: http://www.twitter.com/tucaz Referências http://msdn.microsoft.com/en-us/library/ff647787.aspx http://msdn.microsoft.com/en-us/library/ff649308.aspx http://msdn.microsoft.com/en-us/library/ms229014%28VS.80%29.aspx http://blog.tucaz.net/en/2009/07/21/basic-stuff-handling-exceptions-in-net/ http://logging.apache.org/log4net/release/manual/configuration.html http://haacked.com/archive/2005/03/07/ConfiguringLog4NetForWebApplications.aspx http://intrafnac.fnac.br/dosi/sistemas/WikiSistemas/Paginas%20Wiki/Home.aspx http://intrafnac.fnac.br/dosi/sistemas/WikiSistemas/Paginas%20Wiki/Tratamento%20de%20Exceções.aspx