<?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>Waldemir Cambiucci - Solutions Architect - Microsoft Brasil : patterns &amp;amp; practices</title><link>http://blogs.msdn.com/wcamb/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx</link><description>Tags: patterns &amp;amp; practices</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>patterns &amp; practices Web Client Developer Guidance</title><link>http://blogs.msdn.com/wcamb/archive/2010/03/20/patterns-practices-web-client-developer-guidance.aspx</link><pubDate>Sat, 20 Mar 2010 11:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9982002</guid><dc:creator>wcamb</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9982002.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9982002</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9982002</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;No início do mês de março tivemos o lançamento de um projeto importante, para desenvolvedores e arquitetos Web. Foi o lançamento do &lt;STRONG&gt;Web Client Developer Guidance&lt;/STRONG&gt;, veja:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/patternspracticesWebClientDeveloperGuida_47B/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/patternspracticesWebClientDeveloperGuida_47B/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: 0px" title="patterns &amp;amp; practices Web Client Developer Guidance " border=0 alt="patterns &amp;amp; practices Web Client Developer Guidance " src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/patternspracticesWebClientDeveloperGuida_47B/image_thumb.png" width=379 height=362 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/patternspracticesWebClientDeveloperGuida_47B/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;patterns &amp;amp; practices Web Client Developer Guidance (mar/2010) &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A title="patterns &amp;amp; practices Web Client Developer Guidance (mar/2010)" href="http://www.codeplex.com/webclientguidance" rel=nofollow target=_blank mce_href="http://www.codeplex.com/webclientguidance"&gt;http://www.codeplex.com/webclientguidance&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;O &lt;STRONG&gt;Web Client Developer Guidance&lt;/STRONG&gt; é composto de dois projetos:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Web Client Software Factory:&lt;/STRONG&gt; esta fábrica de software foi lançada em 2008 e ajudou algumas empresas para a construção de projetos Web, via um processo baseado em geração de código. Como você sabe, uma fábrica de software implementa um processo automatizado de geração de código, através do uso de templates, exemplos de código, wizards de customização, além de outros componentes conhecidos como artefatos de uma software factory. Em breve, teremos uma atualização dessa fábrica de software para o novo Visual Studio 2010. &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Para o Visual Studio 2008, veja o pacote de instalação da Web Client Software Factory, no link abaixo: &lt;/LI&gt;&lt;/UL&gt;&lt;STRONG&gt;Web Client Software Factory - February 2008 &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A title="Web Client Software Factory - February 2008" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=47755838-049B-4291-AFEA-A379AE28D7B3&amp;amp;displaylang=en" rel=nofollow target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=47755838-049B-4291-AFEA-A379AE28D7B3&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=47755838-049B-4291-AFEA-A379AE28D7B3&amp;amp;displaylang=en&lt;/A&gt; 
&lt;P&gt;&lt;BR&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Web Client Developer Guidance: &lt;/STRONG&gt;esse projeto está atualmente em desenvolvimento e deve oferecer uma série de guias e bibliotecas para a construção de clientes Web. Entre as bibliotecas usadas teremos ASP.NET, AJAX Library, MVC 2, entre outras. &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Para acompanhar o andamento deste projeto, veja o link abaixo: &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;patterns &amp;amp; practices Web Client Developer Guidance &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A title="patterns &amp;amp; practices Web Client Developer Guidance" href="http://webclientguidance.codeplex.com/wikipage?title=Web%20Client%20Software%20Factory&amp;amp;referringTitle=Home" rel=nofollow target=_blank mce_href="http://webclientguidance.codeplex.com/wikipage?title=Web%20Client%20Software%20Factory&amp;amp;referringTitle=Home"&gt;http://webclientguidance.codeplex.com/wikipage?title=Web%20Client%20Software%20Factory&amp;amp;referringTitle=Home&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;São projetos interessantes e indicam um belo retorno dos modelos de produtividade baseados em guias de automação e fábricas de software também para o Visual Studio 2010, que tem lançamento previsto para 12 de abril próximo.&lt;/P&gt;
&lt;P&gt;Já participei de projetos onde o uso dessas ferramentas ofereceu uma excelente produtividade, liberando os desenvolvedores de tarefas repetitivas ou muito básicas. Seja para projetos com metodologias ágeis ou tradicionais de desenvolvimento de software, recomendo a avaliação de ferramentas como guias de automação e fábricas de software para a automação de tarefas repetitivas do projeto.&lt;/P&gt;
&lt;P&gt;Para relembrar alguns posts sobre &lt;STRONG&gt;guias de automação&lt;/STRONG&gt; e &lt;STRONG&gt;fábricas de software&lt;/STRONG&gt;, confira &lt;A title=http://blogs.msdn.com/wcamb/archive/tags/GAT+_2F00_+GAX/default.aspx href="http://blogs.msdn.com/wcamb/archive/tags/GAT+_2F00_+GAX/default.aspx" rel=nofollow target=_blank mce_href="http://blogs.msdn.com/wcamb/archive/tags/GAT+_2F00_+GAX/default.aspx"&gt;aqui&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9982002" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Web+Application/default.aspx">Web Application</category></item><item><title>Leitura Recomendada: novidades do patterns &amp; practices</title><link>http://blogs.msdn.com/wcamb/archive/2010/03/11/leitura-recomendada-novidades-do-patterns-practices.aspx</link><pubDate>Thu, 11 Mar 2010 12:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9973571</guid><dc:creator>wcamb</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9973571.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9973571</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9973571</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Faz tempo que não coloco uma “leitura recomendada” aqui no blog. Hoje, aproveito para colocar algumas:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeituraRecomendadaCBA_428/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeituraRecomendadaCBA_428/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 0px 0px 10px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image align=right src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeituraRecomendadaCBA_428/image_thumb.png" width=192 height=233 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeituraRecomendadaCBA_428/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;A Guide to Claims-Based Identity and Access Control — Book Download – March 2010&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=4c09ffe4-43dd-4fcc-be35-c897c9bc4386&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=4c09ffe4-43dd-4fcc-be35-c897c9bc4386&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=4c09ffe4-43dd-4fcc-be35-c897c9bc4386&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Esse acabou de sair do forno, essa semana, sendo o primeiro lançamento do ano! &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;O documento está bem completo e com leitura agradável. Um guia obrigatório sobre Claims-Based Identity e Access Control. &lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeituraRecomendadaCBA_428/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeituraRecomendadaCBA_428/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 10px 10px 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image align=left src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeituraRecomendadaCBA_428/image_thumb_1.png" width=193 height=255 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeituraRecomendadaCBA_428/image_thumb_1.png"&gt;&lt;/A&gt; &lt;STRONG&gt;Microsoft Application Architecture Guide, 2nd Edition&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A title=http://www.microsoft.com/downloads/details.aspx?FamilyID=ce40e4e1-9838-4c89-a197-a373b2a60df2&amp;amp;DisplayLang=en href="http://www.microsoft.com/downloads/details.aspx?FamilyID=ce40e4e1-9838-4c89-a197-a373b2a60df2&amp;amp;DisplayLang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=ce40e4e1-9838-4c89-a197-a373b2a60df2&amp;amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=ce40e4e1-9838-4c89-a197-a373b2a60df2&amp;amp;DisplayLang=en&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV align=left&gt;Nosso velho conhecido, mas que sempre é bom relembrar pela importância e qualidade do guia. Se você ainda não leu, fica a dica!&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Apenas para relembrar, arquiteturas de referência são importantes pois oferecem bons exemplos e dicas para a organização de camadas e componentes de uma aplicação, a&amp;nbsp;partir das necessidades e restrições do&amp;nbsp;cenário alvo. Assim, o AppArchGuide oferece exemplos de arquétipos para aplicações RIA,&amp;nbsp;Desktop, Web, Mobile, Serviços, etc. &amp;nbsp;&lt;/P&gt;
&lt;P&gt;Uma boa ajuda para você não sair do ZERO quando estiver pensando na organização de sua aplicação.&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P align=left&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9973571" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Leitura+Recomendada/default.aspx">Leitura Recomendada</category></item><item><title>patterns &amp; practices: dicas de projetos e releases finais no msdn</title><link>http://blogs.msdn.com/wcamb/archive/2010/01/20/patterns-practices-dicas-de-projetos-e-final-releases-no-msdn.aspx</link><pubDate>Wed, 20 Jan 2010 10:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9950759</guid><dc:creator>wcamb</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9950759.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9950759</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9950759</wfw:comment><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/patternspracticesdicasdeprojetosnoMSDN_14A0F/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/patternspracticesdicasdeprojetosnoMSDN_14A0F/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: 0px" title=image border=0 alt=image align=right src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/patternspracticesdicasdeprojetosnoMSDN_14A0F/image_thumb.png" width=240 height=66 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/patternspracticesdicasdeprojetosnoMSDN_14A0F/image_thumb.png"&gt;&lt;/A&gt; Olá pessoal, tudo certo? &lt;/P&gt;
&lt;P&gt;No post anterior eu apresentei uma lista com alguns projetos importantes publicados no codeplex pelo time do patterns &amp;amp; practices. &lt;/P&gt;
&lt;P&gt;Mas como bem comentado pelo &lt;STRONG&gt;Don Smith&lt;/STRONG&gt;, &lt;EM&gt;Senior Program Manager&lt;/EM&gt; do time do p&amp;amp;p, depois da evolução desses projetos no CodePlex, a versão final de cada um deles é colocada no MSDN.&lt;/P&gt;
&lt;P&gt;Assim, vale esse novo post, com a lista de links de releases finais dos projetos no MSDN:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Microsoft Enterprise Library 4.1 – October 2008&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A title="Microsoft Enterprise Library 4.1 – October 2008" href="http://msdn.microsoft.com/en-us/library/cc467894.aspx?rssCatalog" rel=nofollow target=_blank mce_href="http://msdn.microsoft.com/en-us/library/cc467894.aspx?rssCatalog"&gt;http://msdn.microsoft.com/en-us/library/cc467894.aspx?rssCatalog&lt;/A&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;patterns &amp;amp; practices: Enterprise Library&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A title="patterns &amp;amp; practices: Enterprise Library" href="http://entlib.codeplex.com/" rel=nofollow target=_blank mce_href="http://entlib.codeplex.com/"&gt;http://entlib.codeplex.com/&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Composite Application Guidance for WPF and Silverlight &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A title="Composite Application Guidance for WPF and Silverlight" href="http://msdn.microsoft.com/en-us/library/dd458809.aspx" rel=nofollow target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd458809.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd458809.aspx&lt;/A&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;patterns &amp;amp; practices: Composite WPF and&lt;/STRONG&gt; &lt;STRONG&gt;Silverlight&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A title="patterns &amp;amp; practices: Composite WPF and Silverlight" href="http://compositewpf.codeplex.com/" rel=nofollow target=_blank mce_href="http://compositewpf.codeplex.com/"&gt;http://compositewpf.codeplex.com/&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Microsoft Application Architecture Guide, 2nd Edition&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A title="Microsoft Application Architecture Guide, 2nd Edition" href="http://msdn.microsoft.com/en-us/library/dd673617.aspx" rel=nofollow target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd673617.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd673617.aspx&lt;/A&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;patterns &amp;amp; practices: Application Arch Guide 2.0&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A title="patterns &amp;amp; practices: Application Arch Guide 2.0" href="http://apparchguide.codeplex.com/" rel=nofollow target=_blank mce_href="http://apparchguide.codeplex.com/"&gt;http://apparchguide.codeplex.com/&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Developing SharePoint Applications&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A title="Developing SharePoint Applications" href="http://msdn.microsoft.com/en-us/library/dd203468.aspx?rss" rel=nofollow target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd203468.aspx?rss"&gt;http://msdn.microsoft.com/en-us/library/dd203468.aspx?rss&lt;/A&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;patterns &amp;amp; practices: SharePoint Guidance&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A title="patterns &amp;amp; practices: SharePoint Guidance" href="http://spg.codeplex.com/" rel=nofollow target=_blank mce_href="http://spg.codeplex.com/"&gt;http://spg.codeplex.com/&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Improving Web Services Security: Scenarios and Implementation Guidance for WCF &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A title="Improving Web Services Security: Scenarios and Implementation Guidance for WCF" href="http://msdn.microsoft.com/en-us/library/cc949034.aspx?rssCatalog" rel=nofollow target=_blank mce_href="http://msdn.microsoft.com/en-us/library/cc949034.aspx?rssCatalog"&gt;http://msdn.microsoft.com/en-us/library/cc949034.aspx?rssCatalog&lt;/A&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;patterns &amp;amp; practices: Improving Web Services Security Guide&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A title="patterns &amp;amp; practices: Improving Web Services Security Guide" href="http://www.codeplex.com/WCFSecurityGuide" rel=nofollow target=_blank mce_href="http://www.codeplex.com/WCFSecurityGuide"&gt;http://www.codeplex.com/WCFSecurityGuide&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;E vale conferir também o blog do &lt;STRONG&gt;Don Smith&lt;/STRONG&gt;, a seguir:&lt;/P&gt;
&lt;P&gt;Ref.: &lt;A href="http://blogs.msdn.com/donsmith" rel=nofollow target=_blank mce_href="http://blogs.msdn.com/donsmith"&gt;http://blogs.msdn.com/donsmith&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Thanks Don, for all the support! :)&lt;/P&gt;
&lt;P&gt;Best Regards, &lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9950759" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Leitura+Recomendada/default.aspx">Leitura Recomendada</category></item><item><title>patterns &amp; practices: dicas de projetos</title><link>http://blogs.msdn.com/wcamb/archive/2010/01/18/patterns-practices-dicas-de-projetos.aspx</link><pubDate>Mon, 18 Jan 2010 20:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9949960</guid><dc:creator>wcamb</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9949960.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9949960</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9949960</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Semana passada eu estava com um time de desenvolvedores quando comentamos sobre alguns projetos interessantes do CodePlex, que sempre são boas dicas para consultas.&lt;/P&gt;
&lt;P&gt;A lista ficou tão legal que aproveito o post para compartilhar com vocês, a seguir:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;patterns &amp;amp; practices – Enterprise Library &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://entlib.codeplex.com/" target=_blank mce_href="http://entlib.codeplex.com/"&gt;http://entlib.codeplex.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;patterns &amp;amp; practices: Composite WPF and Silverlight &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://compositewpf.codeplex.com/" target=_blank mce_href="http://compositewpf.codeplex.com/"&gt;http://compositewpf.codeplex.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;patterns &amp;amp; practices Application Architecture Guide 2.0 &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://apparchguide.codeplex.com/" target=_blank mce_href="http://apparchguide.codeplex.com/"&gt;http://apparchguide.codeplex.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;patterns &amp;amp; practices: WCF Security Guidance &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://wcfsecurity.codeplex.com/" target=_blank mce_href="http://wcfsecurity.codeplex.com/"&gt;http://wcfsecurity.codeplex.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Visual Studio 2010 Quick Reference Guidance &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://vs2010quickref.codeplex.com/" target=_blank mce_href="http://vs2010quickref.codeplex.com/"&gt;http://vs2010quickref.codeplex.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;patterns &amp;amp; practices Improving Web Services Security Guide &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://wcfsecurityguide.codeplex.com/" target=_blank mce_href="http://wcfsecurityguide.codeplex.com/"&gt;http://wcfsecurityguide.codeplex.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;O recém lançado: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;patterns &amp;amp; practices SharePoint Guidance &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://spg.codeplex.com/" target=_blank mce_href="http://spg.codeplex.com/"&gt;http://spg.codeplex.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;E os mais antigos: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;patterns &amp;amp; practices - Smart Client Guidance &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://smartclient.codeplex.com/" target=_blank mce_href="http://smartclient.codeplex.com/"&gt;http://smartclient.codeplex.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Web Service Software Factory &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://servicefactory.codeplex.com/" target=_blank mce_href="http://servicefactory.codeplex.com/"&gt;http://servicefactory.codeplex.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;patterns &amp;amp; practices: Team Development with Visual Studio Team Foundation Server &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://tfsguide.codeplex.com/" target=_blank mce_href="http://tfsguide.codeplex.com/"&gt;http://tfsguide.codeplex.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Um belo material, sem dúvida! Fica a dica de consulta!&lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9949960" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Leitura+Recomendada/default.aspx">Leitura Recomendada</category></item><item><title>Atualizações no projeto Tailspin travel</title><link>http://blogs.msdn.com/wcamb/archive/2010/01/11/atualiza-es-no-projeto-tailspin-travel.aspx</link><pubDate>Mon, 11 Jan 2010 21:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9946769</guid><dc:creator>wcamb</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9946769.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9946769</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9946769</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Durante o PDC09, o projeto &lt;STRONG&gt;Tailspin travel&lt;/STRONG&gt; foi apresentado com uma soluçao exemplo disponível para download a partir do codeplex, &lt;A href="http://blogs.msdn.com/wcamb/archive/2009/11/26/pdc09-tailspin-travel-um-projeto-codeplex.aspx" target=_blank mce_href="http://blogs.msdn.com/wcamb/archive/2009/11/26/pdc09-tailspin-travel-um-projeto-codeplex.aspx"&gt;aqui&lt;/A&gt;:&lt;/P&gt;
&lt;P&gt;Tivemos atualizações já nesse início de ano, que você encontra no link abaixo:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/AtualizaesnoprojetoTailspintravel_118B5/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/AtualizaesnoprojetoTailspintravel_118B5/image_4.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/AtualizaesnoprojetoTailspintravel_118B5/image_thumb_1.png" width=499 height=308 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/AtualizaesnoprojetoTailspintravel_118B5/image_thumb_1.png"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;Ref.: &lt;A title=http://tailspintravel.codeplex.com/ href="http://tailspintravel.codeplex.com/" rel=nofollow target=_blank mce_href="http://tailspintravel.codeplex.com/"&gt;http://tailspintravel.codeplex.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Para quem não conhece, o projeto &lt;STRONG&gt;Tailspin travel&lt;/STRONG&gt; é um exemplo de solução que utiliza os novos recursos do .NET 4.0, como ASP.NET MVC, Entity Framework, WCF4 e WF4, assim como funcionalidades do Visual Studio 2010. &lt;/P&gt;
&lt;P&gt;Para o hosting de serviços e workflows, o projeto Tailspin utiliza o &lt;STRONG&gt;Windows Server AppFabric&lt;/STRONG&gt;, importante componente de administração de serviços e workflows na plataforma Windows. &lt;/P&gt;
&lt;P&gt;Como exemplo de solução sobre a nova onda de atualizações da plataforma Microsoft, sem dúvida, um download obrigatório!&lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9946769" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Arquitetura+de+Solu_26002300_231_3B0026002300_245_3B00_es/default.aspx">Arquitetura de Solu&amp;#231;&amp;#245;es</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/WF/default.aspx">WF</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/PDC09/default.aspx">PDC09</category></item><item><title>Opções para processamento distribuído...</title><link>http://blogs.msdn.com/wcamb/archive/2009/12/17/op-es-reais-para-solu-es-com-paralelismo.aspx</link><pubDate>Thu, 17 Dec 2009 13:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9938179</guid><dc:creator>wcamb</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9938179.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9938179</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9938179</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Ontem tive uma discussão interessante com o arquiteto da Microsoft Services, Marcos Pedroso. Ele sempre está envolvido em projetos de impacto no mercado, seja pela complexidade ou pelas restrições e SLA’s envolvidos na solução. Grande Pedroso! :)&lt;/P&gt;
&lt;P&gt;Uma questão que conversamos foi sobre o uso de um modelo de cloud para cenários de paralelismo e distribuição de processos em cálculos financeiros. Existem mesmo diversos cenários onde patterns como o &lt;STRONG&gt;Map Reduce&lt;/STRONG&gt; se aplicam de forma natural. Para quem não conhece, o desenho abaixo ilustra esse pattern, que apesar de antigo, ficou mais conhecido pelo pessoal da Google, quando o utilizaram para processos de search na Web.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/CloudComputingeosSaboresdaNuvem_8B0A/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/CloudComputingeosSaboresdaNuvem_8B0A/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/CloudComputingeosSaboresdaNuvem_8B0A/image_thumb_1.png" width=520 height=195 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/CloudComputingeosSaboresdaNuvem_8B0A/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Explicando: &lt;/STRONG&gt;A idéia é termos um processo master que divide uma massa para processamento entre diversos workers, que executam a tarefa programada em blocos da massa de dados original. Dessa forma, distribuímo o processamento inicial entre diversos nós de computação, gerando um paralelismo na solução. Ao final, os vários resultados são devolvidos para o master, que realiza a consolidação dos resultados. Simples não? Já tive diversos projetos em .NET que fizeram algo parecido, utilizando classes como Threads para a divisão manual dos blocos de processamento entre as diversas threads. Funciona muito bem!&lt;/P&gt;
&lt;P&gt;Porém, a implementação manual desse tipo de pattern não é trivial e exige alguns cuidados quando falamos de cenários mais complexos. Como alternativa para a programação manual, podemos usar algumas opções de paralelismo e escalabilidade na plataforma Microsoft.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1) HPC – High Performance Computing&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;A primeira delas é o &lt;STRONG&gt;HPC – High Performance Computing&lt;/STRONG&gt;, que oferece um motor de paralelismo e distribuição de processamento pronto para essa divisão de workers, aproveitando ainda uma infraestrutura de vários processadores (multi-core) ou várias máquinas colocadas. Entre as características do HPC temos a possibilidade de trabalhar com mais de 1000 nós workers, execução sobre o Windows Server 2008 R2, suporte para bancos de dados remotos envolvidos na solução, Job Scheduling (um recurso importante para alguns cenários), etc.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Um desenho que ilustra o cenário de distribuição de processamento com o Microsoft HPC aparece abaixo:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/CloudComputingeosSaboresdaNuvem_8B0A/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/CloudComputingeosSaboresdaNuvem_8B0A/image_8.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/CloudComputingeosSaboresdaNuvem_8B0A/image_thumb.png" width=503 height=365 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/CloudComputingeosSaboresdaNuvem_8B0A/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Explicando:&lt;/STRONG&gt; o desenho acima ilustra um cenário simples de aplicação do Microsoft HPC, onde vemos a rede privada com os vários nós de computação (&lt;EM&gt;Compute Node&lt;/EM&gt;), coordenados pelo &lt;EM&gt;WCF Broker Node&lt;/EM&gt;, que realiza o papel de Master no modelo Map Reduce. Também vemos o cluster de SQL Server e os demais componentes de infraestrutura da solução, como AD, File Server, System Center e Mail Server. &lt;/P&gt;
&lt;P&gt;É um cenário aplicável para diversas empresas e vale muito ser estudado! Para saber mais sobre HPC na plataforma Microsoft, confira:&lt;/P&gt;
&lt;P&gt;Ref.: &lt;A title=http://www.microsoft.com/hpc/en/us/default.aspx href="http://www.microsoft.com/hpc/en/us/default.aspx" rel=nofollow target=_blank mce_href="http://www.microsoft.com/hpc/en/us/default.aspx"&gt;http://www.microsoft.com/hpc/en/us/default.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2) Private Cloud e o Dynamic Data Center Toolkit&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Outra opção interessante é a chamada &lt;STRONG&gt;private cloud&lt;/STRONG&gt;. Na plataforma Microsoft isso aparece através do&lt;STRONG&gt; Dynamic Data Center Toolkit (DDCT)&lt;/STRONG&gt;, que hoje está disponível para cenários de &lt;STRONG&gt;Hosting&lt;/STRONG&gt;, mas em breve, estará com uma versão para &lt;STRONG&gt;Enterprise&lt;/STRONG&gt;. Conversei rapidamente com o &lt;A href="http://fabiohara.spaces.live.com/default.aspx" rel=nofollow target=_blank mce_href="http://fabiohara.spaces.live.com/default.aspx"&gt;&lt;STRONG&gt;Fábio Hara&lt;/STRONG&gt;&lt;/A&gt; (outro monstro sagrado do mundo de TI, hi! arigato!), que me apresentou alguns cenários corporativos que podem implementar um modelo de private cloud, aproveitando toda a infraestrutura e investimentos já feitos internamente. &lt;/P&gt;
&lt;P&gt;Veja ainda o post abaixo, do time de produto falando sobre a solução DDCT/E para o mundo Enterprise:&lt;/P&gt;
&lt;P&gt;Ref.: &lt;A title=http://blogs.technet.com/ddcalliance/archive/2009/09/28/dynamic-data-center-toolkit-coming-to-an-enterprise-near-you.aspx href="http://blogs.technet.com/ddcalliance/archive/2009/09/28/dynamic-data-center-toolkit-coming-to-an-enterprise-near-you.aspx" rel=nofollow target=_blank mce_href="http://blogs.technet.com/ddcalliance/archive/2009/09/28/dynamic-data-center-toolkit-coming-to-an-enterprise-near-you.aspx"&gt;http://blogs.technet.com/ddcalliance/archive/2009/09/28/dynamic-data-center-toolkit-coming-to-an-enterprise-near-you.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Para saber mais sobre &lt;STRONG&gt;Dynamic Data Center Toolkit&lt;/STRONG&gt; e &lt;STRONG&gt;private cloud&lt;/STRONG&gt;, confira o link abaixo:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Microsoft Private Cloud Computing Infrastructure&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/virtualization/en/us/private-cloud.aspx" rel=nofollow target=_blank mce_href="http://www.microsoft.com/virtualization/en/us/private-cloud.aspx"&gt;http://www.microsoft.com/virtualization/en/us/private-cloud.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3) Public Cloud e o Windows Azure&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Finalmente, podemos aplicar um cenário de paralelismo e distribuição de processamento com alta escalabilidade e alta disponibilidade através do modelo de &lt;STRONG&gt;public cloud&lt;/STRONG&gt;, na Microsoft oferecido pelo &lt;STRONG&gt;Windows Azure&lt;/STRONG&gt;. Aqui, nosso pattern de Map Reduce ficaria assim:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/CloudComputingeosSaboresdaNuvem_8B0A/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/CloudComputingeosSaboresdaNuvem_8B0A/image_6.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/CloudComputingeosSaboresdaNuvem_8B0A/image_thumb_2.png" width=480 height=284 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/CloudComputingeosSaboresdaNuvem_8B0A/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Explicando:&lt;/STRONG&gt; uma Web Role, por exemplo, pode implementar um serviço WCF para o recebimento de dados para processamento, realizando a distribuição entre os vários Workers internos da solução. Essa passagem pode ser feita por filas (&lt;EM&gt;Queues&lt;/EM&gt;), para o desacoplamento entre &lt;EM&gt;Web&lt;/EM&gt; e &lt;EM&gt;Worker&lt;/EM&gt;. Ao final, os vários blocos de resultados são devolvidos para a camada Web por tabelas, preparadas para o cenário de alta escalabilidade na plataforma Azure. A consolidação é feita pela Web Role Master, que devolde o resultado final do processamento. &lt;/P&gt;
&lt;P&gt;Nesse cenário de provisionamento elástico, podemos ainda configurar on-demand o número de nós de processamento, conforme alguma variável de dimensionamento colocada. Vale lembrar que, como são cenários de cálculo intenso, mas feitos de forma pontual, podemos dinamicamente controlar essa alocação de instância, reduzindo os custos envolvidos na solução final. Com certeza, ficará mais barato do que investir inicialmente milhares de dólares em uma super máquina, que pode amargar vários minutos ou horas de osciosidade ao longo do dia. Falei ainda com o Danielzinho, aqui do time de DPE, que ficou louco pensando em modelos matemáticos de cálculo em engenharia elétrica, que poderiam aproveitar esse paralelismo sobre o Azure. :) &lt;/P&gt;
&lt;P&gt;Vimos assim três cenários interessantes de processamento distribuído na plataforma Microsoft:&lt;/P&gt;
&lt;P&gt;1. Paralelismo via &lt;STRONG&gt;HPC&lt;/STRONG&gt; &lt;BR&gt;2. Paralelismo via &lt;STRONG&gt;private cloud&lt;/STRONG&gt;, com o &lt;STRONG&gt;Dynamic Data Center Toolkit &lt;BR&gt;&lt;/STRONG&gt;3. Paralelismo via &lt;STRONG&gt;public cloud&lt;/STRONG&gt;, com a plataforma &lt;STRONG&gt;Windows Azure&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Faça uma avaliação de seus cenários e veja se você não tem uma oportunidade de paralelismo com essas opções. Fique atento!&lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9938179" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Arquitetura+de+Solu_26002300_231_3B0026002300_245_3B00_es/default.aspx">Arquitetura de Solu&amp;#231;&amp;#245;es</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Windows+Azure/default.aspx">Windows Azure</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Opini_26002300_227_3B00_o/default.aspx">Opini&amp;#227;o</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Cloud+Computing/default.aspx">Cloud Computing</category></item><item><title>Leitura Recomendada: Microsoft Application Architecture Guide 2nd Edition</title><link>http://blogs.msdn.com/wcamb/archive/2009/11/05/leitura-recomendada-microsoft-application-architecture-guide-2nd-edition.aspx</link><pubDate>Thu, 05 Nov 2009 21:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9918258</guid><dc:creator>wcamb</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9918258.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9918258</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9918258</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Como anunciado por &lt;A href="http://blogs.msdn.com/wcamb/archive/2009/10/20/novidades-no-application-architecture-guide-2-0.aspx" rel=nofollow target=_blank mce_href="http://blogs.msdn.com/wcamb/archive/2009/10/20/novidades-no-application-architecture-guide-2-0.aspx"&gt;aqui&lt;/A&gt;, o App Arch Guide 2 foi lançado de forma impressa e já está disponível na Amazon, veja:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeituraRecomendadaMicrosoftApplicationAr_1149F/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeituraRecomendadaMicrosoftApplicationAr_1149F/image_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeituraRecomendadaMicrosoftApplicationAr_1149F/image_thumb.png" width=184 height=225 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeituraRecomendadaMicrosoftApplicationAr_1149F/image_thumb.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Microsoft® Application Architecture Guide, 2nd Edition (Patterns &amp;amp; Practices) &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A title=http://www.amazon.com/Microsoft%C2%AE-Application-Architecture-Patterns-Practices/dp/073562710X/ref=sr_1_1?ie=UTF8&amp;amp;qid=1257457119&amp;amp;sr=8-1-spell href="http://www.amazon.com/Microsoft%C2%AE-Application-Architecture-Patterns-Practices/dp/073562710X/ref=sr_1_1?ie=UTF8&amp;amp;qid=1257457119&amp;amp;sr=8-1-spell" rel=nofollow target=_blank mce_href="http://www.amazon.com/Microsoft%C2%AE-Application-Architecture-Patterns-Practices/dp/073562710X/ref=sr_1_1?ie=UTF8&amp;amp;qid=1257457119&amp;amp;sr=8-1-spell"&gt;http://www.amazon.com/Microsoft%C2%AE-Application-Architecture-Patterns-Practices/dp/073562710X/ref=sr_1_1?ie=UTF8&amp;amp;qid=1257457119&amp;amp;sr=8-1-spell&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Confira aqui o post do J.D. Meier sobre o anúncio, feito hoje!&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Now Available: patterns &amp;amp; practices Application Architecture Book&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://blogs.msdn.com/jmeier/archive/2009/11/05/now-available-patterns-practices-application-architecture-book.aspx" rel=nofollow target=_blank mce_href="http://blogs.msdn.com/jmeier/archive/2009/11/05/now-available-patterns-practices-application-architecture-book.aspx"&gt;http://blogs.msdn.com/jmeier/archive/2009/11/05/now-available-patterns-practices-application-architecture-book.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9918258" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Arquitetura+de+Solu_26002300_231_3B0026002300_245_3B00_es/default.aspx">Arquitetura de Solu&amp;#231;&amp;#245;es</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Leitura+Recomendada/default.aspx">Leitura Recomendada</category></item><item><title>Novidades no Application Architecture Guide 2.0</title><link>http://blogs.msdn.com/wcamb/archive/2009/10/20/novidades-no-application-architecture-guide-2-0.aspx</link><pubDate>Tue, 20 Oct 2009 22:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9910223</guid><dc:creator>wcamb</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9910223.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9910223</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9910223</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Que tal o Application Architecture Guide 2.0 no formato .CHM, mais fácil de navegar pelos temas desejados? &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ApplicationArchitectureGui.0emformatoCHM_11D12/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ApplicationArchitectureGui.0emformatoCHM_11D12/image_4.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ApplicationArchitectureGui.0emformatoCHM_11D12/image_thumb_1.png" width=125 height=158 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ApplicationArchitectureGui.0emformatoCHM_11D12/image_thumb_1.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;STRONG&gt;App Arch Guide 2.0a - CHM File &lt;/STRONG&gt;&lt;BR&gt;Ref.: &lt;A href="http://apparchcontrib.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=33990" rel=nofollow target=_blank mce_href="http://apparchcontrib.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=33990"&gt;http://apparchcontrib.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=33990&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;O arquivo acima ainda está em Beta, sendo revisado pelo time do patterns&amp;amp;practices. Feita a ressalva, vale conferir o arquivo!&lt;/P&gt;
&lt;P&gt;Outra novidade é que até o final deste ano, uma versão impressão do App Arch Guide 2.0 será lançada, veja a capa:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ApplicationArchitectureGui.0emformatoCHM_11D12/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ApplicationArchitectureGui.0emformatoCHM_11D12/image_6.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ApplicationArchitectureGui.0emformatoCHM_11D12/image_thumb_2.png" width=184 height=225 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ApplicationArchitectureGui.0emformatoCHM_11D12/image_thumb_2.png"&gt;&lt;/A&gt; O livro ainda virá com algumas atualizações!!!&lt;/P&gt;
&lt;P&gt;O formato original em PDF da versã0 2.0 encontra-se no link:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;patterns &amp;amp; practices: App Arch Guide 2.0 Knowledge Base &lt;/STRONG&gt;&lt;BR&gt;Ref.: &lt;A href="http://www.codeplex.com/AppArch" rel=nofollow target=_blank mce_href="http://www.codeplex.com/AppArch"&gt;http://www.codeplex.com/AppArch&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9910223" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Arquitetura+de+Solu_26002300_231_3B0026002300_245_3B00_es/default.aspx">Arquitetura de Solu&amp;#231;&amp;#245;es</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Leitura+Recomendada/default.aspx">Leitura Recomendada</category></item><item><title>Leitura Recomendada: Performance Testing Guidance for Web Applications (e o Azure?)</title><link>http://blogs.msdn.com/wcamb/archive/2009/09/22/leitura-recomendada-performance-testing-guidance-for-web-applications-e-o-azure.aspx</link><pubDate>Tue, 22 Sep 2009 15:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9897967</guid><dc:creator>wcamb</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9897967.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9897967</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9897967</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;O assunto hoje é Web e como podemos organizar testes de performance para aplicações Web. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeituraRecomendadaPerformanceTestingGuid_1394A/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeituraRecomendadaPerformanceTestingGuid_1394A/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 10px 10px 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image align=left src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeituraRecomendadaPerformanceTestingGuid_1394A/image_thumb.png" width=146 height=182 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeituraRecomendadaPerformanceTestingGuid_1394A/image_thumb.png"&gt;&lt;/A&gt;Apesar do documento já ser antigo, a abordagen de testes sugerida, a definição de fronteiras e os cuidados no processo de tuning propostos fornecem uma boa perspectiva sobre o tema no ambiente Web. Vale a leitura.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Performance Testing Guidance for Web Applications&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.codeplex.com/PerfTestingGuide" rel=nofollow target=_blank mce_href="http://www.codeplex.com/PerfTestingGuide"&gt;http://www.codeplex.com/PerfTestingGuide&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Algumas pessoas me perguntaram sobre tuning Web esses dias, por isso resgatei o documento acima. &lt;/P&gt;
&lt;P&gt;Outro aspecto interessante é em relação ao tuning de aplicações sobre o Windows Azure. Esse assunto vai dar muita discussão, pois pense bem, se seu software é cobrado pelo uso, pelo espaço utilizado para armazenamento, pelo tráfego em bytes que ele gera ou mesmo pelo número de instâncias que ele executa, será quase obrigatório modelar/implementar seu serviço para a nuvem de um modo eficiente, economizando esses fatores de cobrança. Por exemplo, você deve evitar armazenar grande blocos de string e XML desestruturados quando possível, criando representações mais enxutas para suas tables ou blobs. Ao mesmo tempo, isso deve economizar alguns byutes de transferência entre a nuvem e seu software cliente, on-premise. Ainda, testes avaliando o número de instâncias que você realmente precisa para sua aplicação serão recomendados.&lt;/P&gt;
&lt;P&gt;Creio que em breve, documentos do patterns &amp;amp; practices nessa linha de otimização/tunig serão obrigatórios. Ok, vou falar com o time para eles fazerem… ;) &lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9897967" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Leitura+Recomendada/default.aspx">Leitura Recomendada</category></item><item><title>SQL Azure Migration Wizard</title><link>http://blogs.msdn.com/wcamb/archive/2009/09/01/sql-azure-migration-wizard.aspx</link><pubDate>Tue, 01 Sep 2009 21:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9890000</guid><dc:creator>wcamb</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9890000.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9890000</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9890000</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Se você já percorreu os laboratórios do &lt;STRONG&gt;Azure Training Kit&lt;/STRONG&gt; de Agosto, viu alguns exercícios interessantes, incluindo o lab de migração de SQL local para a nuvem.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Windows Azure Platform Training Kit&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=413E88F8-5966-4A83-B309-53B7B77EDF78&amp;amp;displaylang=en" rel=nofollow target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=413E88F8-5966-4A83-B309-53B7B77EDF78&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=413E88F8-5966-4A83-B309-53B7B77EDF78&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;O lab é o &lt;STRONG&gt;Hands-On Lab Migrating Databases to SQL Azure&lt;/STRONG&gt; e tem duração de quase 1 hora. Durante o lab, você aprende os vários ajustes necessários sobre o script SQL gerado localmente, antes de subir o banco para o SQL Azure Database, no atual CTP de Agosto.&lt;/P&gt;
&lt;P&gt;Pensando nisso, tivemos a publicação de uma nova ferramenta no CodePlex essa semana, o SQL Azure Migration Wizard, veja:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;SQL Azure Migration Wizard&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://sqlazuremw.codeplex.com/" rel=nofollow target=_blank mce_href="http://sqlazuremw.codeplex.com/"&gt;http://sqlazuremw.codeplex.com/&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Conectando ao banco SQL 2005 / 2008 local, você pode escolher a base desejada para migração:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_4.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_thumb_1.png" width=497 height=385 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;A partir da escolha da base local, o Wizard apresenta as opções para geração do script de saída:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_6.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_thumb_2.png" width=499 height=426 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Na sequência, escolha as tabelas desejadas:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_8.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_thumb_3.png" width=503 height=317 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;E finalmente, escolha a saída de script para o SQL Azure:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_10.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_thumb_4.png" width=495 height=285 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_thumb_4.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;A ferramenta apresenta ent!ão o script gerado, já com os ajustes para o SQL Azure Database. Você pode fazer a subida do script manualmente, via SQLCMD.EXE, por exemplo, ou usar a própria ferramenta para fazer o deployment do banco na nuvem, veja:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_12.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_12.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_thumb_5.png" width=496 height=484 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_thumb_5.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Terminada a migração, a ferramenta mostra a sequência de atividades realizadas:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_14.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_14.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_thumb_6.png" width=492 height=324 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_thumb_6.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Conferindo o portal do SQL Azure, encontramos a base recém criada, com sucesso! :)&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_18.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_18.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_thumb_8.png" width=518 height=298 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SQLAzureMigrationWizard_D7A7/image_thumb_8.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Portanto, recomendo avaliar a ferramenta e fazer seus testes locais, migrando suas bases para a nuvem. Tudo é CTP e a ferramenta ainda é Beta, portanto, avalie com carinho!&lt;/P&gt;
&lt;P&gt;Aplicações combinando dados locais e dados na nuvem é uma tendência e uma opção bastante interessante em alguns cenários.&lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9890000" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/SQL+Azure+Database/default.aspx">SQL Azure Database</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Azure+Services+Platform/default.aspx">Azure Services Platform</category></item><item><title>ArqCast Brasil falando sobre Enterprise Library</title><link>http://blogs.msdn.com/wcamb/archive/2009/07/21/arqcast-brasil-falando-sobre-enterprise-library.aspx</link><pubDate>Tue, 21 Jul 2009 17:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9843438</guid><dc:creator>wcamb</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9843438.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9843438</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9843438</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Entrou no ar mais um vídeo ArqCast no Channel9/Brasil, desta vez sobre a Enterprise Library 4.1.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://channel9.msdn.com/posts/Markus+Christen/ArqCast-Brasil-Enterprise-Library/" mce_href="http://channel9.msdn.com/posts/Markus+Christen/ArqCast-Brasil-Enterprise-Library/"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ArqCastBrasilfalandosobreEnterpriseLibra_A757/image_thumb.png" width=260 height=200 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ArqCastBrasilfalandosobreEnterpriseLibra_A757/image_thumb.png"&gt;&lt;/A&gt; &lt;STRONG&gt;Enterprise Library&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Ref.: &lt;A href="http://channel9.msdn.com/posts/Markus+Christen/ArqCast-Brasil-Enterprise-Library/" mce_href="http://channel9.msdn.com/posts/Markus+Christen/ArqCast-Brasil-Enterprise-Library/"&gt;http://channel9.msdn.com/posts/Markus+Christen/ArqCast-Brasil-Enterprise-Library/&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;A idéia foi falar um pouco sobre alguns aspectos da biblioteca através de um bate-papo que eu tive com o &lt;A href="http://blogs.msdn.com/conde/" rel=nofollow target=_blank mce_href="http://blogs.msdn.com/conde/"&gt;Luciano Condé&lt;/A&gt;, arquiteto de soluções para ISV’s, na Microsoft.&lt;/P&gt;
&lt;P&gt;Para quem está acompanhando, esse vídeo é continuação do primeiro sobre Frameworks de Desenvolvimento e Blocos de Aplicação, que você encontra &lt;A href="http://blogs.msdn.com/wcamb/archive/2009/07/16/arqcast-brasil-falando-sobre-frameworks-de-desenvolvimento.aspx" target=_blank mce_href="http://blogs.msdn.com/wcamb/archive/2009/07/16/arqcast-brasil-falando-sobre-frameworks-de-desenvolvimento.aspx"&gt;aqui&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Comentários e sugestões, fiquem a vontade!&lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9843438" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/ArqCast/default.aspx">ArqCast</category></item><item><title>Links e recomendações para o desenvolvimento de serviços</title><link>http://blogs.msdn.com/wcamb/archive/2009/05/16/links-e-recomenda-es-para-o-desenvolvimento-de-servi-os.aspx</link><pubDate>Sat, 16 May 2009 20:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9623367</guid><dc:creator>wcamb</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9623367.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9623367</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9623367</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Essa semana tive algumas reuniões com empresas e arquitetos, falando sobre ferramentas importantes para projetos envolvendo serviços, web services e aplicações de composição. Vamos aproveitar o post para citar os principais pacotes disponíveis, que ajudam no processo de desenvolvimento de uma solução orientada a serviços.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1)&amp;nbsp;&amp;nbsp;&amp;nbsp; Enterprise Library 4.1 - October 2008 &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=1643758B-2986-47F7-B529-3E41584B6CE5&amp;amp;displaylang=en" target=_blank rel=nofollow mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=1643758B-2986-47F7-B529-3E41584B6CE5&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=1643758B-2986-47F7-B529-3E41584B6CE5&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;A Enterprise Library 4.1 oferece um conjunto de blocos de aplicação e bibliotecas que atendem questões básicas da infra-estrutura de software, como: &lt;BR&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp; Caching &lt;BR&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp; Criptografia &lt;BR&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp; Acesso a Dados &lt;BR&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp; Tratamento de Exceção &lt;BR&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp; Interceptação de chamadas &lt;BR&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp; Logging, auditoria &lt;BR&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp; Segurança &lt;BR&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp; Validação, entre outros. &lt;/P&gt;
&lt;P&gt;Sem dúvida, é um pacote muito importante para consulta e uso durante o projeto.&lt;/P&gt;
&lt;P&gt;Veja mais aqui: &lt;A href="http://blogs.msdn.com/wcamb/archive/2009/04/17/enterprise-library-configuration-com-a-entlib-4-1.aspx" target=_blank rel=nofollow mce_href="http://blogs.msdn.com/wcamb/archive/2009/04/17/enterprise-library-configuration-com-a-entlib-4-1.aspx"&gt;http://blogs.msdn.com/wcamb/archive/2009/04/17/enterprise-library-configuration-com-a-entlib-4-1.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2)&amp;nbsp;&amp;nbsp;&amp;nbsp; Hands-On Labs for Enterprise Library 4.1 – March 2009 &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=AB3F2168-FEA1-4FC2-B40C-7867D99D4B6A&amp;amp;displaylang=en" target=_blank rel=nofollow mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=AB3F2168-FEA1-4FC2-B40C-7867D99D4B6A&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=AB3F2168-FEA1-4FC2-B40C-7867D99D4B6A&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;O Hands On Labs (HOL) da Enterprise Library 4.1 é um pacote obrigatório para quem está iniciando seus primeiros passos com a biblioteca. Os laboratórios são muito bons, permitindo um excelente estudo sobre cada pacote.&lt;/P&gt;
&lt;P&gt;Veja mais aqui: &lt;A href="http://blogs.msdn.com/wcamb/archive/2009/04/13/hands-on-labs-for-enterprise-library-4-1-march-2009.aspx" target=_blank rel=nofollow mce_href="http://blogs.msdn.com/wcamb/archive/2009/04/13/hands-on-labs-for-enterprise-library-4-1-march-2009.aspx"&gt;http://blogs.msdn.com/wcamb/archive/2009/04/13/hands-on-labs-for-enterprise-library-4-1-march-2009.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3)&amp;nbsp;&amp;nbsp;&amp;nbsp; patterns &amp;amp; practices Application Architecture Guide 2.0 &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://www.codeplex.com/AppArchGuide/Release/ProjectReleases.aspx?ReleaseId=20586" target=_blank rel=nofollow mce_href="http://www.codeplex.com/AppArchGuide/Release/ProjectReleases.aspx?ReleaseId=20586"&gt;http://www.codeplex.com/AppArchGuide/Release/ProjectReleases.aspx?ReleaseId=20586&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Esse documento é o guia de arquitetura em plataforma .NET. Leitura obrigatória sobre aplicações Web e arquiteturas de referência Web. &lt;/P&gt;
&lt;P&gt;Veja mais aqui: &lt;A href="http://blogs.msdn.com/wcamb/archive/2008/12/19/patterns-practices-application-architecture-guide-2-0.aspx" target=_blank rel=nofollow mce_href="http://blogs.msdn.com/wcamb/archive/2008/12/19/patterns-practices-application-architecture-guide-2-0.aspx"&gt;http://blogs.msdn.com/wcamb/archive/2008/12/19/patterns-practices-application-architecture-guide-2-0.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;4)&amp;nbsp;&amp;nbsp;&amp;nbsp; patterns &amp;amp; practices : Improving Web Services Secutiry &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://www.codeplex.com/WCFSecurityGuide/Release/ProjectReleases.aspx?ReleaseId=15892" target=_blank rel=nofollow mce_href="http://www.codeplex.com/WCFSecurityGuide/Release/ProjectReleases.aspx?ReleaseId=15892"&gt;http://www.codeplex.com/WCFSecurityGuide/Release/ProjectReleases.aspx?ReleaseId=15892&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Esse documento fala sobre os principais aspectos de segurança para Web Services e serviços em WCF. Questões sobre autenticação, autorização, impersonation, etc. são bem tratadas nesse documento. Leitura importante!&lt;/P&gt;
&lt;P&gt;Veja mais aqui: &lt;A href="http://blogs.msdn.com/wcamb/archive/2008/11/05/patterns-practices-improving-web-services-security.aspx" target=_blank rel=nofollow mce_href="http://blogs.msdn.com/wcamb/archive/2008/11/05/patterns-practices-improving-web-services-security.aspx"&gt;http://blogs.msdn.com/wcamb/archive/2008/11/05/patterns-practices-improving-web-services-security.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;4)&amp;nbsp;&amp;nbsp;&amp;nbsp; Composite Application Guidance for WPF and Silverlight – Prism 2.0 &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A title=http://compositewpf.codeplex.com/ href="http://compositewpf.codeplex.com/" target=_blank rel=nofollow mce_href="http://compositewpf.codeplex.com/"&gt;http://compositewpf.codeplex.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Esse velho conhecido oferece uma biblioteca para a construção de aplicações de composição em WPF e Silverlight 2.0. Para isso, o Prism oferece uma biblioteca que permite que módulos independentes sejam construídos e integrados na mesma interface de aplicação, dinâmica e composta. Cada módulo pode consumir funcionalidades e serviços de fontes diferentes. A implementação de referência STOCK TRADER que vem com o Prism 2.0 já oferece um bom começo e exemplo de aplicação. Confira!&lt;/P&gt;
&lt;P&gt;E sobre pacotes de instalação para aplicações Web, o recente: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;6)&amp;nbsp;&amp;nbsp;&amp;nbsp; Microsoft Web Platform Installer &lt;BR&gt;&lt;/STRONG&gt;Ref. &lt;A href="http://www.microsoft.com/web/downloads/platform.aspx" mce_href="http://www.microsoft.com/web/downloads/platform.aspx"&gt;http://www.microsoft.com/web/downloads/platform.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Esse pacote é muito interessante para aplicações Web, que farão parte da solução com serviços. Questões como deployment, configuração e empacotamento dos bits para exportação para a produção também estão presentes em projetos SOA. Por isso, o Web Platform Installer vale como dica.&lt;/P&gt;
&lt;P&gt;Veja mais aqui: &lt;A href="http://blogs.msdn.com/wcamb/archive/2009/04/30/microsoft-web-platform-installer-1-0-e-2-0-beta.aspx" mce_href="http://blogs.msdn.com/wcamb/archive/2009/04/30/microsoft-web-platform-installer-1-0-e-2-0-beta.aspx"&gt;http://blogs.msdn.com/wcamb/archive/2009/04/30/microsoft-web-platform-installer-1-0-e-2-0-beta.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;7)&amp;nbsp;&amp;nbsp;&amp;nbsp; Health Monitoring to Instrument a WCF Service for Security &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://msdn.microsoft.com/en-us/library/cc949048.aspx" target=_blank rel=nofollow mce_href="http://msdn.microsoft.com/en-us/library/cc949048.aspx"&gt;http://msdn.microsoft.com/en-us/library/cc949048.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;O objetivo desse pacote é suportar um serviço WCF com vários elementos de instrumentação, monitoração e segurança. Leitura complementar bem interessante.&lt;/P&gt;
&lt;P&gt;Esses foram alguns pacotes que tenho usado na orientação de projetos com serviços. Fique a vontade para comentar suas experiências ou ainda adicionar novas dicas para a comunidade. &lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9623367" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Arquitetura+de+Solu_26002300_231_3B0026002300_245_3B00_es/default.aspx">Arquitetura de Solu&amp;#231;&amp;#245;es</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/SOA/default.aspx">SOA</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category></item><item><title>Enterprise Library Configuration com a EntLib 4.1</title><link>http://blogs.msdn.com/wcamb/archive/2009/04/17/enterprise-library-configuration-com-a-entlib-4-1.aspx</link><pubDate>Fri, 17 Apr 2009 13:53:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9554086</guid><dc:creator>wcamb</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9554086.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9554086</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9554086</wfw:comment><description>&lt;P&gt;Olá pessoal. tudo certo?&lt;/P&gt;
&lt;P&gt;Aproveitamos a semana para falar da &lt;STRONG&gt;Enterprise Library 4.1&lt;/STRONG&gt;. Conversando com alguns colegas do mercado, já ouvi bons comentários sobre as vantagens de seus exemplos e aplicabilidade nas soluções. A idéia era essa mesmo, sinalizar uma ferramenta que pode nos ajudar no dia-a-dia de projetos.&lt;/P&gt;
&lt;P&gt;Como vimos em alguns exemplos, tudo começa com a configuração do &lt;STRONG&gt;App.Config&lt;/STRONG&gt; ou &lt;STRONG&gt;Web.Config&lt;/STRONG&gt; da aplicação através do &lt;STRONG&gt;Enterprise Library Configuration&lt;/STRONG&gt;:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LoggingApplicationBlockcomaEntLib4.1_1B00/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LoggingApplicationBlockcomaEntLib4.1_1B00/image_4.png"&gt;&lt;IMG title=image style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=331 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LoggingApplicationBlockcomaEntLib4.1_1B00/image_thumb_1.png" width=364 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LoggingApplicationBlockcomaEntLib4.1_1B00/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;De onde partimos para a escolha dos &lt;STRONG&gt;Application Blocks&lt;/STRONG&gt; que iremos usar em nossa solução. Veja o exemplo abaixo, onde o Data Access App.Block, o Exception Handling App.Block e o Logging App.Block foram escolhidos para a aplicação:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LoggingApplicationBlockcomaEntLib4.1_1B00/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LoggingApplicationBlockcomaEntLib4.1_1B00/image_2.png"&gt;&lt;IMG title=image style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=565 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LoggingApplicationBlockcomaEntLib4.1_1B00/image_thumb.png" width=518 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LoggingApplicationBlockcomaEntLib4.1_1B00/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Em resumo, a Enterprise Library oferece uma série de recursos para os principais aspectos envolvidos na construção de aplicações. Recomendo fortemente que avaliem seus vários pacotes e exemplos do &lt;EM&gt;Hands On Labs&lt;/EM&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Enterprise Library e a construção de serviços…&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Esta semana, tive ainda algumas conversas sobre os principais desafios na construção de serviços, retomando a velha discussão sobre &lt;STRONG&gt;SOA&lt;/STRONG&gt; e &lt;STRONG&gt;SOI&lt;/STRONG&gt;. Novamente, pense que serviços são peças de uma arquitetura que também necessitam de instrumentação, segurança, monitoração, logging, tratamento de exceção, acesso a dados, etc. Assim, podemos aplicar os blocos da &lt;STRONG&gt;Enteprise Library&lt;/STRONG&gt; também para a construção de nossos serviços de SOA, economizando horas de projeto com detalhes que são comuns a toda infra-estrutura de software.&lt;/P&gt;
&lt;P&gt;No próximo post, vamos falar um pouco mais sobre essas e outras dicas aplicáveis para a construção de serviços na plataforma Microsoft.&lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9554086" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category></item><item><title>Security Application Block com a EntLib 4.1</title><link>http://blogs.msdn.com/wcamb/archive/2009/04/15/security-application-block-com-a-entlib-4-1.aspx</link><pubDate>Wed, 15 Apr 2009 19:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9551107</guid><dc:creator>wcamb</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9551107.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9551107</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9551107</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Ainda falando sobre a &lt;STRONG&gt;Enterprise Library 4.1&lt;/STRONG&gt;, hoje vamos olhar o &lt;STRONG&gt;Security Application Block&lt;/STRONG&gt;. Segurança de modo geral é um aspecto muito importante na arquitetura de soluções e deve ser tratado com todo cuidado.&lt;/P&gt;
&lt;P&gt;Através do &lt;EM&gt;Security Application Block&lt;/EM&gt;, podemos definir os métodos de &lt;STRONG&gt;autenticação&lt;/STRONG&gt; de usuário e &lt;STRONG&gt;autorização&lt;/STRONG&gt; de acesso às funcionalidades da aplicação, de acordo com os papéis (&lt;EM&gt;roles&lt;/EM&gt;) definidos para cada usuário, de um modo fácil e configurável.&lt;/P&gt;
&lt;P&gt;A partir do &lt;STRONG&gt;Hands On Labs da EntLib 4.1&lt;/STRONG&gt;, temos alguns exercícios para autenticação e autorização na pasta &lt;EM&gt;C:\Enterprise Library 4.1 HOL\CS\Security.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Veja um exemplo de implementação no arquivo &lt;EM&gt;SecurityHelper.cs&lt;/EM&gt;, abaixo:&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: gray 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: gray 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 8pt; PADDING-BOTTOM: 4px; MARGIN: 20px 0px 10px; OVERFLOW: auto; BORDER-LEFT: gray 1px solid; WIDTH: 97.5%; CURSOR: text; MAX-HEIGHT: 200px; LINE-HEIGHT: 12pt; PADDING-TOP: 4px; BORDER-BOTTOM: gray 1px solid; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BACKGROUND-COLOR: #f4f4f4"&gt;
&lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   1:&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.Security.Principal;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   2:&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.Threading;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   3:&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.Web.Security; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   4:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   5:&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;namespace&lt;/SPAN&gt; BugSmak.Security&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   6:&lt;/SPAN&gt; {&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   7:&lt;/SPAN&gt;     &lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt; SecurityHelper&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   8:&lt;/SPAN&gt;     {&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   9:&lt;/SPAN&gt;         &lt;SPAN style="COLOR: #0000ff"&gt;private&lt;/SPAN&gt; SecurityHelper() &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  10:&lt;/SPAN&gt;         { }&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  11:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  12:&lt;/SPAN&gt;         &lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;bool&lt;/SPAN&gt; Authenticate(&lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; username, &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; password)&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  13:&lt;/SPAN&gt;         {&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  14:&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #0000ff"&gt;bool&lt;/SPAN&gt; authenticated = &lt;SPAN style="COLOR: #0000ff"&gt;false&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  15:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  16:&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #008000"&gt;// TODO: Authenticate Credentials&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  17:&lt;/SPAN&gt;             authenticated = Membership.ValidateUser(username, password);&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  18:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  19:&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #008000"&gt;// TODO: Get Roles&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  20:&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt; (!authenticated)&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  21:&lt;/SPAN&gt;                 &lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;false&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  22:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  23:&lt;/SPAN&gt;             IIdentity identity;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  24:&lt;/SPAN&gt;             identity = &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; GenericIdentity(username, Membership.Provider.Name);&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  25:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  26:&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt;[] roles = Roles.GetRolesForUser(identity.Name);&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  27:&lt;/SPAN&gt;             IPrincipal principal = &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; GenericPrincipal(identity, roles);&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  28:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  29:&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #008000"&gt;// Place user's principal on the thread&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  30:&lt;/SPAN&gt;             Thread.CurrentPrincipal = principal;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  31:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  32:&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt; authenticated;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  33:&lt;/SPAN&gt;         }&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  34:&lt;/SPAN&gt;         &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  35:&lt;/SPAN&gt;         &lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;bool&lt;/SPAN&gt; Authorized(&lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; rule)&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  36:&lt;/SPAN&gt;         {&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  37:&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #0000ff"&gt;bool&lt;/SPAN&gt; authorized = &lt;SPAN style="COLOR: #0000ff"&gt;false&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  38:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  39:&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #008000"&gt;// TODO: Check rule-base authorization&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  40:&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt; authorized;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  41:&lt;/SPAN&gt;         }&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  42:&lt;/SPAN&gt;     }&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  43:&lt;/SPAN&gt; }&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;A classe &lt;STRONG&gt;SecurityHelper&lt;/STRONG&gt; acima implementa os métodos de &lt;STRONG&gt;Autenticação&lt;/STRONG&gt; e &lt;STRONG&gt;Autorização&lt;/STRONG&gt;, que podemos chamar para esses tratamentos em nossa aplicação. Como um benefício da EntLib, o modelo de programação é legível e de fácil configuração, economizando horas de projetos para a implementação desse mesmo tratamento.&lt;/P&gt;
&lt;P&gt;Por exemplo, a partir da definição da classe &lt;STRONG&gt;SecurityHelper&lt;/STRONG&gt; , podemos criar um formulário de &lt;STRONG&gt;Sign In&lt;/STRONG&gt;, como vemos abaixo:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SecurityApplicationBlockcomaEntLib4.1_14F05/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SecurityApplicationBlockcomaEntLib4.1_14F05/image_6.png"&gt;&lt;IMG title=image style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=142 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SecurityApplicationBlockcomaEntLib4.1_14F05/image_thumb_2.png" width=244 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SecurityApplicationBlockcomaEntLib4.1_14F05/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;De onde chamamos a autenticação do usuário através do botão &lt;STRONG&gt;Sign In.&lt;/STRONG&gt; Abaixo você tem a implementação do formulário acima, com destaque para o método &lt;STRONG&gt;btnLogin_Click(),&lt;/STRONG&gt; disparado pelo click no botão &lt;STRONG&gt;Sign In&lt;/STRONG&gt;:&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: gray 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: gray 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 8pt; PADDING-BOTTOM: 4px; MARGIN: 20px 0px 10px; OVERFLOW: auto; BORDER-LEFT: gray 1px solid; WIDTH: 97.5%; CURSOR: text; MAX-HEIGHT: 200px; LINE-HEIGHT: 12pt; PADDING-TOP: 4px; BORDER-BOTTOM: gray 1px solid; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BACKGROUND-COLOR: #f4f4f4"&gt;
&lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   1:&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   2:&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.Windows.Forms;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   3:&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; BugSmak.Security;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   4:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   5:&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;namespace&lt;/SPAN&gt; BugSmak&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   6:&lt;/SPAN&gt; {&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   7:&lt;/SPAN&gt;     &lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;partial&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt; LoginForm : Form&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   8:&lt;/SPAN&gt;     {&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   9:&lt;/SPAN&gt;         &lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; LoginForm()&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  10:&lt;/SPAN&gt;         {&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  11:&lt;/SPAN&gt;             InitializeComponent();&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  12:&lt;/SPAN&gt;         }&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  13:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  14:&lt;/SPAN&gt;         &lt;SPAN style="COLOR: #0000ff"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; btnLogin_Click(&lt;SPAN style="COLOR: #0000ff"&gt;object&lt;/SPAN&gt; sender, EventArgs e)&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  15:&lt;/SPAN&gt;         {&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  16:&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; username = &lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;.txtUsername.Text;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  17:&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; password = &lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;.txtPassword.Text;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  18:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  19:&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #0000ff"&gt;bool&lt;/SPAN&gt; authenticated;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  20:&lt;/SPAN&gt;             authenticated = SecurityHelper.Authenticate(username, password);&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  21:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  22:&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt; (authenticated == &lt;SPAN style="COLOR: #0000ff"&gt;true&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  23:&lt;/SPAN&gt;                 &lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;.DialogResult = DialogResult.OK;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  24:&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #0000ff"&gt;else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  25:&lt;/SPAN&gt;                 &lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;.errorLabel.Visible = &lt;SPAN style="COLOR: #0000ff"&gt;true&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  26:&lt;/SPAN&gt;         }&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  27:&lt;/SPAN&gt;     }&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  28:&lt;/SPAN&gt; }&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;Nesse caso, a autenticação é feita através da definição prévia de um arquivo de configuração de usuários e credenciais, usado pelo &lt;EM&gt;SecurityHelper&lt;/EM&gt; para validação, como vemos no exemplo abaixo:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SecurityApplicationBlockcomaEntLib4.1_14F05/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SecurityApplicationBlockcomaEntLib4.1_14F05/image_8.png"&gt;&lt;IMG title=image style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=137 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SecurityApplicationBlockcomaEntLib4.1_14F05/image_thumb_3.png" width=293 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SecurityApplicationBlockcomaEntLib4.1_14F05/image_thumb_3.png"&gt;&lt;/A&gt; Arquivo: Users.xml&lt;/P&gt;
&lt;P&gt;Com o código acima e usando o &lt;STRONG&gt;Security Application Block&lt;/STRONG&gt;, podemos ainda &lt;STRONG&gt;autenticar&lt;/STRONG&gt; nossos usuários e validar as funcionalidades liberadas de acordo com cada perfil. Por exemplo, o métoto &lt;STRONG&gt;Create()&lt;/STRONG&gt; abaixo é autorizado para os papéis &lt;EM&gt;“Employee”, “Developer”&lt;/EM&gt; e &lt;EM&gt;“Manager” &lt;/EM&gt;de usuários autenticados, veja:&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: gray 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: gray 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 8pt; PADDING-BOTTOM: 4px; MARGIN: 20px 0px 10px; OVERFLOW: auto; BORDER-LEFT: gray 1px solid; WIDTH: 97.5%; CURSOR: text; MAX-HEIGHT: 200px; LINE-HEIGHT: 12pt; PADDING-TOP: 4px; BORDER-BOTTOM: gray 1px solid; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BACKGROUND-COLOR: #f4f4f4"&gt;
&lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   1:&lt;/SPAN&gt; [PrincipalPermission(SecurityAction.Demand, Role = &lt;SPAN style="COLOR: #006080"&gt;"Employee"&lt;/SPAN&gt;)]&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   2:&lt;/SPAN&gt; [PrincipalPermission(SecurityAction.Demand, Role = &lt;SPAN style="COLOR: #006080"&gt;"Developer"&lt;/SPAN&gt;)]&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   3:&lt;/SPAN&gt; [PrincipalPermission(SecurityAction.Demand, Role = &lt;SPAN style="COLOR: #006080"&gt;"Manager"&lt;/SPAN&gt;)]&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   4:&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;static&lt;/SPAN&gt; RaiseBug Create()&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   5:&lt;/SPAN&gt; {&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   6:&lt;/SPAN&gt;     &lt;SPAN style="COLOR: #008000"&gt;// TODO: Check Authorization&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   7:&lt;/SPAN&gt;     &lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; RaiseBug();&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   8:&lt;/SPAN&gt; }&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;O &lt;STRONG&gt;Security Application Block&lt;/STRONG&gt; ainda suporta outros métodos de autorização, como o &lt;EM&gt;Authorization Rule Provider&lt;/EM&gt;, o &lt;EM&gt;AzMan Provider&lt;/EM&gt; ou métodos &lt;EM&gt;customizados&lt;/EM&gt; conforme a necessidade. Essa configuração é feita sobre o arquivo de configuração &lt;EM&gt;App.Config &lt;/EM&gt;ou &lt;EM&gt;Web.Config&lt;/EM&gt;, com a ferramenta &lt;STRONG&gt;Enterprise Library Configuration:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SecurityApplicationBlockcomaEntLib4.1_14F05/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SecurityApplicationBlockcomaEntLib4.1_14F05/image_4.png"&gt;&lt;IMG title=image style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=237 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SecurityApplicationBlockcomaEntLib4.1_14F05/image_thumb_1.png" width=494 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SecurityApplicationBlockcomaEntLib4.1_14F05/image_thumb_1.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Usando o &lt;STRONG&gt;Authorization Rule Provider&lt;/STRONG&gt;, nosso método de autorização ficaria assim:&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: gray 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: gray 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 8pt; PADDING-BOTTOM: 4px; MARGIN: 20px 0px 10px; OVERFLOW: auto; BORDER-LEFT: gray 1px solid; WIDTH: 97.5%; CURSOR: text; MAX-HEIGHT: 200px; LINE-HEIGHT: 12pt; PADDING-TOP: 4px; BORDER-BOTTOM: gray 1px solid; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BACKGROUND-COLOR: #f4f4f4"&gt;
&lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   1:&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;bool&lt;/SPAN&gt; Authorized(&lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; rule)&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   2:&lt;/SPAN&gt; {&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   3:&lt;/SPAN&gt;     &lt;SPAN style="COLOR: #0000ff"&gt;bool&lt;/SPAN&gt; authorized = &lt;SPAN style="COLOR: #0000ff"&gt;false&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   4:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   5:&lt;/SPAN&gt;     &lt;SPAN style="COLOR: #008000"&gt;// TODO: Check rule-base authorization&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   6:&lt;/SPAN&gt;     &lt;SPAN style="COLOR: #008000"&gt;// No parameter passed to GetAuthorizationProvider method as &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   7:&lt;/SPAN&gt;     &lt;SPAN style="COLOR: #008000"&gt;// we'll set the defaultAuthorizationInstance in App.config.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   8:&lt;/SPAN&gt;     IAuthorizationProvider ruleProvider;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   9:&lt;/SPAN&gt;     ruleProvider = AuthorizationFactory.GetAuthorizationProvider();&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  10:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  11:&lt;/SPAN&gt;     authorized = ruleProvider.Authorize(Thread.CurrentPrincipal, rule);&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  12:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  13:&lt;/SPAN&gt;     &lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt; authorized;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  14:&lt;/SPAN&gt; }&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;Ao final, nosso arquivo de configuração terá uma definição semelhante a essa:&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: gray 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: gray 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 8pt; PADDING-BOTTOM: 4px; MARGIN: 20px 0px 10px; OVERFLOW: auto; BORDER-LEFT: gray 1px solid; WIDTH: 97.5%; CURSOR: text; MAX-HEIGHT: 200px; LINE-HEIGHT: 12pt; PADDING-TOP: 4px; BORDER-BOTTOM: gray 1px solid; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BACKGROUND-COLOR: #f4f4f4"&gt;
&lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   1:&lt;/SPAN&gt; &amp;lt;?xml version=&lt;SPAN style="COLOR: #006080"&gt;"1.0"&lt;/SPAN&gt; encoding=&lt;SPAN style="COLOR: #006080"&gt;"utf-8"&lt;/SPAN&gt;?&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   2:&lt;/SPAN&gt; &amp;lt;configuration&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   3:&lt;/SPAN&gt;   &amp;lt;configSections&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   4:&lt;/SPAN&gt;     &amp;lt;section name=&lt;SPAN style="COLOR: #006080"&gt;"securityConfiguration"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   5:&lt;/SPAN&gt;              type=&lt;SPAN style="COLOR: #006080"&gt;"Microsoft.Practices.EnterpriseLibrary.Security.Configuration.SecuritySettings, Microsoft.Practices.EnterpriseLibrary.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"&lt;/SPAN&gt; /&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   6:&lt;/SPAN&gt;   &amp;lt;/configSections&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   7:&lt;/SPAN&gt;   &amp;lt;securityConfiguration defaultAuthorizationInstance=&lt;SPAN style="COLOR: #006080"&gt;"RuleProvider"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   8:&lt;/SPAN&gt;                          defaultSecurityCacheInstance=&lt;SPAN style="COLOR: #006080"&gt;""&lt;/SPAN&gt;&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   9:&lt;/SPAN&gt;     &amp;lt;authorizationProviders&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  10:&lt;/SPAN&gt;       &amp;lt;add name=&lt;SPAN style="COLOR: #006080"&gt;"RuleProvider"&lt;/SPAN&gt; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  11:&lt;/SPAN&gt;            type=&lt;SPAN style="COLOR: #006080"&gt;"Microsoft.Practices.EnterpriseLibrary.Security.AuthorizationRuleProvider, Microsoft.Practices.EnterpriseLibrary.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"&lt;/SPAN&gt;&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  12:&lt;/SPAN&gt;         &amp;lt;rules&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  13:&lt;/SPAN&gt;           &amp;lt;add name=&lt;SPAN style="COLOR: #006080"&gt;"Raise Bug"&lt;/SPAN&gt; expression=&lt;SPAN style="COLOR: #006080"&gt;"R:Employee OR R:Developer OR R:Manager"&lt;/SPAN&gt; /&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  14:&lt;/SPAN&gt;           &amp;lt;add name=&lt;SPAN style="COLOR: #006080"&gt;"Assign Bug"&lt;/SPAN&gt; expression=&lt;SPAN style="COLOR: #006080"&gt;"R:Manager"&lt;/SPAN&gt; /&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  15:&lt;/SPAN&gt;           &amp;lt;add name=&lt;SPAN style="COLOR: #006080"&gt;"Resolve Bug"&lt;/SPAN&gt; expression=&lt;SPAN style="COLOR: #006080"&gt;"R:Developer OR R:Manager"&lt;/SPAN&gt; /&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  16:&lt;/SPAN&gt;         &amp;lt;/rules&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  17:&lt;/SPAN&gt;       &amp;lt;/add&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  18:&lt;/SPAN&gt;     &amp;lt;/authorizationProviders&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  19:&lt;/SPAN&gt;   &amp;lt;/securityConfiguration&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  20:&lt;/SPAN&gt; &amp;lt;/configuration&amp;gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;Em resumo, cada Application Block da EntLib permite uma fácil configuração e uma menor codificação para recursos importantes como a autorização e a autenticação que vimos neste post.&lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9551107" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category></item><item><title>Hands-On Labs for Enterprise Library 4.1 – March 2009</title><link>http://blogs.msdn.com/wcamb/archive/2009/04/13/hands-on-labs-for-enterprise-library-4-1-march-2009.aspx</link><pubDate>Tue, 14 Apr 2009 01:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9547410</guid><dc:creator>wcamb</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9547410.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9547410</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9547410</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Semana passada, tive um belo bate-papo com alguns colegas, falando sobre algumas ferramentas para a construção de serviços, aplicações e como resolver questões básicas de todo software. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Plataformadeaplicaesserviosorque_C452/image_12.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Plataformadeaplicaesserviosorque_C452/image_12.png"&gt;&lt;IMG title=EntLib style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px; BORDER-RIGHT-WIDTH: 0px" height=189 alt=EntLib src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Plataformadeaplicaesserviosorque_C452/image_thumb_4.png" width=240 align=right border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Plataformadeaplicaesserviosorque_C452/image_thumb_4.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Aqui, vale lembrar que a biblioteca &lt;STRONG&gt;Enterprise Library &lt;/STRONG&gt;ainda é uma grande solução para muitas dessas questões. Apenas como histórico, já passamos por várias versões da EntLib, veja:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Enterprise Library 4.1 - October 2008 &lt;/LI&gt;
&lt;LI&gt;Enterprise Library 4.0 - May 2008 &lt;/LI&gt;
&lt;LI&gt;Enterprise Library 3.1 - May 2007 &lt;/LI&gt;
&lt;LI&gt;Enterprise Library 2.0 - January 2006 &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Qual versão você está usando? A mais recente é a 4.1, que você encontra aqui:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Enterprise Library 4.1 - October 2008&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=1643758B-2986-47F7-B529-3E41584B6CE5&amp;amp;displaylang=en" target=_blank rel=nofollow mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=1643758B-2986-47F7-B529-3E41584B6CE5&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=1643758B-2986-47F7-B529-3E41584B6CE5&amp;amp;displaylang=en&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;E o recentemente lançado &lt;STRONG&gt;Hands On Lab&lt;/STRONG&gt;, de Março de 2009, você tem aqui:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Hands-On Labs for Enterprise Library 4.1 – March 2009 &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=AB3F2168-FEA1-4FC2-B40C-7867D99D4B6A&amp;amp;displaylang=en" target=_blank rel=nofollow mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=AB3F2168-FEA1-4FC2-B40C-7867D99D4B6A&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=AB3F2168-FEA1-4FC2-B40C-7867D99D4B6A&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;A &lt;STRONG&gt;Enterprise Library 4.1&lt;/STRONG&gt; oferece um conjunto de blocos de aplicação e bibliotecas que atendem questões básicas da infra-estrutura de software, como:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Caching &lt;/LI&gt;
&lt;LI&gt;Criptografia &lt;/LI&gt;
&lt;LI&gt;Acesso a Dados &lt;/LI&gt;
&lt;LI&gt;Tratamento de Exceção &lt;/LI&gt;
&lt;LI&gt;Interceptação de chamadas &lt;/LI&gt;
&lt;LI&gt;Logging, auditoria &lt;/LI&gt;
&lt;LI&gt;Segurança &lt;/LI&gt;
&lt;LI&gt;Validação, entre outros. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;O &lt;STRONG&gt;Hands On Labs (HOL)&lt;/STRONG&gt; da &lt;STRONG&gt;Enterprise Library 4.1&lt;/STRONG&gt; é um pacote obrigatório para quem está iniciando seus primeiros passos com a biblioteca. A partir da instalação, você tem uma série de pastas com exemplos, labs e documentação sobre cada um dos exercícios disponíveis, como vemos a seguir:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Plataformadeaplicaesserviosorque_C452/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Plataformadeaplicaesserviosorque_C452/image_8.png"&gt;&lt;IMG title=image style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=253 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Plataformadeaplicaesserviosorque_C452/image_thumb_3.png" width=187 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Plataformadeaplicaesserviosorque_C452/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Entre os principais, gostaria de destacar o &lt;STRONG&gt;Validation Application Block&lt;/STRONG&gt;, da pasta &lt;EM&gt;Validation&lt;/EM&gt;. Esse bloco permite o tratamento da validação de entrada de dados, antes da execução de regras de negócio de uma aplicação. Ao todo, são 13 laboratórios apenas para validação, para WinForms, ASP.NET, WCF e outros. &lt;/P&gt;
&lt;P&gt;O laboratório 13 do HOL (&lt;STRONG&gt;Lab 13: Integrating with WCF&lt;/STRONG&gt;) é especialmente interessante pois trata os aspectos de validação de dados a partir de uma aplicação ASP.NET, disparando regras de negócio em serviços WCF – Windows Communication Foundation.&lt;/P&gt;
&lt;P&gt;Usando o &lt;STRONG&gt;Validation Block&lt;/STRONG&gt;, podemos definir as validações para o contrato de serviços e parâmetros recebidos pela interface, como vemos no exemplo de interface abaixo:&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: gray 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: gray 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 8pt; PADDING-BOTTOM: 4px; MARGIN: 20px 0px 10px; OVERFLOW: auto; BORDER-LEFT: gray 1px solid; WIDTH: 97.5%; CURSOR: text; MAX-HEIGHT: 200px; LINE-HEIGHT: 12pt; PADDING-TOP: 4px; BORDER-BOTTOM: gray 1px solid; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BACKGROUND-COLOR: #f4f4f4"&gt;
&lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   1:&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.ServiceModel;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   2:&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   3:&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; Microsoft.Practices.EnterpriseLibrary.Validation.Validators;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   4:&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; ValidationHOL.BusinessLogic;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   5:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   6:&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;namespace&lt;/SPAN&gt; ValidationHOL.Service&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   7:&lt;/SPAN&gt; {&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   8:&lt;/SPAN&gt;     [ServiceContract]&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   9:&lt;/SPAN&gt;     &lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;interface&lt;/SPAN&gt; ICustomerService&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  10:&lt;/SPAN&gt;     {&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  11:&lt;/SPAN&gt;         [OperationContract]&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  12:&lt;/SPAN&gt;         [FaultContract(&lt;SPAN style="COLOR: #0000ff"&gt;typeof&lt;/SPAN&gt;(ValidationFault))]&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  13:&lt;/SPAN&gt;         &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; ProcessCustomer(&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  14:&lt;/SPAN&gt;             Customer customer,&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  15:&lt;/SPAN&gt;             [StringLengthValidator(1, 100,&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  16:&lt;/SPAN&gt;                 MessageTemplate = &lt;SPAN style="COLOR: #006080"&gt;"The notes must be 1 to 100 characters long."&lt;/SPAN&gt;)]&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  17:&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; notes);&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  18:&lt;/SPAN&gt;     }&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  19:&lt;/SPAN&gt; }&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;Como parte do processo, podemos definir o comportamento de validação do serviço usando a ferramenta de configuração &lt;STRONG&gt;SvcConfigEditor.exe&lt;/STRONG&gt;, que você encontra na pasta:&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;&lt;STRONG&gt;C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;Nota: Essa ferramenta é parte do Windows SDK, que você tem no link abaixo:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Microsoft® Windows® Software Development Kit Update for Windows Vista™&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=4377f86d-c913-4b5c-b87e-ef72e5b4e065&amp;amp;displaylang=en" target=_blank rel=nofollow mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=4377f86d-c913-4b5c-b87e-ef72e5b4e065&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=4377f86d-c913-4b5c-b87e-ef72e5b4e065&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Para uma documentação adicional, confira também o link:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Configuration Editor Tool (SvcConfigEditor.exe)&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://msdn.microsoft.com/en-us/library/ms732009.aspx" target=_blank rel=nofollow mce_href="http://msdn.microsoft.com/en-us/library/ms732009.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms732009.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Plataformadeaplicaesserviosorque_C452/image_14.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Plataformadeaplicaesserviosorque_C452/image_14.png"&gt;&lt;IMG title=image style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=356 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Plataformadeaplicaesserviosorque_C452/image_thumb_5.png" width=494 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Plataformadeaplicaesserviosorque_C452/image_thumb_5.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Feita esta configuração, o arquivo &lt;STRONG&gt;Web.Config&lt;/STRONG&gt; terá as definições de validação suportadas pelo serviço, como vemos abaixo na seção &lt;STRONG&gt;&amp;lt;system.serviceModel&amp;gt;&lt;/STRONG&gt; da interface WCF:&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: gray 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: gray 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 8pt; PADDING-BOTTOM: 4px; MARGIN: 20px 0px 10px; OVERFLOW: auto; BORDER-LEFT: gray 1px solid; WIDTH: 97.5%; CURSOR: text; MAX-HEIGHT: 200px; LINE-HEIGHT: 12pt; PADDING-TOP: 4px; BORDER-BOTTOM: gray 1px solid; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BACKGROUND-COLOR: #f4f4f4"&gt;
&lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   1:&lt;/SPAN&gt; &amp;lt;system.serviceModel&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   2:&lt;/SPAN&gt;   &amp;lt;client&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   3:&lt;/SPAN&gt;     &amp;lt;remove contract=&lt;SPAN style="COLOR: #006080"&gt;"IMetadataExchange"&lt;/SPAN&gt; name=&lt;SPAN style="COLOR: #006080"&gt;"sb"&lt;/SPAN&gt; /&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   4:&lt;/SPAN&gt;     &amp;lt;endpoint address=&lt;SPAN style="COLOR: #006080"&gt;""&lt;/SPAN&gt; behaviorConfiguration=&lt;SPAN style="COLOR: #006080"&gt;"validation"&lt;/SPAN&gt; binding=&lt;SPAN style="COLOR: #006080"&gt;"netTcpRelayBinding"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   5:&lt;/SPAN&gt;       contract=&lt;SPAN style="COLOR: #006080"&gt;"IMetadataExchange"&lt;/SPAN&gt; name=&lt;SPAN style="COLOR: #006080"&gt;"sb"&lt;/SPAN&gt; /&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   6:&lt;/SPAN&gt;   &amp;lt;/client&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   7:&lt;/SPAN&gt;   &amp;lt;extensions&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   8:&lt;/SPAN&gt;     &amp;lt;behaviorExtensions&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   9:&lt;/SPAN&gt;       &amp;lt;add name=&lt;SPAN style="COLOR: #006080"&gt;"validation"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: #006080"&gt;"Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF.ValidationElement, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"&lt;/SPAN&gt; /&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  10:&lt;/SPAN&gt;     &amp;lt;/behaviorExtensions&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  11:&lt;/SPAN&gt;   &amp;lt;/extensions&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  12:&lt;/SPAN&gt;   &amp;lt;services&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  13:&lt;/SPAN&gt;     &amp;lt;service behaviorConfiguration=&lt;SPAN style="COLOR: #006080"&gt;"ValidationHOL.Service.Service1Behavior"&lt;/SPAN&gt; name=&lt;SPAN style="COLOR: #006080"&gt;"ValidationHOL.Service.CustomerService"&lt;/SPAN&gt;&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  14:&lt;/SPAN&gt;       &amp;lt;endpoint address=&lt;SPAN style="COLOR: #006080"&gt;""&lt;/SPAN&gt; binding=&lt;SPAN style="COLOR: #006080"&gt;"wsHttpBinding"&lt;/SPAN&gt; contract=&lt;SPAN style="COLOR: #006080"&gt;"ValidationHOL.Service.ICustomerService"&lt;/SPAN&gt;&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  15:&lt;/SPAN&gt;         &amp;lt;identity&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  16:&lt;/SPAN&gt;           &amp;lt;dns &lt;SPAN style="COLOR: #0000ff"&gt;value&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #006080"&gt;"localhost"&lt;/SPAN&gt;/&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  17:&lt;/SPAN&gt;         &amp;lt;/identity&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  18:&lt;/SPAN&gt;       &amp;lt;/endpoint&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  19:&lt;/SPAN&gt;       &amp;lt;endpoint address=&lt;SPAN style="COLOR: #006080"&gt;"mex"&lt;/SPAN&gt; binding=&lt;SPAN style="COLOR: #006080"&gt;"mexHttpBinding"&lt;/SPAN&gt; contract=&lt;SPAN style="COLOR: #006080"&gt;"IMetadataExchange"&lt;/SPAN&gt;/&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  20:&lt;/SPAN&gt;     &amp;lt;/service&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  21:&lt;/SPAN&gt;   &amp;lt;/services&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  22:&lt;/SPAN&gt;   &amp;lt;behaviors&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  23:&lt;/SPAN&gt;     &amp;lt;endpointBehaviors&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  24:&lt;/SPAN&gt;       &amp;lt;behavior name=&lt;SPAN style="COLOR: #006080"&gt;"validation"&lt;/SPAN&gt;&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  25:&lt;/SPAN&gt;         &amp;lt;validation /&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  26:&lt;/SPAN&gt;       &amp;lt;/behavior&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  27:&lt;/SPAN&gt;     &amp;lt;/endpointBehaviors&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  28:&lt;/SPAN&gt;     &amp;lt;serviceBehaviors&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  29:&lt;/SPAN&gt;       &amp;lt;behavior name=&lt;SPAN style="COLOR: #006080"&gt;"ValidationHOL.Service.Service1Behavior"&lt;/SPAN&gt;&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  30:&lt;/SPAN&gt;         &amp;lt;serviceMetadata httpGetEnabled=&lt;SPAN style="COLOR: #006080"&gt;"true"&lt;/SPAN&gt; /&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  31:&lt;/SPAN&gt;         &amp;lt;serviceDebug includeExceptionDetailInFaults=&lt;SPAN style="COLOR: #006080"&gt;"false"&lt;/SPAN&gt; /&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  32:&lt;/SPAN&gt;       &amp;lt;/behavior&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  33:&lt;/SPAN&gt;     &amp;lt;/serviceBehaviors&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  34:&lt;/SPAN&gt;   &amp;lt;/behaviors&amp;gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  35:&lt;/SPAN&gt; &amp;lt;/system.serviceModel&amp;gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;O mesmo formato de configuração pelo &lt;STRONG&gt;Web.Config&lt;/STRONG&gt; e definição de comportamento da aplicação é seguido pelos outros blocos de aplicação da EntLib, como caching, tratamento de exceção, logging, etc. &lt;/P&gt;
&lt;P&gt;Recomendo fortemente que você experimente a &lt;STRONG&gt;EntLib 4.1&lt;/STRONG&gt; e seu &lt;STRONG&gt;Hands On.&lt;/STRONG&gt; Sem dúvida, muito úteis no dia-a-dia de nossas soluções.&lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9547410" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category></item></channel></rss>