comrev. 2
Foco em
EscalabilidadeCapacidade Máxima: 100 usuários100 usuários = 100%150 novos usuáriosCapacidade necessária: 250 usuários = 150%+!
#Comofas?
#Comofas2?
#Comofas3?
Load Balance123456
Tratamento de Exceções
Como tratar?
A solução!Global.asaxprotected 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 #1private void Salvar(UsuarionovoUsuario){//Abreconexão com banco de dadosDataReader dr = cmd.Execute(sql);	//Executaumainstruçãoquegera exceptionthrow new Exception(“Whatever”);}Certo #1private void Salvar(UsuarionovoUsuario){DataReader dr = cmd.ExecuteReader(sql, CommandBehavior.CloseConnection);try {	//Executaumainstruçãoquegera exceptionthrow new Exception(“Whatever”);}finally{dr.Close();}}
Errado #2private void Foo(){try {	//Executa uma operação que lança exceção} catch (Exception ex) {	string Message = ex.Message;	throw ex;}}Certo #2private 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>
ContatoEmail:antonio.zegunis@fnac.com.br ou me@tucaz.netBlog: 	http://blog.tucaz.netTwitter: 	http://www.twitter.com/tucazReferênciashttp://msdn.microsoft.com/en-us/library/ff647787.aspxhttp://msdn.microsoft.com/en-us/library/ff649308.aspxhttp://msdn.microsoft.com/en-us/library/ms229014%28VS.80%29.aspxhttp://blog.tucaz.net/en/2009/07/21/basic-stuff-handling-exceptions-in-net/http://logging.apache.org/log4net/release/manual/configuration.htmlhttp://haacked.com/archive/2005/03/07/ConfiguringLog4NetForWebApplications.aspxhttp://intrafnac.fnac.br/dosi/sistemas/WikiSistemas/Paginas%20Wiki/Home.aspxhttp://intrafnac.fnac.br/dosi/sistemas/WikiSistemas/Paginas%20Wiki/Tratamento%20de%20Exceções.aspx

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

  • 1.
  • 2.
  • 3.
    EscalabilidadeCapacidade Máxima: 100usuários100 usuários = 100%150 novos usuáriosCapacidade necessária: 250 usuários = 150%+!
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
    A solução!Global.asaxprotected voidApplication_Error(object sender, EventArgs e){    Exception ex = Server.GetLastError();    RSLHandler handler = new RSLHandler().Configure();    handler.Handle(ex);}
  • 11.
    E o usuáriove isso...
  • 12.
  • 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 #1private voidSalvar(UsuarionovoUsuario){//Abreconexão com banco de dadosDataReader dr = cmd.Execute(sql); //Executaumainstruçãoquegera exceptionthrow new Exception(“Whatever”);}Certo #1private void Salvar(UsuarionovoUsuario){DataReader dr = cmd.ExecuteReader(sql, CommandBehavior.CloseConnection);try { //Executaumainstruçãoquegera exceptionthrow new Exception(“Whatever”);}finally{dr.Close();}}
  • 15.
    Errado #2private voidFoo(){try { //Executa uma operação que lança exceção} catch (Exception ex) { string Message = ex.Message; throw ex;}}Certo #2private void Foo(){try { //Executa uma operação que lança exceção} catch (Exception ex) { string Message = ex.Message; throw;}}
  • 16.
  • 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.
    ContatoEmail:antonio.zegunis@fnac.com.br ou me@tucaz.netBlog: http://blog.tucaz.netTwitter: http://www.twitter.com/tucazReferênciashttp://msdn.microsoft.com/en-us/library/ff647787.aspxhttp://msdn.microsoft.com/en-us/library/ff649308.aspxhttp://msdn.microsoft.com/en-us/library/ms229014%28VS.80%29.aspxhttp://blog.tucaz.net/en/2009/07/21/basic-stuff-handling-exceptions-in-net/http://logging.apache.org/log4net/release/manual/configuration.htmlhttp://haacked.com/archive/2005/03/07/ConfiguringLog4NetForWebApplications.aspxhttp://intrafnac.fnac.br/dosi/sistemas/WikiSistemas/Paginas%20Wiki/Home.aspxhttp://intrafnac.fnac.br/dosi/sistemas/WikiSistemas/Paginas%20Wiki/Tratamento%20de%20Exceções.aspx