<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Web Dev &amp; Infra: qual o seu lado?</title><link>http://blogs.msdn.com/b/teixeira/</link><description>Paulo Teixeira escreve sobre Web/IIS para ajudar a desenvolvedores escreverem aplicações mais eficientes e performáticas. Também fala sobre técnicas para identificação e resolução de problemas em aplicações e otimização de infra-estrutura Web.</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>Como resolver o erro “Request is not available in this context”</title><link>http://blogs.msdn.com/b/teixeira/archive/2013/02/20/como-resolver-o-erro-request-is-not-available-in-this-context.aspx</link><pubDate>Wed, 20 Feb 2013 17:42:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10392322</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10392322</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2013/02/20/como-resolver-o-erro-request-is-not-available-in-this-context.aspx#comments</comments><description>&lt;table style="width: 560px;" border="0" cellspacing="0" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="560"&gt;
&lt;h4&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p&gt;Voc&amp;ecirc; est&amp;aacute; trabalhando para migrar uma aplica&amp;ccedil;&amp;atilde;o .NET do IIS6 para o IIS 7.x/8 e ap&amp;oacute;s fazer toda a configura&amp;ccedil;&amp;atilde;o imediatamente no primeiro acesso j&amp;aacute; recebe a seguinte mensagem de erro:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h4&gt;&lt;em&gt;Request is not available in this context&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description: &lt;/strong&gt;An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Exception Details: &lt;/strong&gt;System.Web.HttpException: Request is not available in this context&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Logo abaixo voc&amp;ecirc; poder&amp;aacute; encontrar detalhes adicionais (linha onde ocorreu o erro) al&amp;eacute;m de uma pilha similar ao seguinte:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[HttpException (0x80004005): Request is not available in this context]&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;System.Web.HttpContext.get_Request() +3467061&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="background-color: #ffff00;"&gt;ASP.global_asax.Application_Start&lt;/span&gt;(Object source, &lt;br /&gt;EventArgs e) in c:\inetpub\wwwroot\global.asax:5&lt;/p&gt;
&lt;p&gt;[HttpException (0x80004005): Request is not available in this context]&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Segoe UI;"&gt;Como podemos observar, o erro foi gerado no m&amp;oacute;dulo/m&amp;eacute;todo ASP.global_asax.Application_Start da aplica&amp;ccedil;&amp;atilde;o. Este &amp;eacute; um problema conhecido quando se faz a migra&amp;ccedil;&amp;atilde;o de aplica&amp;ccedil;&amp;otilde;es ASP.NET do IIS6 para vers&amp;otilde;es superiores, e est&amp;aacute; descrito no seguinte blog: &lt;a title="http://mvolo.com/iis7-integrated-mode-request-is-not-available-in-this-context-exception-in-applicationstart" href="http://mvolo.com/iis7-integrated-mode-request-is-not-available-in-this-context-exception-in-applicationstart"&gt;http://mvolo.com/iis7-integrated-mode-request-is-not-available-in-this-context-exception-in-applicationstart&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Para resolver o problema voc&amp;ecirc; precisar&amp;aacute; solicitar ao desenvolvedor que abra o arquivo GLOBAL.ASAX.CS (ou .VB) da aplica&amp;ccedil;&amp;atilde;o e localize, dentro do m&amp;eacute;todo ApplicationStart() qualquer uso do objeto HttpContext.Current.Request. Em geral voc&amp;ecirc; encontrar&amp;aacute; algo como:&lt;/p&gt;
&lt;p&gt;str = HttpContext.Current.Request.QueryString["key"];&lt;/p&gt;
&lt;p&gt;Ser&amp;aacute; necess&amp;aacute;rio remover este c&amp;oacute;digo substituindo-o por algum outro mecanismo. A explica&amp;ccedil;&amp;atilde;o para este erro &amp;eacute; bem simples: no IIS7 o novo pipeline integrado ir&amp;aacute; executar o m&amp;eacute;todo Application_Start() antes que qualquer request chegue ao servidor, e portanto, o objeto Request n&amp;atilde;o est&amp;aacute; dispon&amp;iacute;vel.&lt;/p&gt;
&lt;p&gt;Um abra&amp;ccedil;o e at&amp;eacute; a pr&amp;oacute;xima,&lt;/p&gt;
&lt;p&gt;PT&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10392322" width="1" height="1"&gt;</description></item><item><title>Tracing de aplicações ASP.NET no IIS 7.x/8</title><link>http://blogs.msdn.com/b/teixeira/archive/2013/02/18/tracing-de-aplica-231-245-es-asp-net-no-iis-7-x-8.aspx</link><pubDate>Mon, 18 Feb 2013 11:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10392301</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10392301</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2013/02/18/tracing-de-aplica-231-245-es-asp-net-no-iis-7-x-8.aspx#comments</comments><description>&lt;table style="width: 560px;" cellspacing="0" cellpadding="0" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;         &lt;p&gt;Olá pessoal!&lt;/p&gt;          &lt;p&gt;Poucos desenvolvedores fazem uso de um dos recursos mais interessantes disponíveis para aplicações ASP.NET, a capacidade de criar &lt;em&gt;traces &lt;/em&gt;diretamente a partir do seu código e usá-los para resolver problemas durante a etapa de desenvolvimento.&lt;/p&gt;          &lt;p&gt;O uso de &amp;quot;técnicas para criação de traces&amp;quot; é algo muito comum: lembra-se de ter escrito um bom e velho &amp;quot;Response.Write&amp;quot; em aplicações ASP Clássico para validar se os dados em uma determinada rotina está conforme o esperado? Pois é... era assim no ASP Clássico, em C, C++, etc&lt;/p&gt;          &lt;p&gt;Nas aplicações ASP.NET este processo é realmente muito simples: basta habilitar o registro de entradas de trace no arquivo web.config, adicionando a seguinte tag:&lt;/p&gt;          &lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;lt;trace enabled=&amp;quot;true&amp;quot; localOnly=&amp;quot;false&amp;quot; pageOutput=&amp;quot;false&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;          &lt;p&gt;Maiores detalhes sobre a diretiva &amp;lt;trace&amp;gt; do arquivo web.config pode ser obtida em: &lt;a href="http://msdn.microsoft.com/en-us/library/6915t83k(v=vs.80).aspx"&gt;http://msdn.microsoft.com/en-us/library/6915t83k(v=vs.80).aspx&lt;/a&gt;&lt;/p&gt;          &lt;p&gt;Com a diretiva trace configurada no seu arquivo web.config agora basta adicionar as diretivas de trace em sua aplicação. O desenvolvedor deverá adicionar algumas linhas de código na sua aplicação, para &lt;em&gt;imprimir &lt;/em&gt;os valores que precisam ser validados. Para isso, em cada modulo que se deseja utilizer o trace, deve-se adicionar o namespace System.Web. Um exemplo simples do uso de trace em uma página ASP.NET (em C# e .NET Framework 4.5) é mostrado a seguir:&lt;/p&gt;          &lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;using System;&lt;/span&gt;            &lt;br /&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;using System.Collections.Generic;&lt;/span&gt;            &lt;br /&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;using System.Web;&lt;/span&gt;            &lt;br /&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;using System.Web.UI;&lt;/span&gt;            &lt;br /&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;using System.Web.UI.WebControls;&lt;/span&gt;&lt;/p&gt;          &lt;p&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;          &lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;namespace TraceSample&lt;/span&gt;            &lt;br /&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;{&lt;/span&gt;            &lt;br /&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;&amp;#160; public partial class LongRunningPage : System.Web.UI.Page&lt;/span&gt;            &lt;br /&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;&amp;#160; {&lt;/span&gt;            &lt;br /&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;&amp;#160;&amp;#160;&amp;#160; protected void Page_Load(object sender, EventArgs e)&lt;/span&gt;            &lt;br /&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/span&gt;            &lt;br /&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&lt;/span&gt;            &lt;br /&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // This is just a page where any GET requests will take... &lt;/span&gt;            &lt;br /&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // well, very long&lt;/span&gt;&lt;/p&gt;          &lt;p&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;          &lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;Trace.Warn(&amp;quot;Warning! Entering in the PAGE_LOAD event&amp;quot;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;          &lt;p&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;          &lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DateTime start = DateTime.Now;&lt;/span&gt;            &lt;br /&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; int delay = new Random().Next(5000, 15000);&lt;/span&gt;            &lt;br /&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Thread.Sleep(delay);&lt;/span&gt;&lt;/p&gt;          &lt;p&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;          &lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt; DateTime end = DateTime.Now;&lt;/span&gt;            &lt;br /&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt; myLabel.Text = String.Format(&amp;quot;Total page exec took:{0} ms&amp;quot;, (end - start).TotalMilliseconds);&lt;/span&gt;&lt;/p&gt;          &lt;p&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;          &lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;Trace.Write(&amp;quot;PAGE_LOAD event finished&amp;quot;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;          &lt;p&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;          &lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;            &lt;br /&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;&amp;#160; }&lt;/span&gt;            &lt;br /&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;}&lt;/span&gt;&lt;/p&gt;          &lt;p&gt;No código acima você encontra duas diretivas: Trace.Warn e Trace.Write ... existem poucas diferenças entre elas, a mais visível é que a primeira irá produzir uma entrada em vermelho na saída do trace. &lt;/p&gt;          &lt;p&gt;Uma vez que o código da aplicação tenha sido ajustado para criar a saída necessária, você poderá acessar a página e testar a sua aplicação. Após ter executado a página, você poderá visualizar o resultado do trace através do handler TRACE.AXD. Por exemplo, se a página chama-se LongRunning.aspx., você deve primeiro chamar: &lt;/p&gt;          &lt;p&gt;&lt;a href="http://meusite/LongRunning.aspx"&gt;http://meusite/LongRunning.aspx&lt;/a&gt; &lt;/p&gt;          &lt;p&gt;e depois:&lt;/p&gt;          &lt;p&gt;&lt;a href="http://meusite/trace.axd"&gt;http://meusite/trace.axd&lt;/a&gt; &lt;/p&gt;          &lt;p&gt;Com isso, uma página de trace similar ao seguinte sera exibida: &lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-37-metablogapi/1856.image_5F00_10B42851.png"&gt;&lt;img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-37-metablogapi/5756.image_5F00_thumb_5F00_6EE84FBF.png" width="512" height="143" /&gt;&lt;/a&gt;&lt;/p&gt;          &lt;p&gt;Ao se clicar em uma das entradas você poderá observer detalhes do trace daquela página, algo similar ao seguinte:&lt;/p&gt;          &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-37-metablogapi/0451.image_5F00_5AEEBD29.png"&gt;&lt;img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-37-metablogapi/3666.image_5F00_thumb_5F00_7F9FD4A0.png" width="509" height="363" /&gt;&lt;/a&gt;&lt;/p&gt;          &lt;p&gt;Acima podemos ver o resultado das diretivas de trace que foram adicionadas no código da aplicação. Voilá! &lt;/p&gt;          &lt;p&gt;Agora, o mais um ponto: É possível visualizar o resultado das diretivas Trace.Warn nos logs FREB (ou Failed Request Tracing) do IIS. Basta configurar o seu servidor para gerar este tipo de log (conforme as regras que você estabelecer) e ao visualizá-lo você encontrará as saídas geradas pelo seu aplicativo.&amp;#160; Esta é a outra diferença entre as duas diretivas: Trace.Write não irá aparecer nos logs do IIS, e portanto, se precisar usar este recurso de uma forma regular, use somente o Trace.Warn.&lt;/p&gt;          &lt;p&gt;E finalmente, aquela dica de sempre: não deixe as diretivas de trace habilitadas em servidores de produção! Sempre podem existir questões relacionadas à segurança de sua aplicação e não custa descuidar! &lt;/p&gt;          &lt;p&gt;É isso ai! Não perca tempo e aproveite para usar este recurso durante o processo de desenvolvimento da sua aplicação. &lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p&gt;Abraços, &lt;/p&gt;          &lt;p&gt;PT&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10392301" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/ASP-NET/">ASP.NET</category><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/-NET/">.NET</category><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/IIS/">IIS</category></item><item><title>Qual a diferença entre Web Site Project e Web Application Project no Visual Studio?</title><link>http://blogs.msdn.com/b/teixeira/archive/2013/02/12/qual-a-diferen-231-a-entre-web-site-project-e-web-application-project-no-visual-studio.aspx</link><pubDate>Tue, 12 Feb 2013 23:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10392400</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10392400</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2013/02/12/qual-a-diferen-231-a-entre-web-site-project-e-web-application-project-no-visual-studio.aspx#comments</comments><description>&lt;table style="width: 560px;" cellspacing="0" cellpadding="0" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;         &lt;p&gt;Faz um tempo um cliente me perguntou a diferença entre Web Site e Web Application.De início eu nem tinha entendido direito a pergunta, mas depois ficou claro a dúvida: a questão estava relacionada aos tipos de projeto disponíveis no Visual Studio.&lt;/p&gt;          &lt;p&gt;No Visual Studio, você pode escolher entre dois tipos de projetos Web: &lt;em&gt;Web Site Project (WSP)&lt;/em&gt; ou o &lt;em&gt;Web Application Project (WAP)&lt;/em&gt;.&lt;/p&gt;          &lt;p&gt;A grande diferença entre estes dois tipos de projeto é a forma que ocorre o &lt;em&gt;deployment &lt;/em&gt;da aplicação. Em um Web Site Project o Visual Studio irá fazer a publicação de todos os arquivos do projeto (incluíndo o código-fonte da sua aplicação). Já em um Web Application Project somente será publicado o código HTML (markup) e o código &lt;strong&gt;compilado &lt;/strong&gt;da sua aplicação. &lt;/p&gt;          &lt;p&gt;Em outras palavras, em um Web Application Project o Visual Studio irá se encarregar de compilar a sua aplicação, gerando vários binarios dentro da pasta /BIN. Ao se fazer a publicação somente estes arquivos serão colocados no servidor Web.&amp;#160; &lt;/p&gt;          &lt;p&gt;Existem prós e contras para cada um dos tipos de projeto, mas eu pessoalmente sou muito mais a favor do uso de Web Application Projects, por um fator muito simples: você evita que o código-fonte fique visível no servidor Web (ponto para a questão de segurança), e também evita que o servidor Web fique responsável pela compilação da aplicação durante o primeiro acesso (uma outra hora faço&amp;#160; um post com mais detalhes sobre isso).&lt;/p&gt;          &lt;p&gt;Uma comparação mais detalhada entre estes dois tipos de projeto pode ser encontrada em&amp;#160; &lt;a href="http://msdn.microsoft.com/en-us/library/aa730880%28VS.80%29.aspx#wapp_topic5"&gt;http://msdn.microsoft.com/en-us/library/aa730880(VS.80).aspx#wapp_topic5&lt;/a&gt; (em inglês)&lt;/p&gt;          &lt;p&gt;[]s           &lt;br /&gt;PT &lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10392400" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/ASP-NET/">ASP.NET</category><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/Visual+Studio/">Visual Studio</category></item><item><title>Como fazer Interop de componentes COM+ 32bits em aplicações .NET 64bits</title><link>http://blogs.msdn.com/b/teixeira/archive/2013/02/11/como-fazer-interop-de-componentes-com-32bits-em-aplica-231-245-es-net-64bits.aspx</link><pubDate>Mon, 11 Feb 2013 10:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10392313</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10392313</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2013/02/11/como-fazer-interop-de-componentes-com-32bits-em-aplica-231-245-es-net-64bits.aspx#comments</comments><description>&lt;table style="width: 599px;" border="0" cellspacing="0" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="597"&gt;
&lt;p&gt;Ol&amp;aacute; pessoal! Imagine o seguinte cen&amp;aacute;rio:&lt;/p&gt;
&lt;p&gt;Voc&amp;ecirc; possui uma aplica&amp;ccedil;&amp;atilde;o antiga constru&amp;iacute;da em ASP.NET mas que por algum motivo espec&amp;iacute;fico ainda usa componentes COM atrav&amp;eacute;s de Interop.&lt;/p&gt;
&lt;p&gt;Este, apesar de n&amp;atilde;o desejado, &amp;eacute; um cen&amp;aacute;rio muito comum, em particular em ambientes corporativos: muitas vezes os componentes COM foram constru&amp;iacute;dos em VB6 ou VC++ e encapsulam regras de neg&amp;oacute;cio que n&amp;atilde;o mudaram. Como as &amp;aacute;reas de TI nem sempre possuem or&amp;ccedil;amento para fazer a convers&amp;atilde;o deste c&amp;oacute;digo para uma linguagem .NET como o Visual Basic.NET ou C#, esses componentes costumam ser usados por um logo per&amp;iacute;odo de tempo, at&amp;eacute; que um novo projeto substitua inteiramente a aplica&amp;ccedil;&amp;atilde;o.&lt;/p&gt;
&lt;p&gt;Agora, imagine que a &amp;aacute;rea de TI da empresa resolve evoluir a plataforma Web para as vers&amp;otilde;es mais recentes do Windows Server, s&amp;oacute; dispon&amp;iacute;veis em 64-bits. Para este cen&amp;aacute;rio sempre existe a possibilidade de rodar os Application Pools do IIS 7.x (e superior) em modo 32-bits, mas seria desej&amp;aacute;vel que asp aplica&amp;ccedil;&amp;otilde;es ASP.NET pudessem explorar o m&amp;aacute;ximo da nova plataforma, com o poder total da arquitetura 64-bits. Mas ai, surge o problema dos velhos componentes VB6 32-bits. Por padr&amp;atilde;o, n&amp;atilde;o &amp;eacute; poss&amp;iacute;vel carregar uma DLL (Componente COM) 32-bits em um processo (Application Pool) 64-bits. O que fazer???&lt;/p&gt;
&lt;p&gt;Uma forma simples de continuar utilizando o c&amp;oacute;digo legado desses componentes COM de 32-bits sem custo extra &amp;eacute; passar a us&amp;aacute;-los no COM+ (Component Services). Basta seguir os seguintes passos:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Primeiro, se voc&amp;ecirc; tiver registrado a DLL do seu componente no seu Windows x64, voc&amp;ecirc; ter&amp;aacute; que desfazer este processo. Execute o comando &amp;ldquo;regsvr32 /u &amp;lt;path_e_nome_da_dll&amp;gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;V&amp;aacute; no &lt;em&gt;Control Panel / Administrative Tools/ Component Services&lt;/em&gt;. Depois, no treeview abra &lt;em&gt;My Computer&lt;/em&gt;, e ent&amp;atilde;o &lt;em&gt;COM+ Applications&lt;/em&gt;. Clique com o bot&amp;atilde;o direito e selecione &amp;ldquo;&lt;em&gt;New &amp;ndash;&amp;gt; Application&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Na tela &amp;ldquo;&lt;em&gt;Welcome to the COM Application Install Wizard&lt;/em&gt;&amp;rdquo; clique em &amp;ldquo;&lt;em&gt;Next &amp;gt;&lt;/em&gt;&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Selecione o bot&amp;atilde;o &amp;ldquo;&lt;em&gt;Create an Empty Application&lt;/em&gt;&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;D&amp;ecirc; um nome para a sua aplica&amp;ccedil;&amp;atilde;o (qualquer nome serve, mas &amp;eacute; bom colocar algo que lembre o nome do componente que ser&amp;aacute; executado). Depois entre &amp;ldquo;&lt;em&gt;Library / Server&lt;/em&gt;&amp;rdquo;, selecione o tipo &amp;ldquo;&lt;em&gt;Server&lt;/em&gt;&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Clique em &amp;ldquo;&lt;em&gt;Next &amp;gt;&lt;/em&gt;&amp;rdquo; e depois&amp;nbsp; &amp;ldquo;&lt;em&gt;This User&amp;rdquo;&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Selecione o usu&amp;aacute;rio com o qual o componente ser&amp;aacute; executado. Pode ser um usu&amp;aacute;rio de dom&amp;iacute;nio previamente criado para executar o componente ou um dos usu&amp;aacute;rios de sistema existentes (NOTA: escolha o usu&amp;aacute;rio tentando manter o mais seguro poss&amp;iacute;vel; evite LOCAL SYSTEM pois o mesmo tem direitos de administrador no Sistema Operacional, a menos que isso seja um pr&amp;eacute;-requisito da aplica&amp;ccedil;&amp;atilde;o).&lt;/li&gt;
&lt;li&gt;Depois pressione &amp;ldquo;&lt;em&gt;Next &amp;gt;&lt;/em&gt;&amp;rdquo; nas telas seguintes (n&amp;atilde;o altere nada), at&amp;eacute; concluir a cria&amp;ccedil;&amp;atilde;o da aplica&amp;ccedil;&amp;atilde;o. &lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-37-metablogapi/7573.image_5F00_18BCCED4.png"&gt;&lt;img style="float: right; display: inline; background-image: none;" title="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-37-metablogapi/1205.image_5F00_thumb_5F00_703DECBF.png" alt="image" width="219" height="299" align="right" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;O pr&amp;oacute;ximo passo &amp;eacute; adicionar o seu componente a esta aplica&amp;ccedil;&amp;atilde;o rec&amp;eacute;m-criada. Voc&amp;ecirc; encontrar&amp;aacute; a aplica&amp;ccedil;&amp;atilde;o em &lt;em&gt;Component Services -&amp;gt; Computers -&amp;gt; My Computer -&amp;gt; COM+ Application &lt;/em&gt;. Clique no &amp;iacute;cone &amp;ldquo;+&amp;rdquo; e voc&amp;ecirc; ver&amp;aacute; um item &amp;ldquo;&lt;em&gt;Components&lt;/em&gt;&amp;rdquo;. Selecione este item.&lt;/li&gt;
&lt;li&gt;Usando o Windows Explorer, arraste a DLL para a janela &amp;agrave; direita na tela em &amp;ldquo;&lt;em&gt;Components&lt;/em&gt;&amp;rdquo;. Com isso o componente ser&amp;aacute; registrado automaticamente no Component Services. Aparecer&amp;aacute; um &amp;iacute;cone de forma circular e de cor amarelada que representa o Componente rec&amp;eacute;m-instalado.&lt;/li&gt;
&lt;li&gt;Em seguida v&amp;aacute; em &lt;em&gt;Component Services -&amp;gt; Computers -&amp;gt; My Computer -&amp;gt; COM+ Application&lt;/em&gt; e selecione sua aplica&amp;ccedil;&amp;atilde;o. Clique com o bot&amp;atilde;o direito e abra as propriedades selecionando &amp;ldquo;&lt;em&gt;Properties&lt;/em&gt;&amp;rdquo; no menu de contexto.&lt;/li&gt;
&lt;li&gt;&lt;span style="background-color: #ffff00;"&gt;Clique na guia &amp;ldquo;&lt;em&gt;Security&lt;/em&gt;&amp;rdquo; e em &amp;ldquo;&lt;em&gt;Authorization&lt;/em&gt;&amp;rdquo; desmarque a op&amp;ccedil;&amp;atilde;o &amp;ldquo;&lt;em&gt;Enforce access checks for this application&lt;/em&gt;&amp;rdquo;. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="background-color: #ffff00;"&gt;Em &amp;ldquo;&lt;em&gt;Security Level&lt;/em&gt;&amp;rdquo; marque a op&amp;ccedil;&amp;atilde;o &amp;ldquo;&lt;em&gt;Perform access checks only at the process level&lt;/em&gt;.&amp;rdquo; &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="background-color: #ffff00;"&gt;Tamb&amp;eacute;m garanta que &amp;ldquo;&lt;em&gt;Apply restriction policy&lt;/em&gt;&amp;rdquo; est&amp;aacute; desmarcado.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="background-color: #ffff00;"&gt;Configure o &amp;ldquo;&lt;em&gt;Impersonate Level&lt;/em&gt;&amp;rdquo; para &amp;ldquo;&lt;em&gt;Anonymous&lt;/em&gt;&amp;rdquo;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;O &amp;uacute;ltimo passo ser&amp;aacute; garantir que o usu&amp;aacute;rio que roda o Application Pool poder&amp;aacute; utilizar o seu componente. Para isso, em COM+ &lt;em&gt;Application &amp;ndash;&amp;gt; &amp;lt;Nome_da_sua_aplicacao&amp;gt; -&amp;gt; Roles -&amp;gt; CreateOwner &amp;ndash;&amp;gt; Users&lt;/em&gt; voc&amp;ecirc; dever&amp;aacute; adicionar o usu&amp;aacute;rio do IIS (em geral IUSR) ou o grupo IIS_USRS (para o IIS 7.X/8).&lt;/li&gt;
&lt;li&gt;
&lt;div align="left"&gt;Tamb&amp;eacute;m garanta que a pasta onde est&amp;aacute; instalado o componente esteja com permiss&amp;otilde;es NTFS que permitam ao usu&amp;aacute;rio do Application Pool possa ler o arquivo do componente. Em geral &amp;eacute; suficiente adicionar a permiss&amp;atilde;o de Execu&amp;ccedil;&amp;atilde;o nesta pasta para o grupo IIS_USRS.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div align="center"&gt;
&lt;table style="width: 560px;" border="0" cellspacing="0" cellpadding="5" bgcolor="#eeeeee"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="560"&gt;
&lt;p align="left"&gt;&lt;span style="color: #ff0000;"&gt;NOTAS: &lt;/span&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;span style="color: #ff0000;"&gt;a) As configura&amp;ccedil;&amp;otilde;es de seguran&amp;ccedil;a do componente (em amarelo acima) podem variar, se o mesmo necessitar personificar o usu&amp;aacute;rio (i.e. rodar sobre o contexto de um outro usu&amp;aacute;rio, por exemplo, para acessar um banco de dados ou outro recurso externo). &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;b) Se estiver usando o Pipeline Classico do IIS 7.x talvez seja necess&amp;aacute;rio adicionar tamb&amp;eacute;m o usu&amp;aacute;rio IUSR e IWAM quando estiver atribuindo as permiss&amp;otilde;es no Component Services e nas permiss&amp;otilde;es NTFS da pasta.&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Agora basta testar a sua aplica&amp;ccedil;&amp;atilde;o. Configure o Application Pool para rodar em modo 64bits e fa&amp;ccedil;a o teste: a aplica&amp;ccedil;&amp;atilde;o, mesmo usando componentes antigos escritos em VB6 dever&amp;aacute; executar sem problemas.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;At&amp;eacute; a pr&amp;oacute;xima!&lt;/p&gt;
&lt;p&gt;PT&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10392313" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/ASP-NET/">ASP.NET</category><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/-NET/">.NET</category><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/IIS/">IIS</category></item><item><title>Varrendo a poeira!</title><link>http://blogs.msdn.com/b/teixeira/archive/2013/02/09/varrendo-a-poeira.aspx</link><pubDate>Sat, 09 Feb 2013 18:00:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10392381</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10392381</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2013/02/09/varrendo-a-poeira.aspx#comments</comments><description>&lt;table cellspacing="0" cellpadding="2" width="560" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="560"&gt;         &lt;p&gt;Olá pessoal! &lt;/p&gt;          &lt;p&gt;Esse é só um post daqueles que a gente escreve para dizer que está fazendo uma faxina na casa. Aproveitando a inspiração de ontem,&amp;#160; acabei fazendo uns updates nos posts antigos sobre ARR (pouca coisa, somente umas referências atualizadas e algumas informações adicionais para deixar o conteúdo mais claro). &lt;/p&gt;          &lt;p&gt;Também devo iniciar uma série de posts sobre assuntos diversos, boa parte deles com foco em problemas que ocorrem durante a migração de aplicações de IIS5/6 (32bits) para IIS 7.x/8. &lt;/p&gt;          &lt;p&gt;A gente se vê em breve! &lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p&gt;[]s           &lt;br /&gt;PT&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10392381" width="1" height="1"&gt;</description></item><item><title>Monitorando aplicações COM+</title><link>http://blogs.msdn.com/b/teixeira/archive/2013/02/08/monitorando-aplica-231-245-es-com.aspx</link><pubDate>Fri, 08 Feb 2013 18:27:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10392241</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10392241</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2013/02/08/monitorando-aplica-231-245-es-com.aspx#comments</comments><description>&lt;p&gt;Já faz um tempo que não publico nada, mas esta semana um outro colega esteve trabalhando num caso muito interessante. Ele estava fazendo o diagnóstico de uma aplicação Web que havia sido migrada para o Windows 2008 R2. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-37-metablogapi/8836.clip_5F00_image001_5F00_3CE5D031.jpg"&gt;&lt;img title="clip_image001" style="float: right; display: inline; background-image: none;" border="0" alt="clip_image001" align="right" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-37-metablogapi/6758.clip_5F00_image001_5F00_thumb_5F00_19D55EC1.jpg" width="356" height="311" /&gt;&lt;/a&gt;Esta aplicação usa componentes COM+ e em algum momento, o componente simplesmente travava (cenário típico de Hang).     &lt;br /&gt;Os componentes são antigos, e não se tem o código-fonte dos mesmos. Após muita investigação, descobriu-se que o componente iniciava um outro processo no Windows para realizar uma tarefa específica. Quando o COM+, por algum motivo realizava o RECYCLE do processo DLLHOST.exe onde o componente estava sendo executado, este outro processo permanecia em execução. &lt;/p&gt;  &lt;p&gt;Na próxima chamada ao componente, o mesmo tentava executar o outro processo, mas já havia uma instância em execução e por isso o componente travava. A melhor solução seria reescrever todo o componente de forma que o mesmo utilize técnicas mais modernas para executar as tarefas a que se propõe, mas infelizmente isso é impossível. &lt;/p&gt;  &lt;p&gt;Neste caso, uma solução de contorno foi necessária. Para eliminar o travamento, bastou desabilitar o RECYCLING da aplicação COM+ no snap-in dos serviços de componente (Component Services). &lt;/p&gt;  &lt;p&gt;Todavia, um novo problema surge com essa abordagem, que é o fato que agora o processo DLLHOST.exe do COM+ poderá travar em função de algum outro mau comportamento ou até mesmo devido ao processo natural de fragmentação de memória (outro dia faço um post sobre isso). &lt;/p&gt;  &lt;p&gt;Para minimizar esse problema seria ideal ter uma ferramenta que monitore o comportamento da aplicação COM+ (“AppBugada”, no exemplo da imagem acima) e em caso de consumo de um certo limite de memória virtual, que ela seja automaticamente encerrada. &lt;/p&gt;  &lt;p&gt;Para isso, um script foi usado a fim de monitorar a aplicação COM+. Veja abaixo um exemplo &lt;strong&gt;&lt;u&gt;similar&lt;/u&gt;&lt;/strong&gt; que também pode ser usado para fazer este tipo de objetivo:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font style="background-color: rgb(255, 255, 0);" color="#ff0000"&gt;NOTA: Este script é um código-exemplo, use por sua conta e risco. Não oferecemos suporte a este script e não nos responsabilizamos por eventuais consequências adversas devido ao seu uso num ambiente de produção. &lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;strComputer = &amp;quot;.&amp;quot;       &lt;br /&gt;strCOMAppName = &amp;quot;AppBugada&amp;quot;        &lt;br /&gt;constMemLimit = 999999999 'Bytes        &lt;br /&gt;constRunning = false        &lt;br /&gt;constCOMAppFound = false&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;     &lt;br /&gt;&lt;font color="#0000ff" face="Courier New"&gt; Set objCOMCatalog = CreateObject(&amp;quot;COMAdmin.COMAdminCatalog&amp;quot;)       &lt;br /&gt; Set objCOMApps = objCOMCatalog.GetCollection(&amp;quot;Applications&amp;quot;)        &lt;br /&gt;objCOMApps.Populate&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;For each objCOMApp in objCOMApps       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; If objCOMApp.Name = strCOMAppName then        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Set objCOMAppInstances = objCOMApps.GetCollection(&amp;quot;ApplicationInstances&amp;quot;,objCOMApp.Key)        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; objCOMAppInstances.Populate        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; For each objCOMInstance in objCOMAppInstances        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PID = objCOMInstance.Value(&amp;quot;ProcessID&amp;quot;)        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; constRunning = not ( objCOMInstance.Value(&amp;quot;IsPaused&amp;quot;) or objCOMInstance.Value(&amp;quot;HasRecycled&amp;quot;))        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; If constRunning then        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Set objWMIService = GetObject(&amp;quot;winmgmts:&amp;quot; _        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;amp; &amp;quot;{impersonationLevel=impersonate}!\\&amp;quot; _        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;amp; strComputer &amp;amp; &amp;quot;\root\cimv2&amp;quot;)        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Set objProcesses = objWMIService.ExecQuery _        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (&amp;quot;Select * from Win32_Process where ProcessId='&amp;quot; &amp;amp; PID &amp;amp; &amp;quot;'&amp;quot;)        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; For Each objProcess in objProcesses        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Wscript.Echo &amp;quot;Process: &amp;quot; &amp;amp; objProcess.Name        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sngProcessTime = (CSng(objProcess.KernelModeTime) + _        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CSng(objProcess.UserModeTime)) / 10000000        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Wscript.Echo &amp;quot;Processor Time: &amp;quot; &amp;amp; sngProcessTime        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Wscript.Echo &amp;quot;Process ID: &amp;quot; &amp;amp; objProcess.ProcessID        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Wscript.Echo &amp;quot;Peak Virtual Size: &amp;quot; _        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;amp; objProcess.PeakVirtualSize        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Wscript.Echo &amp;quot;Virtual Size: &amp;quot; _        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;amp; objProcess.VirtualSize        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; If objProcess.VirtualSize &amp;gt; constMemLimit then        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; objProcess.Terminate()        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; End if        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Next        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Set objWMIService = nothing        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Set objProcesses = nothing        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Exit For        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Else        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Wscript.Echo &amp;quot;COM+ Application not running.&amp;quot;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; End if        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Next        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Set objCOMAppInstances = nothing        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; constCOMAppFound = true        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Exit For        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; End if        &lt;br /&gt; Next&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;If constCOMAppFound = false then       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Wscript.Echo &amp;quot;COM+ Application not found.&amp;quot;        &lt;br /&gt;End if&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;Set objCOMApps = nothing         &lt;br /&gt; Set objCOMCatalog = nothing&lt;/font&gt;        &lt;br /&gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;O Script usa a interface COMAdmin para monitorar as aplicações COM+ e classes WMI para coletar informações do processo DLLHOST.exe correspondente. Caso o processo atinja um certo limite de uso de memória virtual, o mesmo será terminado. &lt;/p&gt;  &lt;p&gt;Valeu pessoal e até a próxima. &lt;/p&gt;  &lt;p&gt;PT&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10392241" width="1" height="1"&gt;</description></item><item><title>Localizando assemblies compilados em modo debug</title><link>http://blogs.msdn.com/b/teixeira/archive/2011/08/05/localizando-assemblies-compilados-em-modo-debug.aspx</link><pubDate>Fri, 05 Aug 2011 09:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10191428</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10191428</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2011/08/05/localizando-assemblies-compilados-em-modo-debug.aspx#comments</comments><description>&lt;p&gt;No meu &amp;uacute;ltimo post eu comentei os problemas que pode ocorrer ao se publicar uma aplica&amp;ccedil;&amp;atilde;o Web em modo debug para a produ&amp;ccedil;&amp;atilde;o.&lt;/p&gt;
&lt;p&gt;Com isso, ficou uma d&amp;uacute;vida: como saber se o meu website possui aplica&amp;ccedil;&amp;otilde;es publicadas em modo debug. Uma forma muito simples de verificar isso &amp;eacute; localizar o arquivo web.config e procurar pela diretiva &amp;lt;compilation debug=&amp;rdquo;true&amp;rdquo;&amp;gt;.&lt;/p&gt;
&lt;p&gt;Mas eu vou mostrar uma outra t&amp;eacute;cnica diferente aqui, que se baseia na inspe&amp;ccedil;&amp;atilde;o de cada uma das DLLs contidas nas pastas de conte&amp;uacute;do do seu site.&lt;/p&gt;
&lt;p&gt;Isso porque, eventualmente uma aplica&amp;ccedil;&amp;atilde;o foi compilada em modo debug, e depois cpiada para produ&amp;ccedil;&amp;atilde;o, e ent&amp;atilde;o teve o seu arquivo web.config alterado (ajustado). O que pode ocorrer &amp;eacute; que h&amp;aacute; DLLs em modo debug, mesmo com a diretiva j&amp;aacute; marcada como FALSE.&lt;/p&gt;
&lt;p&gt;Vamos usar um script powershell 2.0 que varre as pastas a partir de um certa pasta, e localiza todos os arquivos .exe e .dll. Depois usamos o namespace System.Reflection.Assembly para verificar se foi compilado em modo debug ou release (atributo isJITTrackingEnabled).&lt;/p&gt;
&lt;p&gt;Se a DLL n&amp;atilde;o for compilada com .NET, ser&amp;aacute; gerada um exce&amp;ccedil;&amp;atilde;o e nada ser&amp;aacute; escrito, caso contr&amp;aacute;rio, uma mensagem com o nome e o atributo debug &amp;eacute; exibido.&amp;nbsp; Veja o c&amp;oacute;digo-exemplo a seguir:&lt;/p&gt;
&lt;table style="width: 100%;" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span style="font-family: Courier New; font-size: x-small;" size="2" face="Courier New"&gt;# &lt;br /&gt;# List Assemblies - requires a path &lt;br /&gt;# &lt;br /&gt;PARAM &lt;br /&gt;( &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [string] $path = ""&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # List assemblies&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Assemblies using debug mode" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $files =&amp;nbsp; dir -recurse -path $path -include "*.dll", "*.exe" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach($file in $files) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $assembly = [System.Reflection.Assembly]::LoadFile($file); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $attrib = $assembly.GetCustomAttributes($false) | where-object { $_ -is &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Courier New; font-size: x-small;" size="2" face="Courier New"&gt;[System.Diagnostics.DebuggableAttribute] } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( $attrib.IsJITTrackingEnabled )&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $debug = 'Debug'; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $debug = 'Release'; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $version = $assembly.ImageRuntimeVersion; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $file.FullName.ToLower().Replace($path.ToLower(),'') + " | " + $debug + " | " &lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;" size="2" face="Courier New"&gt;+ $version ; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } catch [System.Management.Automation.MethodInvocationException] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="background-color: #ffff00;" color="#ff0000"&gt;
&lt;p&gt;&lt;strong&gt;DISCLAIMER: o c&amp;oacute;digo acima &amp;eacute; fornecido &amp;ldquo;as is&amp;rdquo;, e sem garantias. Use por sua conta e risco.&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Com isso, fica bem mais f&amp;aacute;cil identificar se h&amp;aacute; aplica&amp;ccedil;&amp;otilde;es em modo DEBUG. Voc&amp;ecirc; pode usar a mesma abordagem para criar uma aplica&amp;ccedil;&amp;atilde;o .NET (ou um Windows Service)&lt;/p&gt;
&lt;p&gt;At&amp;eacute; mais!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10191428" width="1" height="1"&gt;</description></item><item><title>Compilation Debug=”true”, uma odisséia</title><link>http://blogs.msdn.com/b/teixeira/archive/2011/07/30/compilation-debug-true-uma-odiss-233-ia.aspx</link><pubDate>Sat, 30 Jul 2011 21:41:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10191424</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10191424</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2011/07/30/compilation-debug-true-uma-odiss-233-ia.aspx#comments</comments><description>&lt;p&gt;Este é mais uma daqueles posts que retrata a sempre tensa relação entre os administradores de Servidores Web e os desenvolvedores de aplicações ASP.NET. &lt;/p&gt;  &lt;p&gt;Resolvi escrever isso porque ontem estava conversando com um cliente e ele estava com dúvidas sobre o uso (ou não) dessa diretiva nos arquivos web.config das aplicações ASP.NET.&lt;/p&gt;  &lt;p&gt;A pergunta que sempre se faz é a seguinte: Em que momento devo usar a diretiva &amp;lt;compilation debug=”true”/&amp;gt; em minhas aplicações ASP.NET. Semprem surgem duvidas em relação a resposta para esta questão, então vou tentar ser bem claro: &lt;strong&gt;NUNCA!!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;O grande problema é que, por padrão, quando o desenvolvedor está criando a sua aplicação, é necessário ter esta diretiva habilitada para poder fazer o &lt;em&gt;debugging&lt;/em&gt; da aplicação. Assim, o Visual Studio por padrão deixa o &amp;lt;compilation debug=”true” /&amp;gt; quando está se gerando um build em modo Debug. Por outro lado, se o código da aplicação for compilado em modo RELEASE, então teremos o &amp;lt;compilation debug=”false” /&amp;gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-37-metablogapi/6404.image_5F00_55E57FC9.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-37-metablogapi/0121.image_5F00_thumb_5F00_52F01B16.png" width="505" height="65" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Cabe deixar bem claro que &lt;em&gt;é responsabilidade do desenvolvedor gerar um build em modo RELEASE&lt;/em&gt; antes de enviar para a publicação no servidor Web. É também &lt;em&gt;é responsabilidade do administrador de servidores Web garantir que não serão publicados builds em modo debug&lt;/em&gt; no ambiente de produção Web. &lt;/p&gt;  &lt;p&gt;Há uma miríade de artigos explicando os problemas causados pelo &lt;em&gt;deployment&lt;/em&gt; de aplicações em modo debug, então vou apontar um &lt;em&gt;oficial &lt;/em&gt;que resume-os: &lt;a title="http://support.microsoft.com/kb/2580348" href="http://support.microsoft.com/kb/2580348"&gt;http://support.microsoft.com/kb/2580348&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Para desabilitar o modo debug nas aplicações Web, basta seguir as recomendações do artigo: &lt;a title="http://support.microsoft.com/kb/815157" href="http://support.microsoft.com/kb/815157"&gt;http://support.microsoft.com/kb/815157&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Algo que poucos sabem é que os administradores de servidores Web podem evitar que aplicações sejam publicadas em modo &lt;em&gt;debug &lt;/em&gt;nos seus servidores, para o .NET Framework 2.0 e versões posteriores. Para isso, basta alterar o arquivo machine.config, adicionando a diretiva &amp;lt;deployment retail=”true” /&amp;gt;, como exemplificado:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;lt;configuration&amp;gt;      &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160; &amp;lt;system.web&amp;gt;      &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font style="background-color: #ffff00"&gt;&amp;lt;deployment retail=&amp;quot;true&amp;quot;/&amp;gt;&lt;/font&gt;       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ...      &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160; &amp;lt;/system.web&amp;gt;      &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Com isso, o &lt;em&gt;debugging&lt;/em&gt; será desabilitado para todas as aplicações. Mas mesmo assim, se uma aplicação ainda estiver configurada para usar &amp;lt;compilation debug=”true” /&amp;gt;, então o &lt;em&gt;executionTimeout&lt;/em&gt; (ou seja, o tempo máximo que uma página pode executar) continuará sendo 30.000.000 segundos (ou seja, muiiiito tempo).&lt;/p&gt;  &lt;p&gt;Resumindo, &amp;lt;deployment retail=”true” /&amp;gt; ajuda, mas não resolve o problema totalmente. &lt;/p&gt;  &lt;p&gt;Então, DEVs e WebAdmins, fiquem atentos e não se esqueçam de sempre confirmar que as aplicações estão sendo publicadas em modo release no ambiente de produção.&lt;/p&gt;  &lt;p&gt;Até mais!&lt;/p&gt;  &lt;p&gt;Paulo.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10191424" width="1" height="1"&gt;</description></item><item><title>Como desabilitar o SSLv2 e o PCT v1 no IIS6 e IIS7.x</title><link>http://blogs.msdn.com/b/teixeira/archive/2011/05/28/como-desabilitar-o-sslv2-e-o-pct-v1-no-iis6-e-iis7-x.aspx</link><pubDate>Sat, 28 May 2011 21:45:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10169339</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10169339</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2011/05/28/como-desabilitar-o-sslv2-e-o-pct-v1-no-iis6-e-iis7-x.aspx#comments</comments><description>&lt;p&gt;&lt;font size="2"&gt;Já faz algum tempo que se sabe que o protocolo SSL v2 é suscetível a ataques do tipo “man-in-the-middle”. Mas a menos tempo as empresas especializadas em testes de intrusão começaram a fazer testes e colocar este protocolo na “lista negra” das vulnerabilidades pelo qual o seu web site pode ser atacado. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Recentemente montei um pequeno laboratório para desabilitar estes protocolos no Windows 2003, Windows 2008 e Windows 2008 R2, a pedido de um cliente. A melhor forma de fazer isso nestas versões do Windows é através do Schannel. O Schannel é um Security Support Provider utilizado no Windows por aplicações de Internet (como o IIS) que necessitam comunicações seguras via HTTP. O Schannel oferece autenticação e comunicações seguras e privadas através do uso de criptografia. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;O procedimento consiste em remover da lista de protocolos permitidos pelo Schannel aqueles que são considerados fatores de risco, ou que apresentem vulnerabilidades conhecidas. Dessa forma, o SSL v2.0, o PCT 1.0 e as cifras de 40bits e 56bits devem ser desabilitadas. Os passos estão descritos a seguir:&amp;#160; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="2"&gt;Windows 2003: &lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;No Windows 2003/IIS6, o protocolo SSLv2 está habilitado, juntamente com o PCT 1.0.      &lt;br /&gt;Neste caso, o procedimento recomendado para desabilitar estes procotolos e também as cifras de 40 e 56bits é o seguinte:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Crie um arquivo .REG com o seguinte conteúdo: &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;Windows Registry Editor Version 5.00&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\     &lt;br /&gt;SCHANNEL\Protocols\Multi-Protocol Unified Hello\Server]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:00000000      &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\     &lt;br /&gt;SCHANNEL\Protocols\PCT 1.0\Server]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:00000000&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;      &lt;br /&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\      &lt;br /&gt;SCHANNEL\Protocols\SSL 2.0\Server]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:00000000     &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\     &lt;br /&gt;SCHANNEL\Protocols\SSL 3.0\Server]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:ffffffff&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;      &lt;br /&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\      &lt;br /&gt;SCHANNEL\Protocols\TLS 1.0\Server]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:ffffffff&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;      &lt;br /&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\      &lt;br /&gt;SCHANNEL\Ciphers\DES 56/56]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:00000000&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;      &lt;br /&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\      &lt;br /&gt;SCHANNEL\Ciphers\NULL]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:00000000&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;      &lt;br /&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\      &lt;br /&gt;SCHANNEL\Ciphers\RC2 128/128]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:00000000&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;      &lt;br /&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\      &lt;br /&gt;SCHANNEL\Ciphers\RC2 40/128]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:00000000&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;      &lt;br /&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\      &lt;br /&gt;SCHANNEL\Ciphers\RC2 56/128]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:00000000&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;      &lt;br /&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\      &lt;br /&gt;SCHANNEL\Ciphers\RC4 128/128]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:ffffffff&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;      &lt;br /&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\      &lt;br /&gt;SCHANNEL\Ciphers\RC4 40/128]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:00000000&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;      &lt;br /&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\      &lt;br /&gt;SCHANNEL\Ciphers\RC4 56/128]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:00000000&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;      &lt;br /&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\      &lt;br /&gt;SCHANNEL\Ciphers\RC4 64/128]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:00000000&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;      &lt;br /&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\      &lt;br /&gt;SCHANNEL\Ciphers\Triple DES 168/168]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:ffffffff&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Aplique então este arquivo nos servidores IIS6 e em seguida reinicie os mesmos. Para testar se o protocolo foi desabilitado pode ser utilizado o utilitário WFETCH, que é parte do IIS6 Resource Kit. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="2"&gt;Windows 2008 e Windows 2008 R2:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;No Windows 2008 e Windows 2008 R2 o protocolo SSL v2.0 está habilitado, mas o protocolo PCT 1.0 já está desabilitado por padrão. Também não há cifras com 40 ou 56 bits habilitadas. De qualquer forma a mesma configuração utilizada no Windows 2003 pode ser aplicada no Windows 2008. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Assim, basta criar um arquivo .REG com o seguinte conteúdo: &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;Windows Registry Editor Version 5.00&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;      &lt;br /&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\      &lt;br /&gt;SCHANNEL\Protocols\Multi-Protocol Unified Hello\Server]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:00000000&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;      &lt;br /&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\      &lt;br /&gt;SCHANNEL\Protocols\PCT 1.0\Server]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:00000000&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;      &lt;br /&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\      &lt;br /&gt;SCHANNEL\Protocols\SSL 2.0\Server]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:00000000&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;      &lt;br /&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\      &lt;br /&gt;SCHANNEL\Protocols\SSL 3.0\Server]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:ffffffff&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;      &lt;br /&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\      &lt;br /&gt;SCHANNEL\Protocols\TLS 1.0\Server]       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;quot;Enabled&amp;quot;=dword:ffffffff&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Uma outra forma de desabilitar o uso do protocolo SSL v2 no Windows 2008 e Windows 2008 R2 é explicitamente desabilitar as seguints cifras: &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;SSL_CK_RC4_128_WITH_MD5,      &lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;SSL_CK_DES_192_EDE3_CBC_WITH_MD5&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Para isso basta seguir os procedimentos sugeridos no artigo:      &lt;br /&gt;&lt;/font&gt;    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/amol/archive/2010/04/27/how-to-disable-ssl-2-0-in-internet-information-services-7.asp"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/b/amol/archive/2010/04/27/how-to-disable-ssl-2-0-in-internet-information-services-7.aspx"&gt;http://blogs.msdn.com/b/amol/archive/2010/04/27/how-to-disable-ssl-2-0-in-internet-information-services-7.asp&lt;/a&gt;&lt;/a&gt;&lt;font size="2"&gt;x&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;substituindo os valores padrão a seguir: &lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,      &lt;br /&gt;TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,       &lt;br /&gt;TLS_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_3DES_EDE_CBC_SHA,       &lt;br /&gt;TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256,       &lt;br /&gt;TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384,       &lt;br /&gt;TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256,       &lt;br /&gt;TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384,       &lt;br /&gt;TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256,       &lt;br /&gt;TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384,       &lt;br /&gt;TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256,       &lt;br /&gt;TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256,       &lt;br /&gt;TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384,       &lt;br /&gt;TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384,       &lt;br /&gt;TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256,       &lt;br /&gt;TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384,       &lt;br /&gt;TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256,       &lt;br /&gt;TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384,       &lt;br /&gt;TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,       &lt;br /&gt;TLS_DHE_DSS_WITH_AES_128_CBC_SHA,       &lt;br /&gt;TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,       &lt;br /&gt;TLS_DHE_DSS_WITH_AES_256_CBC_SHA,       &lt;br /&gt;TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA,       &lt;br /&gt;TLS_RSA_WITH_RC4_128_MD5,       &lt;br /&gt;&lt;font style="background-color: #ff0000"&gt;&lt;strong&gt;SSL_CK_RC4_128_WITH_MD5,SSL_CK_DES_192_EDE3_CBC_WITH_MD5,&lt;/strong&gt;         &lt;br /&gt;&lt;/font&gt;TLS_RSA_WITH_NULL_SHA256,TLS_RSA_WITH_NULL_SHA&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Por este novo conjunto de cifras: &lt;/font&gt;&lt;/p&gt; &lt;font size="2" face="Courier New"&gt;TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,    &lt;br /&gt;TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,     &lt;br /&gt;TLS_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_3DES_EDE_CBC_SHA,     &lt;br /&gt;TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256,     &lt;br /&gt;TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384,     &lt;br /&gt;TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256,     &lt;br /&gt;TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384,     &lt;br /&gt;TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256,     &lt;br /&gt;TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384,     &lt;br /&gt;TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256,     &lt;br /&gt;TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256,     &lt;br /&gt;TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384,     &lt;br /&gt;TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384,     &lt;br /&gt;TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256,     &lt;br /&gt;TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384,     &lt;br /&gt;TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256,     &lt;br /&gt;TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384,     &lt;br /&gt;TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,     &lt;br /&gt;TLS_DHE_DSS_WITH_AES_128_CBC_SHA,     &lt;br /&gt;TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,     &lt;br /&gt;TLS_DHE_DSS_WITH_AES_256_CBC_SHA,     &lt;br /&gt;TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA,     &lt;br /&gt;TLS_RSA_WITH_RC4_128_MD5,     &lt;br /&gt;TLS_RSA_WITH_NULL_SHA256,TLS_RSA_WITH_NULL_SHA&lt;/font&gt;   &lt;p&gt;&lt;font size="2"&gt;Adicionalmente, é recomendado que os websites configurados nos servidores IIS7.x sejam configurados para não permitir o uso de cifras fracas (40bits e 56bits). Para isso, utilizando o Internet Information Services Manager, selecione o website a ser configurado, e no painel de navegação selecione &amp;quot;SSL Settings&amp;quot;. Em seguida, configure o site para requerer o uso de cifras de 128bits (marque o checkbox &amp;quot;Require 128-bit SSL&amp;quot;). A figura a seguir ilustra a configuração necessária: &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-37-metablogapi/6837.clip_5F00_image001_5F00_1424BF6C.png"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-37-metablogapi/8407.clip_5F00_image001_5F00_71144DFB.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-37-metablogapi/8738.clip_5F00_image001_5F00_thumb_5F00_718DF675.png" width="503" height="247" /&gt;&lt;/a&gt;&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;strong&gt;Conclusões&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Este procedimento irá desabilitar o protocolo SSL v2.0 e PCT v1.0 removendo-os da lista dos protocolos permitidos no Schannel. &lt;/font&gt;&lt;font size="2"&gt;Ao se remover os protocolos SSL v2.0 e PCT v1.0 da lista de protocolos permitidos no Schannel, o servidor Web IIS não será mais capaz de estabelecer canais de comunicação utilizando os mesmos, dessa forma evitando que vulnerabilidades conhecidas sejam exploradas. Contudo, &lt;strong&gt;&lt;font color="#c0504d"&gt;clientes antigos ou proprietários que não implementem os protocolos restantes (com o SSL v3.0 ou o TLS 1.0) não conseguirão mais ter acesso ao servidor&lt;/font&gt;&lt;/strong&gt;. Cabe a você avaliar se há aplicações que dependam dos protocolos desabilitados, e o consequente impacto para o seu negócio ao se tomar esta ação. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="2"&gt;Referências: &lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font size="2"&gt;Cipher Suites in Schannel:        &lt;br /&gt;&lt;/font&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa374757(VS.85).aspx"&gt;&lt;font size="2"&gt;http://msdn.microsoft.com/en-us/library/aa374757(VS.85).aspx&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font size="2"&gt;Schannel Cipher Suites in Windows Vista:        &lt;br /&gt;&lt;/font&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ff468651(v=VS.85).aspx"&gt;&lt;font size="2"&gt;http://msdn.microsoft.com/en-us/library/ff468651(v=VS.85).aspx&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font size="2"&gt;How to disable SSL 2.0 in Internet Information Services 7:        &lt;br /&gt;&lt;/font&gt;&lt;a href="http://blogs.msdn.com/b/amol/archive/2010/04/27/how-to-disable-ssl-2-0-in-internet-information-services-7.asp"&gt;&lt;font size="2"&gt;http://blogs.msdn.com/b/amol/archive/2010/04/27/how-to-disable-ssl-2-0-in-internet-information-services-7.asp&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;x &lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font size="2"&gt;How to disable PCT 1.0, SSL 2.0, SSL 3.0, or TLS 1.0 in Internet Information Services:        &lt;br /&gt;&lt;/font&gt;&lt;a href="http://support.microsoft.com/?id=187498"&gt;&lt;font size="2"&gt;http://support.microsoft.com/?id=187498&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font size="2"&gt;Prioritizing Schannel Cipher Suites:        &lt;br /&gt;&lt;/font&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb870930(VS.85).aspx"&gt;&lt;font size="2"&gt;http://msdn.microsoft.com/en-us/library/bb870930(VS.85).aspx&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10169339" width="1" height="1"&gt;</description></item><item><title>Mais um site sobre LogParser</title><link>http://blogs.msdn.com/b/teixeira/archive/2011/05/05/mais-um-site-sobre-logparser.aspx</link><pubDate>Thu, 05 May 2011 18:43:23 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10161500</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10161500</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2011/05/05/mais-um-site-sobre-logparser.aspx#comments</comments><description>&lt;p&gt;Confesso que eu tenho um arquivo com as minhas queries de logparser preferidas, mas algumas vezes aparece alguma coisa que não está lá e nessas horas eu recorro a uma pesquisa na Web (usando o Bing!, é claro!) &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Smiley piscando" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-37-metablogapi/4454.wlEmoticon_2D00_winkingsmile_5F00_5683D1E1.png" /&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Num desses dias eu acabei achando o site “LogParserPlus.com”, e encontrei uma série de queries bem interessantes (muitas delas eu já tinha, mas tem outras bem legais lá). Então, ao invés de ficar copiando e colando tudo aqui, passo para vocês o link, vale a pena visitar: &lt;a href="http://www.logparserplus.com/examples" target="_blank"&gt;logparserplus.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Abraços,&lt;/p&gt;  &lt;p&gt;Paulo.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10161500" width="1" height="1"&gt;</description></item><item><title>Otimizando o tempo de carregamento do site – parte 2</title><link>http://blogs.msdn.com/b/teixeira/archive/2011/02/16/otimizando-o-tempo-de-carregamento-do-site-parte-2.aspx</link><pubDate>Wed, 16 Feb 2011 18:13:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10130515</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10130515</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2011/02/16/otimizando-o-tempo-de-carregamento-do-site-parte-2.aspx#comments</comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Ok, eu havia prometido falar sobre esse assunto, mas já faz um tempo que ando realmente muito ocupado. Hoje, entretanto, num momento de falta de inspiração, resolvi “descansar” a cabeça um pouco, continuando esta série de posts. &lt;/p&gt;  &lt;p&gt;Vamos então falar de três dos assuntos abaixo (em vermelho):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;paralelização de requests &lt;/li&gt;    &lt;li&gt;&lt;font color="#ff0000"&gt;utilização de compressão &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font color="#ff0000"&gt;redução de espaços em branco das páginas &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font color="#000000"&gt;evitar a serialização de download do javascript &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font color="#ff0000"&gt;otimização de tamanho das imagens &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;cache do lado do servidor &lt;/li&gt;    &lt;li&gt;cache do lado do cliente &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;A idéia aqui é que quanto menos conteúdo você tenha na página, obviamente ela irá carregar mais rapidamente. Assim fica fácil entender por que devemos usar imagens do tamanho apropriado, páginas com pouco código HTML (ou ao menos bem otimizado, usando folhas de estilo CSS), usar compressão, etc.. &lt;/p&gt;  &lt;p&gt;Todavia, do ponto de vista de quem desenvolve um site Web, muitas vezes é difícil identificar quais páginas são candidatas a optimização. Mais complexo se torna esta tarefa quando falamos de aplicações Web, com páginas sendo geradas dinâmicamente. &lt;/p&gt;  &lt;p&gt;Felizmente existem várias ferramentas que podem ser utilizadas para nos auxiliar nesta tarefa, duas delas gratuita e disponível para download no site da Microsoft. A primeira é o Visual RoundTrip Analyzer (VRTA), que pode ser obtido neste link: &lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=119f3477-dced-41e3-a0e7-d8b5cae893a3" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=119f3477-dced-41e3-a0e7-d8b5cae893a3"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=119f3477-dced-41e3-a0e7-d8b5cae893a3&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;O VRTA requer que o Microsoft Network Monitor esteja instalado para realizar a captura dos dados na rede. A partir daí ele apresenta de forma gráfica e também em forma de relatório diversas informações sobre o tempo de carregamento das páginas. Entre elas, ele apresenta quais páginas estão com uma taxa de compressão baixa, com espaços em branco em excesso, e também imagens com tamanho inadequado (muito pequenas). &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-40-37-metablogapi/4848.image_5F00_20E70118.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-40-37-metablogapi/8863.image_5F00_thumb_5F00_24ACA3B7.png" width="529" height="126" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Além disso, o VRTA apresenta uma “análise” dos princiapis pontos a serem otimizados no carregamento da página, algo extremamente útil e que pode facilitar a decisão de que tipo de problema você deve atacar primeiro. &lt;/p&gt;  &lt;p&gt;&lt;font color="#333333"&gt;A segunda ferramenta&lt;/font&gt; é o Internet Explorer 9. Pois é, o IE9 possui um módulo chamado “Developer Tools” que possui diversos recursos muito interessantes. Uma das coisas é que possível fazer é uma captura de rede, de forma idêntica ao VRTA, mas sem requerer o Microsoft NetWork Monitor instalado. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-40-37-metablogapi/1682.image_5F00_219EF139.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-40-37-metablogapi/3343.image_5F00_thumb_5F00_7EF9C6E7.png" width="404" height="299" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;O interessante em relação ao Developer Tools do IE9 é que, além de mostrar informações de forma similar ao VRTA, ele também faz a ligação com o código JScript e DOM que “disparou” o carregamento de um certo componente. &lt;/p&gt;  &lt;p&gt;Então ai fica a dica, baixe as duas ferramentas e começe a brincar.    &lt;br /&gt;Com tempo voltarei a esse assunto para explorarmos mais possibilidades. &lt;/p&gt;  &lt;p&gt;Abraços,&lt;/p&gt;  &lt;p&gt;Paulo.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10130515" width="1" height="1"&gt;</description></item><item><title>Updates em relação a suportabilidade do .NET Framework</title><link>http://blogs.msdn.com/b/teixeira/archive/2010/11/11/updates-em-rela-231-227-o-a-suportabilidade-do-net-framework.aspx</link><pubDate>Fri, 12 Nov 2010 01:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10089891</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10089891</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2010/11/11/updates-em-rela-231-227-o-a-suportabilidade-do-net-framework.aspx#comments</comments><description>&lt;p&gt;Pessoal, algumas informações em relação ao suporte do .NET Framework:&lt;/p&gt;  &lt;p&gt;A Microsoft atualizou sua política de suporte para o .NET Framework, e a partir de agora, começando com o .NET Framework 3.5 Service Pack 1 (SP1) o mesmo será considerado um “Componente”, atrelado ao ciclo de vida do produto “pai”, no caso, o Windows Server. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;.NET Framework versões 3.0 e 3.5:&lt;/b&gt; ambas as versões continuam suportadas &lt;strong&gt;até 12 de Abril de 2011. &lt;/strong&gt;A partir desta data o suporte a essas versões será encerrado. &lt;/p&gt;  &lt;p&gt;&lt;font style="background-color: #ffff00"&gt;É altamente recomendável que caso possua aplicações escritas com essas versões do Framework, você se prepare para atualizar para o .NET Framework 3.5 SP1 &lt;strong&gt;&lt;font color="#ff0000"&gt;antes de 12 de Abril de 2011&lt;/font&gt;&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;E sobre as versões 1.1 e 2.0 do Framework?&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;O suporte ao .NET Framework 1.1 se encerra em 8 de Outubro de 2013; para obter suporte você deve estar usando o último Service Pack disponível. &lt;/li&gt;    &lt;li&gt;O suporte ao .NET Framework 2.0 termina em 12 de Abril de 2016; para obter suporte você deve estar usando o último Service Pack disponível. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Nota: &lt;/strong&gt;estas datas podem sofrer alterações. Para confirmar se as mesmas continuam válidas, acesse: &lt;a title="http://support.microsoft.com/lifecycle/search/default.aspx?sort=PN&amp;amp;alpha=.net+framework&amp;amp;Filter=FilterNO" href="http://support.microsoft.com/lifecycle/search/default.aspx?sort=PN&amp;amp;alpha=.net+framework&amp;amp;Filter=FilterNO"&gt;http://support.microsoft.com/lifecycle/search/default.aspx?sort=PN&amp;amp;alpha=.net+framework&amp;amp;Filter=FilterNO&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Para maiores informações, visite o site &lt;a href="http://support.microsoft.com/gp/lifeandotnet"&gt;http://support.microsoft.com/gp/lifeandotnet&lt;/a&gt; ou entre em contato via email através do endereço &lt;a href="mailto:mslpm@microsoft.com"&gt;mslpm@microsoft.com&lt;/a&gt; (preferivelmente em inglês).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Recursos do Microsoft Lifecycle&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;· &lt;a href="http://support.microsoft.com/lifecycle/"&gt;MSL Web site&lt;/a&gt; – site oficial sobre o ciclo de vida de produtos Microsoft.&lt;/p&gt;  &lt;p&gt;· &lt;a href="https://profile.microsoft.com/RegSysProfileCenter/subscriptionwizard.aspx?wizid=98973176-f0b1-4f60-957d-5936c3b933c0&amp;amp;lcid=1033"&gt;MSL Newsletter Sign-up&lt;/a&gt; - para receber atualizações via email do ciclo de vida de produtos Microsoft&lt;/p&gt;  &lt;p&gt;· &lt;a href="http://blogs.technet.com/lifecycle/default.aspx"&gt;MSL Blog&lt;/a&gt; – Blog sobre o ciclo de vida de produtos Microsoft&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10089891" width="1" height="1"&gt;</description></item><item><title>Vulnerabilidade do ASP.NET – hotfix disponível!!!!</title><link>http://blogs.msdn.com/b/teixeira/archive/2010/09/28/vulnerabilidade-do-asp-net-hotfix-dispon-237-vel.aspx</link><pubDate>Tue, 28 Sep 2010 18:52:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10068901</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10068901</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2010/09/28/vulnerabilidade-do-asp-net-hotfix-dispon-237-vel.aspx#comments</comments><description>&lt;p&gt;Há diversos blogs na Internet falando da vulnerabilidade do ASP.NET recentemente descoberta que permite o acesso no servidor Web, tantos que optei por não escrever nada no meu. &lt;/p&gt;  &lt;p&gt;Porém a alguns minutos atrás foi lançado o hotfix para todas as versões afetadas pelo bug. Mais informações podem ser obtidas em: &lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.microsoft.com/technet/security/bulletin/MS10-070.mspx" href="http://www.microsoft.com/technet/security/bulletin/MS10-070.mspx"&gt;http://www.microsoft.com/technet/security/bulletin/MS10-070.mspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Alguns pontos importantes:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Vou instalar no Windows 2008 R2, mas não encontro o pacote para o framework 2.0 para download&lt;/strong&gt;       &lt;br /&gt;Não tem problema, instale a versão do framework 3.5.x e ele irá “corrigir” também a versão 2.0 (como devem saber, o 3.5.x é um superconjunto do 2.0).       &lt;br /&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Preciso instalar o hotfix no Server Core?        &lt;br /&gt;&lt;/strong&gt;Sim, se você tem o Windows 2008 &lt;strong&gt;&lt;u&gt;R2&lt;/u&gt;&lt;/strong&gt; com ASP.NET instalado. O artigo possui orientações de como instalar no server core usando a linha de comando.       &lt;br /&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Preciso reiniciar os serviços ou dar boot no servidor?        &lt;br /&gt;&lt;/strong&gt;A princípio não; o instalador irá parar os serviços necessários, aplicar o hotfix, e reiniciá-los. Note que isso pode impactar um ambiente de produção, portanto recomendamos que o mesmo seja feito de forma planejada para evitar transtornos em sistemas críticos, em horário for a do pico de uso dos sistemas. Caso por algum motivo o instalador não consiga parar os serviços, um restart será requerido.       &lt;br /&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Já apliquei as medidas de contorno (como o uso do URLScan). Preciso aplicar o hotfix assim mesmo?&lt;/strong&gt;       &lt;br /&gt;Sim, a aplicação é necessária, porém você poderá fazer isso de forma mais planejada. Ainda assim, recomendamos que o mesmo ocorra o mais rapidamente possível.&amp;#160; &lt;br /&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Tenho outras dúvidas. O que fazer?        &lt;br /&gt;&lt;/strong&gt;Se você tem um contrato de suporte Premier com a Microsoft, entre em contato com o TAM que lhe atende. Caso contrário, procure o site de suporte da Microsoft (support.microsoft.com)&amp;#160; ou os fóruns públicos do TechNet e MSDN. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Mais uma vez, este hotfix deve ser aplicado o mais rapidamente possível.    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Abraços,&lt;/p&gt;  &lt;p&gt;Paulo.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10068901" width="1" height="1"&gt;</description></item><item><title>Otimizando o tempo de carregamento do site – parte 1</title><link>http://blogs.msdn.com/b/teixeira/archive/2010/09/27/otimizando-o-tempo-de-carregamento-parte-1.aspx</link><pubDate>Tue, 28 Sep 2010 01:15:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10068487</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10068487</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2010/09/27/otimizando-o-tempo-de-carregamento-parte-1.aspx#comments</comments><description>&lt;p&gt;Quando você acessa um desses grandes portais da Internet e vê a página carregar em segundos logo acredita que isso tudo acontece porque eles tem um link com uma banda gigantesca, servidores super-poderosos, e diversos tipos de dispositivos de hardware para fazer cache, otimização e etc. &lt;/p&gt;  &lt;p&gt;Provalvelmente tudo isso é verdade, mas mesmo assim, há algumas técnicas que são utilizadas para otimizar o tempo de carregamento das páginas de um site que estão disponíveis à sua mão. &lt;/p&gt;  &lt;p&gt;Com isso em mente, resolvi criar alguns posts falando de algumas técnicas que você pode adotar para melhorar o desempenho do seu site. Dentre os assuntos que vou abordar merecem destaque:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;paralelização de requests &lt;/li&gt;    &lt;li&gt;utilização de compressão &lt;/li&gt;    &lt;li&gt;redução de espaços em branco das páginas &lt;/li&gt;    &lt;li&gt;evitar a serialização de download do javascript &lt;/li&gt;    &lt;li&gt;otimização de tamanho das imagens &lt;/li&gt;    &lt;li&gt;cache do lado do servidor &lt;/li&gt;    &lt;li&gt;cache do lado do cliente &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Neste post vou falar de um tópico bem simples, mas que a grande maioria dos administradores e desenvolvedores Web desconhece: &lt;strong&gt;Paralelização de Requests&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Se você ainda usa ou lembra-se, o Internet Explorer 6.0 só “conseguia” fazer dois downloads simultâneos de uma só vez. Provavelmente você se questionou (ou reclamou veemente) sobre o porquê desta limitação &lt;em&gt;absurda&lt;/em&gt;. Pois bem, eis aí uma novidade das velhas: O RFC2616, que define o protocolo HTTP 1.1, na seção 8.1.4 diz o seguinte: &lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#c0504d"&gt;Clients that use persistent connections SHOULD limit the number of simultaneous connections that they maintain to a given server. A single-user client SHOULD NOT maintain more than 2 connections with any server or proxy.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Ou seja, o Internet Explorer 7 (e anteriores) simplesmente &lt;em&gt;obedece&lt;/em&gt; o que está escrito na definição do protocolo HTTP 1.1. Porém, o mundo às vezes é dos espertos, e outros navegadores passaram a &lt;em&gt;ignorar&lt;/em&gt; esta recomendação (Por exemplo, o Firefox abre 10 conexões simultâneas) e por isso usam melhor a banda, parecendo ser mais &lt;em&gt;rápidos&lt;/em&gt;. (Veja &lt;a title="http://blogs.msdn.com/b/ie/archive/2005/04/11/407189.aspx" href="http://blogs.msdn.com/b/ie/archive/2005/04/11/407189.aspx"&gt;http://blogs.msdn.com/b/ie/archive/2005/04/11/407189.aspx&lt;/a&gt; para mais detalhes sobre isso). &lt;/p&gt;  &lt;p&gt;Com o IE8 este limite foi aumentado para 6 conexões simultâneas, mas mesmo assim ainda é um limitador. Muito bem, uma vez que isso é uma realidade, como podemos “paralelizar” o maior número de requests possíveis? Ora, com uma solução bem simples, adotada por todos os grandes portais: a divisão do site em “sub-domínios”. &lt;/p&gt;  &lt;p&gt;Por exemplo, imagine que hoje o seu site tenha a seguinte estrutura de URLs: &lt;/p&gt;  &lt;p&gt;- http://www.meusite.com.br   &lt;br /&gt;- http://www.meusite.com.br/static    &lt;br /&gt;- http://www.meusite.com.br/imagens    &lt;br /&gt;- etc…&lt;/p&gt;  &lt;p&gt;Com essa configuração, cada cliente irá abrir de 2 até 10 (dependendo do navegador que ele use) conexões simultâneas para o seu site. Todavia, se você criar subdomínios, um para cada tipo de conteúdo, você conseguirá muito mais. Por exemplo: &lt;/p&gt;  &lt;p&gt;- http://www.meusite.com.br/   &lt;br /&gt;- http://static.meusite.com.br    &lt;br /&gt;- http://imagens.meusite.com.br/     &lt;br /&gt;    &lt;br /&gt;Com isso você conseguirá as mesmas 10 conexões simultâneas para cada domínio, mas como são três domínios diferentes, teremos 30 conexões simultâneas, o que torna a utilização da banda muito mais eficiente, e em consequência, diminui o tempo de carga das páginas. &lt;/p&gt;  &lt;p&gt;Num próximo post vou falar sobre um recurso do IIS7.x que facilita a criação dessa nova estrutura &lt;em&gt;sem ter que mudar o conteúdo do site. &lt;/em&gt;Fique ligado!&lt;/p&gt;  &lt;p&gt;Um abraço e até a próxima.&lt;/p&gt;  &lt;p&gt;Paulo&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10068487" width="1" height="1"&gt;</description></item><item><title>Casa nova!</title><link>http://blogs.msdn.com/b/teixeira/archive/2010/09/27/casa-nova.aspx</link><pubDate>Tue, 28 Sep 2010 01:05:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10068495</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10068495</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2010/09/27/casa-nova.aspx#comments</comments><description>&amp;#160; Pois é, resolvi mudar o endereço blog. A partir de agora os artigos estarão em http://blogs.msdn.com/b/teixeira Logo logo trago novidades… só para atiçar a curiosidade, vou começar postar em breve uns artigos com dicas rápidas para otimizar o tempo...(&lt;a href="http://blogs.msdn.com/b/teixeira/archive/2010/09/27/casa-nova.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10068495" width="1" height="1"&gt;</description></item><item><title>.NET Framework no Windows 7/Windows 2008 R2</title><link>http://blogs.msdn.com/b/teixeira/archive/2010/06/28/net-framework-no-windows-7-windows-2008-r2.aspx</link><pubDate>Tue, 29 Jun 2010 04:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10068472</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10068472</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2010/06/28/net-framework-no-windows-7-windows-2008-r2.aspx#comments</comments><description>A algum tempo atr&amp;aacute;s durante um treinamento que ministrava surgiu uma d&amp;uacute;vida sobre a compatibilidade do .NET Framework no Windows 2008 R2. Depois de muito pesquisar internamente, finalmente ficou esclarecido o que &amp;eacute; e o que n&amp;atilde;o...(&lt;a href="http://blogs.msdn.com/b/teixeira/archive/2010/06/28/net-framework-no-windows-7-windows-2008-r2.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10068472" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/ASP-NET/">ASP.NET</category><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/-NET/">.NET</category></item><item><title>Usando o Application Request Routing para migrar sites para o IIS7 - parte 4</title><link>http://blogs.msdn.com/b/teixeira/archive/2010/06/08/usando-o-application-request-routing-para-migrar-sites-para-o-iis7-parte-4.aspx</link><pubDate>Tue, 08 Jun 2010 14:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10068473</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10068473</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2010/06/08/usando-o-application-request-routing-para-migrar-sites-para-o-iis7-parte-4.aspx#comments</comments><description>Continuando a nossa s&amp;eacute;rie, vamos agora para a parte mais interessante. Ap&amp;oacute;s a configura&amp;ccedil;&amp;atilde;o do ARR com Shared Configuration e Offline Files, estamos prontos para migrar as aplica&amp;ccedil;&amp;otilde;es dos servidores antigos para...(&lt;a href="http://blogs.msdn.com/b/teixeira/archive/2010/06/08/usando-o-application-request-routing-para-migrar-sites-para-o-iis7-parte-4.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10068473" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/ARR/">ARR</category><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/IIS/">IIS</category></item><item><title>Usando o Application Request Routing para migrar sites para o IIS7 - parte 3</title><link>http://blogs.msdn.com/b/teixeira/archive/2010/05/24/usando-o-application-request-routing-para-migrar-sites-para-o-iis7-parte-3.aspx</link><pubDate>Tue, 25 May 2010 00:34:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10068474</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10068474</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2010/05/24/usando-o-application-request-routing-para-migrar-sites-para-o-iis7-parte-3.aspx#comments</comments><description>&amp;#160; Ok, no post anterior desta série nós configuramos dois servidores IIS com ARR para utilizar o recurso de configuração compartilhada (Shared Configuration). Com isso, os servidores ARR irão sempre “buscar” a sua configuração no share de rede que...(&lt;a href="http://blogs.msdn.com/b/teixeira/archive/2010/05/24/usando-o-application-request-routing-para-migrar-sites-para-o-iis7-parte-3.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10068474" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/ARR/">ARR</category><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/SHARED+CONFIGURATION/">SHARED CONFIGURATION</category></item><item><title>Hotfixes e patches: quanto tempo para colocar em produção?</title><link>http://blogs.msdn.com/b/teixeira/archive/2010/05/14/hotfixes-e-patches-quanto-tempo-para-colocar-em-produ-231-227-o.aspx</link><pubDate>Fri, 14 May 2010 20:20:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10068475</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10068475</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2010/05/14/hotfixes-e-patches-quanto-tempo-para-colocar-em-produ-231-227-o.aspx#comments</comments><description>Uma das verificações que sempre fazemos quando estamos avaliando problemas em um servidor Web é se o mesmo está com todos os hotfixes e patches instalados (geralmente não estão). Os clientes sempre se justificam dizendo: “Não há uma regra”, ou “tenho...(&lt;a href="http://blogs.msdn.com/b/teixeira/archive/2010/05/14/hotfixes-e-patches-quanto-tempo-para-colocar-em-produ-231-227-o.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10068475" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/GERAL/">GERAL</category></item><item><title>Usando o Application Request Routing para migrar sites para o IIS7 - parte 2</title><link>http://blogs.msdn.com/b/teixeira/archive/2010/05/12/usando-o-application-request-routing-para-migrar-sites-para-o-iis7-parte-2.aspx</link><pubDate>Wed, 12 May 2010 17:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10068476</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10068476</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2010/05/12/usando-o-application-request-routing-para-migrar-sites-para-o-iis7-parte-2.aspx#comments</comments><description>No meu post anterior falei como instalar o IIS e o ARR para criar uma solu&amp;ccedil;&amp;atilde;o que permita a migra&amp;ccedil;&amp;atilde;o transparente de aplica&amp;ccedil;&amp;otilde;es de um ambiente &amp;ldquo;antigo&amp;rdquo; para o IIS7.x. Um ponto importante nesta configura&amp;ccedil;&amp;atilde;o...(&lt;a href="http://blogs.msdn.com/b/teixeira/archive/2010/05/12/usando-o-application-request-routing-para-migrar-sites-para-o-iis7-parte-2.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10068476" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/ARR/">ARR</category><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/IIS/">IIS</category></item><item><title>Usando o Application Request Routing para migrar sites para o IIS7 - parte 1</title><link>http://blogs.msdn.com/b/teixeira/archive/2010/05/10/usando-o-application-request-routing-para-migrar-sites-para-o-iis7-parte-1.aspx</link><pubDate>Tue, 11 May 2010 01:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10068477</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10068477</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2010/05/10/usando-o-application-request-routing-para-migrar-sites-para-o-iis7-parte-1.aspx#comments</comments><description>Vários de nossos clientes encontram dificuldades para migrar os seus servidores e aplicações do IIS5 ou IIS6 para novos servidores baseados no IIS7.x (ou do PHP rodando no Linux/Unix para o IIS7). O grande problema é a dificuldade de homologar divervas...(&lt;a href="http://blogs.msdn.com/b/teixeira/archive/2010/05/10/usando-o-application-request-routing-para-migrar-sites-para-o-iis7-parte-1.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10068477" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/ARR/">ARR</category><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/IIS/">IIS</category></item><item><title>Cães e gatos contra bots!</title><link>http://blogs.msdn.com/b/teixeira/archive/2007/10/26/c-227-es-e-gatos-contra-bots.aspx</link><pubDate>Fri, 26 Oct 2007 18:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10068478</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10068478</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2007/10/26/c-227-es-e-gatos-contra-bots.aspx#comments</comments><description>Ok, n&amp;atilde;o entendeu nada do t&amp;iacute;tulo deste post, n&amp;eacute;? Desta vez vou fugir um pouco da parte t&amp;eacute;cnica e mostrar uma "brincadeira" muito inteligente que encontrei no site do MS Research ( http://research.microsoft.com ). Primeiro, e...(&lt;a href="http://blogs.msdn.com/b/teixeira/archive/2007/10/26/c-227-es-e-gatos-contra-bots.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10068478" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/GERAL/">GERAL</category></item><item><title>Microsoft anuncia acesso ao código fonte do .NET Framework 3.5</title><link>http://blogs.msdn.com/b/teixeira/archive/2007/10/03/microsoft-anuncia-acesso-ao-c-243-digo-fonte-do-net-framework-3-5.aspx</link><pubDate>Wed, 03 Oct 2007 20:22:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10068479</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10068479</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2007/10/03/microsoft-anuncia-acesso-ao-c-243-digo-fonte-do-net-framework-3-5.aspx#comments</comments><description>A Microsoft anunciou hoje que até o final do ano, juntamente com o lançamento do Visual Studio 2008, irá disponibilizar o acesso ao código-fonte do .NET Framework 3.5 sob os termos da Microsoft Shared Source Licensing . Será possível baixar o código-fonte...(&lt;a href="http://blogs.msdn.com/b/teixeira/archive/2007/10/03/microsoft-anuncia-acesso-ao-c-243-digo-fonte-do-net-framework-3-5.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10068479" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/ASP-NET/">ASP.NET</category></item><item><title>Estudo de caso: ASP clássico - problemas mais comuns - Parte 01.</title><link>http://blogs.msdn.com/b/teixeira/archive/2007/09/26/estudo-de-caso-asp-cl-225-ssico-problemas-mais-comuns-parte-01.aspx</link><pubDate>Thu, 27 Sep 2007 04:04:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10068480</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10068480</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2007/09/26/estudo-de-caso-asp-cl-225-ssico-problemas-mais-comuns-parte-01.aspx#comments</comments><description>Estive há algum tempo em um cliente que reclamava de algum processo que estava causando o uso de 100% de CPU no seu servidor SQL. Como efeito disso, uma importante aplicação Web sofria lentidão generalizada. O servidor em questão era uma máquina bem robusta...(&lt;a href="http://blogs.msdn.com/b/teixeira/archive/2007/09/26/estudo-de-caso-asp-cl-225-ssico-problemas-mais-comuns-parte-01.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10068480" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/teixeira/archive/tags/ASP/">ASP</category></item><item><title>Paulo Teixeira</title><link>http://blogs.msdn.com/b/teixeira/archive/2007/09/10/paulo-teixeira.aspx</link><pubDate>Mon, 10 Sep 2007 07:06:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10068481</guid><dc:creator>Paulo Teixeira - MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/teixeira/rsscomments.aspx?WeblogPostID=10068481</wfw:commentRss><comments>http://blogs.msdn.com/b/teixeira/archive/2007/09/10/paulo-teixeira.aspx#comments</comments><description>Olá! 
 Este meu primeiro post é somente para fazer uma breve apresentação. Sou engenheiro de suporte na Microsoft desde 2005, e minha área de atuação é focada no servidor Web IIS (5/6/7) e também nas tecnologias relacionadas, como ASP, ASP.NET, COM+...(&lt;a href="http://blogs.msdn.com/b/teixeira/archive/2007/09/10/paulo-teixeira.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10068481" width="1" height="1"&gt;</description></item></channel></rss>