<?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 : WF</title><link>http://blogs.msdn.com/wcamb/archive/tags/WF/default.aspx</link><description>Tags: WF</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Algumas palavras sobre Projetos de Missão Crítica</title><link>http://blogs.msdn.com/wcamb/archive/2009/11/06/algumas-palavras-sobre-projetos-de-miss-o-cr-tica.aspx</link><pubDate>Fri, 06 Nov 2009 22:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9918852</guid><dc:creator>wcamb</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9918852.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9918852</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9918852</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo? &lt;/P&gt;
&lt;P&gt;Essa semana acompanhei algumas discussões no forum do Grupo .NET Architects. Entre vários assuntos, um em especial chamou minha atenção: projetos de Missão Crítica. &lt;/P&gt;
&lt;P&gt;O que você entende por um &lt;STRONG&gt;Projeto de Missão Crítica&lt;/STRONG&gt;? &lt;/P&gt;
&lt;P&gt;Do &lt;A href="http://en.wikipedia.org/wiki/Mission_critical" rel=nofollow target=_blank mce_href="http://en.wikipedia.org/wiki/Mission_critical"&gt;wikipedia&lt;/A&gt; temos que o termo &lt;STRONG&gt;Missão Crítica&lt;/STRONG&gt; refere-se a qualquer fator (&lt;EM&gt;equipamento, processo, procedimento, software&lt;/EM&gt;, etc.) que seja crucial para o sucesso ou completude de uma atividade ou projeto. Também pode se referir a um projeto cujo o sucesso é vital para a missão da organização ou negócio da empresa.&lt;/P&gt;
&lt;P&gt;Falando em projetos, vejamos alguns exemplos que considero de Missão Crítica:&lt;/P&gt;
&lt;P&gt;- Um sistema de controle e coleta de dados de um projeto em Física Experimental para criação de estado de plasma, rodando sobre sistema operacional Debian/Linux, com processos em C, usando pilha TCP, pode ser considerado de missão crítica para o laboratório, devido as restrições e riscos envolvidos na monitoração e controle de equipamentos;&lt;/P&gt;
&lt;P&gt;- Um núcleo de negociação para o mercado financeiro, tratando milhões de operações/dia, envolvendo mensageria em banco de dados, cache distribuído, gerenciamento de recursos em memória, etc., com requisitos rígidos de baixa latência, também é um exemplo de missão crítica;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/AlgumaspalavrassobreProjetosdeMissoCrtic_126B3/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/AlgumaspalavrassobreProjetosdeMissoCrtic_126B3/image_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN: 0px 0px 0px 5px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image align=right src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/AlgumaspalavrassobreProjetosdeMissoCrtic_126B3/image_thumb.png" width=240 height=204 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/AlgumaspalavrassobreProjetosdeMissoCrtic_126B3/image_thumb.png"&gt;&lt;/A&gt;- Um SDCD – Sistema Digital de Controle Distribuído – para monitoração e atuação de bicos de óleo em caldeiras para a geração de vapor num planta industrial, também é um belo exemplo. Vapor é um elemento chave em diversos processos industriais, de petroquímicas a processamento de atum em lata :) &lt;/P&gt;
&lt;P&gt;- Um monitor transacional de alto desempenho, aplicando conceitos como ACID, MUTEX, CRITICAL SESSIONS, SEMÁFOROS, árvores de falhas, etc, é outro exemplo. Uma leitura obrigatória sobre o assunto é o livro Transaction Processing, confira &lt;A href="http://www.amazon.com/Transaction-Processing-Concepts-Techniques-Management/dp/1558601902/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1257343655&amp;amp;sr=8-1" rel=nofollow target=_blank mce_href="http://www.amazon.com/Transaction-Processing-Concepts-Techniques-Management/dp/1558601902/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1257343655&amp;amp;sr=8-1"&gt;aqui&lt;/A&gt;! &lt;/P&gt;
&lt;P&gt;- Um sistema SaaS – Software as a Service – sobre algum provedor em nuvem, para uma solução multi-inquilino com interfaces Web, responsável pelo núcleo de faturamento da empresa, é de missão crítica, com requisitos de disponibilidade, responsividade e desempenho. Imagine um sistema SaaS para a venda de ingressos do show de Eric Clapton ou B.B. King! :)&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/AlgumaspalavrassobreProjetosdeMissoCrtic_126B3/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/AlgumaspalavrassobreProjetosdeMissoCrtic_126B3/image_4.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN: 0px 0px 0px 10px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image align=right src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/AlgumaspalavrassobreProjetosdeMissoCrtic_126B3/image_thumb_1.png" width=244 height=184 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/AlgumaspalavrassobreProjetosdeMissoCrtic_126B3/image_thumb_1.png"&gt;&lt;/A&gt; - Um sistema de automação para controle de caixas margem de via, por exemplo, para determinação de presença de trens de metrô e vagões em trechos da via, abertura de portas, desvios de ramais, movimento, etc. O próprio controle do carrossel de composições na via também é crítico. Qual é o trem mais seguro? Um trem parado ou um trem na oficinal, fora da via? :)&lt;/P&gt;
&lt;P&gt;- Um sistema para contabilidade e bilhetagem de chamadas em telefonia celular, também é crítico;&lt;/P&gt;
&lt;P&gt;- Em muitos cenários, até mesmo um sistema de emails é um sistema de missão crítica para a empresa. Algumas corporações simplesmente param ou perdem negócios em casos de falha em suas caixas postais, por mais commodities que possam parecer. Impacto financeiro a vista!;&lt;/P&gt;
&lt;P&gt;- Um sistema de controle de equipamentos médicos, como scanners, tomógrafos, dispositivos de ultra-som, leitores dopplers em tempo real (opa!), entre outros mais sofisticados em medicina, são extremamente críticos em seus resultados. &lt;/P&gt;
&lt;P&gt;Considero todos os exemplos acima como sistemas de &lt;STRONG&gt;Missão Crítica&lt;/STRONG&gt; em diferentes níveis, pois envolvem riscos para o negócio da empresa. &lt;/P&gt;
&lt;P&gt;Assim, podemos destacar três tipos de riscos envolvidos:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Riscos Materiais;&lt;/LI&gt;
&lt;LI&gt;Riscos Financeiros; &lt;/LI&gt;
&lt;LI&gt;Riscos envolvendo Vidas Humanas; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Alguns sistemas de Missão Crítica podem envolver requisitos de &lt;STRONG&gt;Tempo Real (Real Time)&lt;/STRONG&gt;, isto é, janelas de atuação e tempos resposta bem definidos, que devem ser respeitados. Nesses casos, o número de processos envolvidos, o volume ou o número de chamadas disparadas não deve interferir no tempo de resposta do sistema. &lt;/P&gt;
&lt;P&gt;Qual é o tempo de resposta envolvido no tempo real (em milisegundos, por exemplo)? Dependerá do cenário que estamos tratando, seja um canal de &lt;EM&gt;feeders&lt;/EM&gt; de notícias com filtros sobre política ou mensagens para a abertura de cofres em sistemas de segurança bancário.&lt;/P&gt;
&lt;P&gt;Normalmente, condições de &lt;STRONG&gt;tempo real&lt;/STRONG&gt; estão envolvidas em cenários de missão crítica, mas não são obrigatórias.&lt;/P&gt;
&lt;P&gt;Meu ponto aqui é que não podemos considerar como &lt;STRONG&gt;Missão Crítica&lt;/STRONG&gt; apenas o aspecto de desempenho e tempo de resposta envolvidos. Para algumas indústrias, outros atributos são tão importantes quanto, como o impacto financeiro, disponibilidade e riscos diversos.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Quão crítico é o sistema em que você está trabalhando hoje? Ele envolve riscos financeiros, riscos humanos ou riscos materiais? &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Em resumo, qual é o impacto de uma falha em seu sistema para a execução do negócio de sua empresa? Aspectos como recuperação de falhas, tratamento de exceções, árvore de falhas, etc., tornam-se importantes em muitos casos. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Uma vez identificado o cenário de missão crítica, como conduzir o projeto? &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Algumas perguntas são recorrentes neste momento, como:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Qual é o melhor sistema operacional para cada cenário? &lt;/LI&gt;
&lt;LI&gt;Qual é a melhor linguagem de programação para cada cenário? &lt;/LI&gt;
&lt;LI&gt;Qual é a melhor abordagem de patterns para cada cenário? &lt;/LI&gt;
&lt;LI&gt;Quais são as restrições de memória e disco para o SO? Poucos recursos? Desktops? Servidores? &lt;/LI&gt;
&lt;LI&gt;Quais são as necessidades de comunicação com dispositivos e periféricos diversos nesse ambiente de missão crítica? &lt;/LI&gt;
&lt;LI&gt;Quais são os drivers disponíveis para o SO escolhido? Teremos que implementar esses drivers? Existem fornecedores no mercado? &lt;/LI&gt;
&lt;LI&gt;Quais são as latências de rede e pilhas de transporte suportados? O TCP é suficiente? IPv6? Vamos precisar adotar protocolos de Tempo Real (RTP – Real Time Transport Protocol)? Vamos implementar bindings customizados para a entrega de mensagens com baixa latência? Transporte customizado?&lt;/LI&gt;
&lt;LI&gt;Qual a necessidade por tempo real, paralelismos de processos, high performance computing, cluster computing ou grid computing? &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Sem falar ainda em questões adjacentes, como:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Qual será o suporte necessário para a solução? &lt;/LI&gt;
&lt;LI&gt;Como será evolução da pilha de software ao longo do tempo? &lt;/LI&gt;
&lt;LI&gt;Qual é o perfil de profissionais capacitados, exigidos para o projeto? &lt;/LI&gt;
&lt;LI&gt;Quais são os guias de desenvolvimento e patterns disponíveis? &lt;/LI&gt;
&lt;LI&gt;Quais são as ferramentas para a construção de software, metodologias, documentação, etc.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Através aqui do blog, temos acompanhado a plataforma Microsoft e seu suporte para aplicações de missão crítica em diferentes níveis. &lt;/P&gt;
&lt;P&gt;Existem diversos recursos que atendem esses cenários, seja sobre a plataforma .NET ou mesmo sobre código não gerenciado, com processos em C++ sobre Windows Server. No ambiente gerenciado, recursos como interfaces de serviços em WCF – Windows Communication Foundation, mensageria com MSMQ, paralelismo, sincronização e sistemas de integração com baixa latência são alguns exemplos. Em todos os casos, o impacto para o negócio da empresa está presente. &lt;/P&gt;
&lt;P&gt;Em breve, teremos ainda novos recursos disponíveis na plataforma Microsoft, como o &lt;STRONG&gt;&lt;A href="http://www.microsoft.com/NET/Dublin.aspx" rel=nofollow target=_blank mce_href="http://www.microsoft.com/NET/Dublin.aspx"&gt;Dublin&lt;/A&gt;&lt;/STRONG&gt; (para hospedagem de serviços e processos sobre o Windows Server), o &lt;STRONG&gt;&lt;A href="http://msdn.microsoft.com/en-us/data/cc655792.aspx" rel=nofollow target=_blank mce_href="http://msdn.microsoft.com/en-us/data/cc655792.aspx"&gt;Velocity&lt;/A&gt;&lt;/STRONG&gt; (para cache distribuído e aplicações de alto desempenho), novos recursos sobre &lt;STRONG&gt;&lt;A href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx" rel=nofollow target=_blank mce_href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx"&gt;WCF 4&lt;/A&gt;&lt;/STRONG&gt; e &lt;STRONG&gt;&lt;A href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx" rel=nofollow target=_blank mce_href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx"&gt;WF 4&lt;/A&gt;&lt;/STRONG&gt;, além da integração com a plataforma de alta escalabilidade e disponibilidade do &lt;STRONG&gt;&lt;A href="http://blogs.msdn.com/windowsazure/" rel=nofollow target=_blank mce_href="http://blogs.msdn.com/windowsazure/"&gt;Windows Azure&lt;/A&gt;&lt;/STRONG&gt;, que já está em contagem regressiva para seu lançamento, durante o PDC 2009.&lt;/P&gt;
&lt;P&gt;Finalizando, procure identificar em quais cenários de &lt;STRONG&gt;Missão Crítica&lt;/STRONG&gt; você está pessoalmente envolvido e como será a evolução destes nos próximos meses. Você vai perceber que sua TI tem um impacto direto para o sucesso de sua empresa!&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=9918852" 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/Opini_26002300_227_3B00_o/default.aspx">Opini&amp;#227;o</category></item><item><title>Architecture in a Box: WF – Windows Workflow Foundation</title><link>http://blogs.msdn.com/wcamb/archive/2009/10/13/architecture-in-a-box-wf-windows-workflows-foundation.aspx</link><pubDate>Tue, 13 Oct 2009 11:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9906559</guid><dc:creator>wcamb</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9906559.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9906559</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9906559</wfw:comment><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ArchitectureinaBoxWFWindowsWorkflowsFoun_E2DC/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ArchitectureinaBoxWFWindowsWorkflowsFoun_E2DC/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/ArchitectureinaBoxWFWindowsWorkflowsFoun_E2DC/image_thumb.png" width=240 height=119 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ArchitectureinaBoxWFWindowsWorkflowsFoun_E2DC/image_thumb.png"&gt;&lt;/A&gt; Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Como você já percebeu, estou aproveitando o mês de outubro para consolidar diversos temas que temos visto ultimamente numa única série chamada “&lt;STRONG&gt;Architecture in a Box&lt;/STRONG&gt;”. &lt;/P&gt;
&lt;P&gt;As sessões são nível 200/300 e falam de temas como WCF, SOA, MDD, OSLO, WEB, RIA, entre outros. &lt;/P&gt;
&lt;P&gt;A sessão de hoje fala de &lt;STRONG&gt;WF – Windows Workflow Foundation&lt;/STRONG&gt;, um framework da plataforma .NET que permite a construção de processos, máquinas de estado e workflows. Em cenários de composição de regras e serviços no domínio da aplicação, WF é uma excelente alternativa, que vale ser estudada! &lt;/P&gt;
&lt;DIV style="TEXT-ALIGN: left; WIDTH: 425px" id=__ss_2153962&gt;
&lt;OBJECT style="MARGIN: 0px" width=425 height=355&gt;&lt;PARAM NAME="movie" VALUE="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=aab304-windowsworkflowfoundation-wcamb-091007085628-phpapp02&amp;amp;stripped_title=aab304-windows-workflow-foundation-wcamb"&gt;&lt;PARAM NAME="allowFullScreen" VALUE="true"&gt;&lt;PARAM NAME="allowScriptAccess" VALUE="always"&gt;
&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=aab304-windowsworkflowfoundation-wcamb-091007085628-phpapp02&amp;amp;stripped_title=aab304-windows-workflow-foundation-wcamb" mce_src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=aab304-windowsworkflowfoundation-wcamb-091007085628-phpapp02&amp;amp;stripped_title=aab304-windows-workflow-foundation-wcamb" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/OBJECT&gt;
&lt;DIV style="FONT-FAMILY: tahoma,arial; HEIGHT: 26px; FONT-SIZE: 11px; PADDING-TOP: 2px"&gt;View more &lt;A style="TEXT-DECORATION: underline" href="http://www.slideshare.net/" mce_href="http://www.slideshare.net/"&gt;documents&lt;/A&gt; from &lt;A style="TEXT-DECORATION: underline" href="http://www.slideshare.net/wcamb" mce_href="http://www.slideshare.net/wcamb"&gt;Waldemir Cambiucci&lt;/A&gt;.&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;Em breve, teremos o lançamento do WF 4.0, que oferece ainda novos recursos para a construção de workflows, ampliando os cenários de composição. Veja alguns links sobre WF 4.0 abaixo:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The Workflow Way: Understanding Windows Workflow Foundation&lt;/STRONG&gt; (muito bom!)&amp;nbsp; &lt;BR&gt;Ref.: &lt;A href="http://msdn.microsoft.com/en-us/library/dd851337.aspx" rel=nofollow target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd851337.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd851337.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;A Developer's Introduction to Windows Workflow Foundation (WF4) in .NET 4 Beta 1&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://msdn.microsoft.com/en-us/library/ee342461.aspx" rel=nofollow target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee342461.aspx"&gt;http://msdn.microsoft.com/en-us/library/ee342461.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Na sessão de hoje, apresento alguns tópicos sobre o WF 4.0 no final, aproveitem.&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=9906559" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/WF/default.aspx">WF</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Arch+in+a+Box/default.aspx">Arch in a Box</category></item><item><title>Um universo de material para estudo...</title><link>http://blogs.msdn.com/wcamb/archive/2009/06/04/no-princ-pio-era-s-o-msdn.aspx</link><pubDate>Thu, 04 Jun 2009 19:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9699975</guid><dc:creator>wcamb</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9699975.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9699975</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9699975</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo? &lt;/P&gt;
&lt;P&gt;No princípio era só o &lt;STRONG&gt;MSDN&lt;/STRONG&gt;&amp;nbsp;e todos os &lt;STRONG&gt;DevCenters&lt;/STRONG&gt; de tecnologias estavam disponíveis a partir dele: &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/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=171 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb.png" width=244 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb.png"&gt;&lt;/A&gt;&amp;nbsp; &lt;STRONG&gt;MSDN Brasil&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A title=http://msdn.microsoft.com/pt-br/default.aspx href="http://msdn.microsoft.com/pt-br/default.aspx" target=_blank rel=nofollow mce_href="http://msdn.microsoft.com/pt-br/default.aspx"&gt;http://msdn.microsoft.com/pt-br/default.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Com o passar do tempo, mais e mais tecnologias foram sendo lançadas e um Universo de material ficou disponível (em português):&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;&lt;STRONG&gt;Microsoft na Nuvem&lt;/STRONG&gt; &lt;BR&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/azure/default.aspx" target=_blank rel=nofollow mce_href="http://msdn.microsoft.com/pt-br/azure/default.aspx"&gt;Plataforma Azure&lt;/A&gt; &lt;BR&gt;&lt;STRONG&gt;Ferramentas e Linguagens &lt;BR&gt;&lt;/STRONG&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/vstudio/default.aspx" target=_blank mce_href="http://msdn.microsoft.com/pt-br/vstudio/default.aspx"&gt;Visual Studio&lt;/A&gt; &lt;BR&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/express/default.aspx" target=_blank mce_href="http://msdn.microsoft.com/pt-br/express/default.aspx"&gt;Visual Studio Express&lt;/A&gt; &lt;BR&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/teamsystem/default.aspx" target=_blank mce_href="http://msdn.microsoft.com/pt-br/teamsystem/default.aspx"&gt;Visual Studio Team System&lt;/A&gt; &lt;BR&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/vbasic/default.aspx" target=_blank mce_href="http://msdn.microsoft.com/pt-br/vbasic/default.aspx"&gt;Visual Basic&lt;/A&gt; &lt;BR&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/vcsharp/default.aspx" target=_blank mce_href="http://msdn.microsoft.com/pt-br/vcsharp/default.aspx"&gt;Visual C#&lt;/A&gt; &lt;BR&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/visualc/default.aspx" target=_blank mce_href="http://msdn.microsoft.com/pt-br/visualc/default.aspx"&gt;Visual C++&lt;/A&gt; &lt;BR&gt;&lt;STRONG&gt;Desenvolvimento Web &lt;BR&gt;&lt;/STRONG&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/asp.net/default.aspx" target=_blank rel=nofollow mce_href="http://msdn.microsoft.com/pt-br/asp.net/default.aspx"&gt;ASP.NET&lt;/A&gt; &lt;BR&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/silverlight/default.aspx" target=_blank rel=nofollow mce_href="http://msdn.microsoft.com/pt-br/silverlight/default.aspx"&gt;Silverlight&lt;/A&gt; &lt;BR&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/ie/default.aspx" target=_blank mce_href="http://msdn.microsoft.com/pt-br/ie/default.aspx"&gt;Internet Explorer&lt;/A&gt; &lt;BR&gt;&lt;STRONG&gt;Desenvolvimento .NET&lt;/STRONG&gt; &lt;BR&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/netframework/default.aspx" target=_blank mce_href="http://msdn.microsoft.com/pt-br/netframework/default.aspx"&gt;.NET Framework&lt;/A&gt; &lt;BR&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/netframework/aa497273.aspx" target=_blank mce_href="http://msdn.microsoft.com/pt-br/netframework/aa497273.aspx"&gt;.NET Compact Framework&lt;/A&gt; &lt;BR&gt;&lt;STRONG&gt;Desenvolvimento Windows&lt;/STRONG&gt; &lt;BR&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/windows/default.aspx" target=_blank mce_href="http://msdn.microsoft.com/pt-br/windows/default.aspx"&gt;Windows Cliente&lt;/A&gt; &lt;BR&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/windowsmobile/default.aspx" target=_blank mce_href="http://msdn.microsoft.com/pt-br/windowsmobile/default.aspx"&gt;Windows Mobile&lt;/A&gt; &lt;BR&gt;- &lt;A href="http://www.microsoft.com/brasil/msdn/WindowsEmbedded/default.mspx" target=_blank mce_href="http://www.microsoft.com/brasil/msdn/WindowsEmbedded/default.mspx"&gt;Windows Embedded&lt;/A&gt; &lt;BR&gt;&lt;STRONG&gt;Melhores Práticas&lt;/STRONG&gt; &lt;BR&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/architecture/default.aspx" target=_blank mce_href="http://msdn.microsoft.com/pt-br/architecture/default.aspx"&gt;Arquitetura&lt;/A&gt; &lt;BR&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/practices/default.aspx" target=_blank mce_href="http://msdn.microsoft.com/pt-br/practices/default.aspx"&gt;Patterns &amp;amp; Practices&lt;/A&gt; &lt;BR&gt;&lt;STRONG&gt;Desenvolvimento Enterprise &lt;BR&gt;&lt;/STRONG&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/sqlserver/default.aspx" target=_blank mce_href="http://msdn.microsoft.com/pt-br/sqlserver/default.aspx"&gt;SQL Server&lt;/A&gt; &lt;BR&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/security/default.aspx" target=_blank mce_href="http://msdn.microsoft.com/pt-br/security/default.aspx"&gt;Segurança&lt;/A&gt; &lt;BR&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/vsts2008/aa718795.aspx" target=_blank mce_href="http://msdn.microsoft.com/pt-br/vsts2008/aa718795.aspx"&gt;Microsoft Solutions Framework&lt;/A&gt; &lt;BR&gt;&lt;STRONG&gt;Desenvolvimento Office &lt;BR&gt;&lt;/STRONG&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/office/default.aspx" target=_blank mce_href="http://msdn.microsoft.com/pt-br/office/default.aspx"&gt;Office&lt;/A&gt; &lt;BR&gt;- &lt;A href="http://msdn.microsoft.com/pt-br/sharepoint/default.aspx" target=_blank mce_href="http://msdn.microsoft.com/pt-br/sharepoint/default.aspx"&gt;SharePoint&lt;/A&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Ao longo do tempo, o &lt;STRONG&gt;.NET Framework&lt;/STRONG&gt; também evoluiu…&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_10.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=320 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb_4.png" width=483 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb_4.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;E diversos arquitetos se perguntaram onde encontrar mais informações sobre toda essa evolução. A resposta foi dada abaixo:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/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=180 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb_1.png" width=244 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb_1.png"&gt;&lt;/A&gt; &lt;STRONG&gt;.NET Framework&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://msdn.microsoft.com/pt-br/netframework/default.aspx" target=_blank rel=nofollow mce_href="http://msdn.microsoft.com/pt-br/netframework/default.aspx"&gt;http://msdn.microsoft.com/pt-br/netframework/default.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Alguns tiveram um interesse maior sobre serviços e interfaces e como o &lt;STRONG&gt;WCF - Windows Communication Foundation &lt;/STRONG&gt;poderia ajudá-los… &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/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=70 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb_2.png" width=59 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb_2.png"&gt;&lt;/A&gt;&lt;STRONG&gt; WCF – Windows Communication Foundation – Media Center&lt;/STRONG&gt; &lt;BR&gt;&lt;A href="http://www.msdnbrasil.com.br/microsoft.MediaCenter/Default.aspx_x_CATEGORY_x_WCF.aspx" target=_blank rel=nofollow mce_href="http://www.msdnbrasil.com.br/microsoft.MediaCenter/Default.aspx_x_CATEGORY_x_WCF.aspx"&gt;http://www.msdnbrasil.com.br/microsoft.MediaCenter/Default.aspx_x_CATEGORY_x_WCF.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Outros se perguntaram sobre processos, workflows e máquinas de estado, lugares comuns para o &lt;STRONG&gt;WF - Windows Workflow Foundation&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_8.png"&gt;&lt;IMG title=image 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=67 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb_3.png" width=114 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb_3.png"&gt;&lt;/A&gt;&lt;STRONG&gt;WF – Windows Workflow Foundation&lt;/STRONG&gt; &lt;BR&gt;&lt;A href="http://www.msdnbrasil.com.br/microsoft.MediaCenter/Default.aspx_x_CATEGORY_x_Windows%20Workflow%20Foundation.aspx" target=_blank rel=nofollow mce_href="http://www.msdnbrasil.com.br/microsoft.MediaCenter/Default.aspx_x_CATEGORY_x_Windows%20Workflow%20Foundation.aspx"&gt;http://www.msdnbrasil.com.br/microsoft.MediaCenter/Default.aspx_x_CATEGORY_x_Windows%20Workflow%20Foundation.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Tudo em português!!! Artigos, webcasts, treinamentos, centros de estudo, um mundo de leitura gratuíto e disponível para todos!!!&lt;/P&gt;
&lt;P&gt;E para as interfaces desktop ou web? O &lt;STRONG&gt;WPF – Windows Presentation Foundation&lt;/STRONG&gt; também ganhou seu lugar:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_12.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_12.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=101 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb_5.png" width=79 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb_5.png"&gt;&lt;/A&gt;&lt;STRONG&gt; WPF – Windows Presentation Foundation &lt;BR&gt;&lt;/STRONG&gt;&lt;A href="http://www.msdnbrasil.com.br/microsoft.MediaCenter/Default.aspx_x_CATEGORY_x_WPF.aspx" target=_blank rel=nofollow mce_href="http://www.msdnbrasil.com.br/microsoft.MediaCenter/Default.aspx_x_CATEGORY_x_WPF.aspx"&gt;http://www.msdnbrasil.com.br/microsoft.MediaCenter/Default.aspx_x_CATEGORY_x_WPF.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;E para os mais exigentes, que buscam soluções sofisticadas, o &lt;STRONG&gt;WindowsClient.NET&lt;/STRONG&gt; também surgiu:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_14.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_14.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=58 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb_6.png" width=432 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb_6.png"&gt;&lt;/A&gt; &lt;BR&gt;Ref.: &lt;A href="http://windowsclient.net/default.aspx" target=_blank rel=nofollow mce_href="http://windowsclient.net/default.aspx"&gt;http://windowsclient.net/default.aspx&lt;/A&gt; (esse está em inglês!)&lt;/P&gt;
&lt;P&gt;Finalmente, arquitetos e equipes de desenvolvimento se perguntaram por onde começar. Como criar seu roadmap de capacitação e certificação e seguir os primeiros passos pelos vários caminhos da plataforma Microsoft? Eis que uma nova porta se abriu:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_16.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_16.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=180 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb_7.png" width=244 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb_7.png"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;STRONG&gt;Centro de Capacitação e Recursos para Certificação do MSDN &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://msdn.microsoft.com/pt-br/bb188199.aspx" target=_blank rel=nofollow mce_href="http://msdn.microsoft.com/pt-br/bb188199.aspx"&gt;http://msdn.microsoft.com/pt-br/bb188199.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;E o universo de estudos em constante expansão gerou mais uma fronteira chamada rampup…&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_18.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_18.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=184 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb_8.png" width=244 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb_8.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_20.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_20.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=78 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb_9.png" width=240 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/5df2938ed034_1063B/image_thumb_9.png"&gt;&lt;/A&gt; &lt;BR&gt;Ref.: &lt;A href="http://msdn.microsoft.com/pt-br/rampup/default(en-us).aspx" target=_blank rel=nofollow mce_href="http://msdn.microsoft.com/pt-br/rampup/default(en-us).aspx"&gt;http://msdn.microsoft.com/pt-br/rampup/default(en-us).aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Quem tem ouvidos para ouvir, ouça!!! ;)&lt;/P&gt;
&lt;P&gt;Feliz o &lt;STRONG&gt;arquiteto&lt;/STRONG&gt; e o &lt;STRONG&gt;desenvolvedor&lt;/STRONG&gt; que aproveitar cada material de estudo acima disponível, pois eis que o tempo chegou para a construção de soluções mais sofisticadas, compatíveis com o mundo de serviços, de interfaces RIA, de soluções compostas e aplicações na nuvem.&lt;/P&gt;
&lt;P&gt;Um abraço grande a todos e bom estudo!!!&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=9699975" 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/Leitura+Recomendada/default.aspx">Leitura Recomendada</category></item><item><title>Artigo: Uma introdução ao Software + Serviços, SaaS e SOA</title><link>http://blogs.msdn.com/wcamb/archive/2009/06/02/artigo-uma-introdu-o-ao-software-servi-os-saas-e-soa.aspx</link><pubDate>Tue, 02 Jun 2009 22:38:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9686654</guid><dc:creator>wcamb</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9686654.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9686654</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9686654</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Boas Novas: já está no ar meu novo artigo sobre &lt;EM&gt;SOA, SAAS &lt;/EM&gt;e&lt;EM&gt; Software + Services&lt;/EM&gt; no MSDN Brasil. Ele acabou de ser publicado e está disponível na URL abaixo:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Uma introdução ao Software + Serviços, SaaS e SOA &lt;BR&gt;&lt;/STRONG&gt;por Waldemir Cambiucci &lt;BR&gt;Maio de 2009 &lt;BR&gt;Ref.: &lt;A href="http://msdn.microsoft.com/pt-br/library/dd875466.aspx" target=_blank rel=nofollow mce_href="http://msdn.microsoft.com/pt-br/library/dd875466.aspx"&gt;http://msdn.microsoft.com/pt-br/library/dd875466.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Entre outros assuntos, o artigo trata os principais aspectos envolvidos na visão &lt;STRONG&gt;Software + Serviços&lt;/STRONG&gt;, usando como base os pilares abaixo:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ArtigoMSDNUmaintroduoaoSoftwareServiosSa_E994/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ArtigoMSDNUmaintroduoaoSoftwareServiosSa_E994/image_2.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=297 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ArtigoMSDNUmaintroduoaoSoftwareServiosSa_E994/image_thumb.png" width=502 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ArtigoMSDNUmaintroduoaoSoftwareServiosSa_E994/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Não deixe de conferir e fazer seus comentá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=9686654" 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/SaaS/default.aspx">SaaS</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Composite+Applications/default.aspx">Composite Applications</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/Leitura+Recomendada/default.aspx">Leitura Recomendada</category></item><item><title>Cloud Sequential Workflow : um template para workflows na nuvem</title><link>http://blogs.msdn.com/wcamb/archive/2009/05/06/cloud-sequential-workflow-um-template-para-workflows-na-nuvem.aspx</link><pubDate>Thu, 07 May 2009 02:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9592390</guid><dc:creator>wcamb</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9592390.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9592390</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9592390</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Semana passada, estive explorando o CTP de Março do Windows Azure e encontrei alguns templates bem interessantes. Entre os projetos disponíveis temos:&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Cloud Service/Web Cloud Services &lt;BR&gt;Cloud Service/Worker Cloud Services &lt;BR&gt;Cloud Service/Web and Worker Cloud Services &lt;BR&gt;Cloud Service/Roles/Cgi Web Role &lt;BR&gt;Cloud Service/Roles/Web Role &lt;BR&gt;Cloud Service/Roles/Worker Role &lt;BR&gt;CloudWorkflow/CloudSequentialWorkflow&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Um deles é especialmente indicado para a coordenação de chamadas a serviços na nuvem, o template “&lt;STRONG&gt;Cloud Sequential Workflow”.&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;Apenas para relembrar, o .NET Framework suporta dois tipos de workflows no &lt;EM&gt;Windows Workflow Foundation (WF)&lt;/EM&gt;, o &lt;STRONG&gt;Sequential Workflow&lt;/STRONG&gt; e o &lt;STRONG&gt;State Machine Workflow&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Templatesdo_D531/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Templatesdo_D531/image_6.png"&gt;&lt;IMG title=image 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=104 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Templatesdo_D531/image_thumb_2.png" width=112 align=right border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Templatesdo_D531/image_thumb_2.png"&gt;&lt;/A&gt; Um &lt;STRONG&gt;workflow sequencial&lt;/STRONG&gt; (ou &lt;STRONG&gt;Sequential Workflow&lt;/STRONG&gt;) pode ser entendido como um fluxo de trabalho previsível. Ou seja, sua execução pode ser feita através de condições, loops, delays, a partir de eventos disparados externamente mas no final, o workflow sequencial irá executar suas atividades, condições e regras sempre na sequência, avançando sempre para o final do fluxo e sua completude. Assim, o workflow está no controle do processo. Podemos usar esse tipo de workflow quando queremos implementar a tomada de decisoes dentro do próprio workflow, a partir dos shapes de condições, regras e atividades. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Templatesdo_D531/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Templatesdo_D531/image_10.png"&gt;&lt;IMG title=image style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN: 0px 10px 10px 0px; BORDER-RIGHT-WIDTH: 0px" height=107 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Templatesdo_D531/image_thumb_4.png" width=134 align=left border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Templatesdo_D531/image_thumb_4.png"&gt;&lt;/A&gt; Um &lt;STRONG&gt;workflow de máquina de estado&lt;/STRONG&gt; (ou &lt;STRONG&gt;State Machine Workflow&lt;/STRONG&gt;) é um workflow orientado a eventos. Isto significa que o workflow de máquina de estado depende de eventos externos para determinar sua completude ou término. Não temos uma ordem predeterminada de estados executados. Podemos definir os estados possíveis do workflow, assim como as transições possíveis entre seus estados. O workflow irá sempre de um estado para outro, esperando por novos eventos para determinar o próximo estado de transição. Geralmente, as decisões que determinam o estado do workflow acontecem fora do workflow. A máquina de estado define assim a estrutura do workflo, mas o controle reside fora do próprio workflow. Podemos usar um workflow de máquina de estado quando o processo de decisão ocorre fora do workflow, em eventos externos. &lt;/P&gt;
&lt;P&gt;Já vimos aqui no blog que o &lt;STRONG&gt;.NET Services&lt;/STRONG&gt; do &lt;STRONG&gt;Azure Services Platform&lt;/STRONG&gt; possui o &lt;STRONG&gt;Workflow Services&lt;/STRONG&gt;, um conjunto de capacidades que permite a hospedagem de workflows do tipo sequencial na nuvem. Veja mais &lt;A href="http://blogs.msdn.com/wcamb/archive/2009/01/22/azure-services-platform-falando-sobre-servi-os-e-workflows-na-nuvem.aspx" target=_blank mce_href="http://blogs.msdn.com/wcamb/archive/2009/01/22/azure-services-platform-falando-sobre-servi-os-e-workflows-na-nuvem.aspx"&gt;aqui&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Através do template “&lt;STRONG&gt;Cloud Sequential Workflow”&lt;/STRONG&gt; podemos construir workflows do tipo sequencial, coordenando o recebimento de chamadas e envio de mensagens para o &lt;STRONG&gt;.NET Services / Service Bus&lt;/STRONG&gt;, consumindo os serviços publicados ali. Esse tipo de coordenação torna-se muito interessante quando pensamos na integração de sistemas que usam a nuvem como ponto central, orquestrando mensagens entre serviços. Veja mais sobre esse tipo de cenário no projeto &lt;STRONG&gt;MEBA – Multi-Enterprise Business Application&lt;/STRONG&gt; da Microsoft, &lt;A href="http://blogs.msdn.com/wcamb/archive/2008/11/28/meba-multi-enterprise-business-application.aspx" target=_blank mce_href="http://blogs.msdn.com/wcamb/archive/2008/11/28/meba-multi-enterprise-business-application.aspx"&gt;aqui&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Um exemplo de workflow recebendo uma mensagens via http e fazendo a troca de mensagens com serviços no &lt;STRONG&gt;Service Bus&lt;/STRONG&gt; é ilustrado a seguir:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Templatesdo_D531/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Templatesdo_D531/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=425 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Templatesdo_D531/image_thumb_1.png" width=349 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Templatesdo_D531/image_thumb_1.png"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;Para a construção de workflows como esse, o &lt;STRONG&gt;Microsoft .NET Services SDK (March 2009 CTP)&lt;/STRONG&gt; oferece uma série de shapes novos que são colocados na Toolbox do Visual Studio 2008, como vemos abaixo:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Templatesdo_D531/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Templatesdo_D531/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=383 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Templatesdo_D531/image_thumb.png" width=268 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Templatesdo_D531/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Entre os principais shapes, destacamos o &lt;STRONG&gt;CloudServiceBusSend&lt;/STRONG&gt; e o &lt;STRONG&gt;CloudServiceBusReceive&lt;/STRONG&gt;, que permitem a comunicação com serviços publicados no Service Bus.&lt;/P&gt;
&lt;P&gt;Ainda, podemos controlar a sequência de execução através de shapes como &lt;STRONG&gt;IfElse, blocos de sequencia Sequence, Suspend, Terminate&lt;/STRONG&gt; e &lt;STRONG&gt;While&lt;/STRONG&gt;, para loops e controles de iterações.&lt;/P&gt;
&lt;P&gt;Para iniciar seus experimentos, comece instalando o SDK do .NET Services, abaixo:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Microsoft .NET Services SDK (March 2009 CTP) &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8d1d1d5e-1332-4186-b33f-26d053759e49&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8d1d1d5e-1332-4186-b33f-26d053759e49&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=8d1d1d5e-1332-4186-b33f-26d053759e49&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Confira também o blog do time:&lt;/P&gt;
&lt;P&gt;Ref.: &lt;A title=http://blogs.msdn.com/netservices/ href="http://blogs.msdn.com/netservices/" rel=nofollow mce_href="http://blogs.msdn.com/netservices/"&gt;http://blogs.msdn.com/netservices/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;E os artigos (em inglês) a seguir: &lt;/P&gt;
&lt;P&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/info.aspx?na=46&amp;amp;p=1&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=5057e2b3-c8e5-4b26-a601-ff9621589ce3&amp;amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f9%2f0%2fA%2f90AE8BDF-F611-4808-986B-43DC7C7D7B25%2fIntroduction+to+Microsoft+.NET+Services.docx&amp;amp;oRef=http%3a%2f%2fwww.microsoft.com%2fdownloads%2fresults.aspx%3fNextOrPrevClause%3d2%7c%2b1647%26DisplayLang%3den%26freetext%3d.net%2bservices%26sortCriteria%3dpopularity%26sortOrder%3dascending%26nr%3d20" target=_blank rel=nofollow&gt;An Introduction to Microsoft .NET Services for Developers&lt;/A&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/info.aspx?na=46&amp;amp;p=3&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=5057e2b3-c8e5-4b26-a601-ff9621589ce3&amp;amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f9%2f0%2fA%2f90AE8BDF-F611-4808-986B-43DC7C7D7B25%2fMicrosoft+.NET+Service+Bus.docx&amp;amp;oRef=http%3a%2f%2fwww.microsoft.com%2fdownloads%2fresults.aspx%3fNextOrPrevClause%3d2%7c%2b1647%26DisplayLang%3den%26freetext%3d.net%2bservices%26sortCriteria%3dpopularity%26sortOrder%3dascending%26nr%3d20" target=_blank rel=nofollow mce_href="http://www.microsoft.com/downloads/info.aspx?na=46&amp;amp;p=3&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=5057e2b3-c8e5-4b26-a601-ff9621589ce3&amp;amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f9%2f0%2fA%2f90AE8BDF-F611-4808-986B-43DC7C7D7B25%2fMicrosoft+.NET+Service+Bus.docx&amp;amp;oRef=http%3a%2f%2fwww.microsoft.com%2fdownloads%2fresults.aspx%3fNextOrPrevClause%3d2%7c%2b1647%26DisplayLang%3den%26freetext%3d.net%2bservices%26sortCriteria%3dpopularity%26sortOrder%3dascending%26nr%3d20"&gt;A Developer’s Guide to the Microsoft® .NET Service Bus&lt;/A&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/info.aspx?na=46&amp;amp;p=2&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=5057e2b3-c8e5-4b26-a601-ff9621589ce3&amp;amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f9%2f0%2fA%2f90AE8BDF-F611-4808-986B-43DC7C7D7B25%2fMicrosoft+.NET+Access+Control+Service.docx&amp;amp;oRef=http%3a%2f%2fwww.microsoft.com%2fdownloads%2fresults.aspx%3fNextOrPrevClause%3d2%7c%2b1647%26DisplayLang%3den%26freetext%3d.net%2bservices%26sortCriteria%3dpopularity%26sortOrder%3dascending%26nr%3d20" target=_blank rel=nofollow mce_href="http://www.microsoft.com/downloads/info.aspx?na=46&amp;amp;p=2&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=5057e2b3-c8e5-4b26-a601-ff9621589ce3&amp;amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f9%2f0%2fA%2f90AE8BDF-F611-4808-986B-43DC7C7D7B25%2fMicrosoft+.NET+Access+Control+Service.docx&amp;amp;oRef=http%3a%2f%2fwww.microsoft.com%2fdownloads%2fresults.aspx%3fNextOrPrevClause%3d2%7c%2b1647%26DisplayLang%3den%26freetext%3d.net%2bservices%26sortCriteria%3dpopularity%26sortOrder%3dascending%26nr%3d20"&gt;A Developer’s Guide to the Microsoft® .NET Access Control Service&lt;/A&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/info.aspx?na=46&amp;amp;p=4&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=5057e2b3-c8e5-4b26-a601-ff9621589ce3&amp;amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f9%2f0%2fA%2f90AE8BDF-F611-4808-986B-43DC7C7D7B25%2fMicrosoft+.NET+Workflow+Service.docx&amp;amp;oRef=http%3a%2f%2fwww.microsoft.com%2fdownloads%2fresults.aspx%3fNextOrPrevClause%3d2%7c%2b1647%26DisplayLang%3den%26freetext%3d.net%2bservices%26sortCriteria%3dpopularity%26sortOrder%3dascending%26nr%3d20" target=_blank rel=nofollow mce_href="http://www.microsoft.com/downloads/info.aspx?na=46&amp;amp;p=4&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=5057e2b3-c8e5-4b26-a601-ff9621589ce3&amp;amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f9%2f0%2fA%2f90AE8BDF-F611-4808-986B-43DC7C7D7B25%2fMicrosoft+.NET+Workflow+Service.docx&amp;amp;oRef=http%3a%2f%2fwww.microsoft.com%2fdownloads%2fresults.aspx%3fNextOrPrevClause%3d2%7c%2b1647%26DisplayLang%3den%26freetext%3d.net%2bservices%26sortCriteria%3dpopularity%26sortOrder%3dascending%26nr%3d20"&gt;A Developer’s Guide to the Microsoft® .NET Workflow Service&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Esse post foi só uma visão rápida sobre o assunto. Em posts futuros, vamos falar mais desse template de workflows na nuvem e alguns exemplos mais interessantes. Aguardem!&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=9592390" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/WF/default.aspx">WF</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/Azure+Services+Platform/default.aspx">Azure Services Platform</category></item><item><title>Webcast sobre WCF + WF : integrando serviços e workflows</title><link>http://blogs.msdn.com/wcamb/archive/2009/04/17/webcast-sobre-wcf-wf-integrando-servi-os-e-workflows.aspx</link><pubDate>Fri, 17 Apr 2009 19:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9554427</guid><dc:creator>wcamb</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9554427.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9554427</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9554427</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Já está no ar um webcast sobre &lt;STRONG&gt;WCF+WF&lt;/STRONG&gt;, que fiz recentemente para o pessoal do &lt;A href="http://msdn.microsoft.com/pt-br/netframework/default.aspx" target=_blank rel=nofollow mce_href="http://msdn.microsoft.com/pt-br/netframework/default.aspx"&gt;Dev Center de .NET Framework&lt;/A&gt;, no MSDN.&lt;/P&gt;
&lt;P&gt;Esse webcast fala sobre alguns templates de WCF e WF, destacando também os mecanismos de integração entre serviços e workflows, vale conferir:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebcastsobreWCFWFintegrandoserviosework_C392/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebcastsobreWCFWFintegrandoserviosework_C392/image_2.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=184 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebcastsobreWCFWFintegrandoserviosework_C392/image_thumb.png" width=244 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebcastsobreWCFWFintegrandoserviosework_C392/image_thumb.png"&gt;&lt;/A&gt; &lt;A href="http://download.microsoft.com/download/B/6/7/B6790106-5A1F-452F-952C-616D604C67E2/WEBCAST_WCFWF_20090329.zip" target=_blank rel=nofollow mce_href="http://download.microsoft.com/download/B/6/7/B6790106-5A1F-452F-952C-616D604C67E2/WEBCAST_WCFWF_20090329.zip"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=93 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebcastsobreWCFWFintegrandoserviosework_C392/image_5.png" width=240 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebcastsobreWCFWFintegrandoserviosework_C392/image_5.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Ref.: &lt;A title=http://download.microsoft.com/download/B/6/7/B6790106-5A1F-452F-952C-616D604C67E2/WEBCAST_WCFWF_20090329.zip href="http://download.microsoft.com/download/B/6/7/B6790106-5A1F-452F-952C-616D604C67E2/WEBCAST_WCFWF_20090329.zip" target=_blank rel=nofollow mce_href="http://download.microsoft.com/download/B/6/7/B6790106-5A1F-452F-952C-616D604C67E2/WEBCAST_WCFWF_20090329.zip"&gt;http://download.microsoft.com/download/B/6/7/B6790106-5A1F-452F-952C-616D604C67E2/WEBCAST_WCFWF_20090329.zip&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=9554427" width="1" height="1"&gt;</description><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></item><item><title>Sequential Workflow Service Library : integrando serviços WCF com workflows WF no .NET 3.5</title><link>http://blogs.msdn.com/wcamb/archive/2009/03/17/sequential-workflow-service-library-integrando-servi-os-wcf-com-workflows-wf-no-net-3-5.aspx</link><pubDate>Wed, 18 Mar 2009 01:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9484965</guid><dc:creator>wcamb</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9484965.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9484965</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9484965</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Em breve teremos a chegada do &lt;STRONG&gt;.NET 4.0,&lt;/STRONG&gt; com uma série de inovações e melhorias em seus recursos. Entre os benefícios, a dupla &lt;STRONG&gt;WCF (Windows Communication Foundation)&lt;/STRONG&gt; e &lt;STRONG&gt;WF (Windows Workflow Foundation)&lt;/STRONG&gt; promete maior integração e aderência ao modelo híbrido de programação enterprise/cloud (local e nuvem).&lt;/P&gt;
&lt;P&gt;Um desenho conhecido aparece abaixo, onde nosso workflow encapsula chamadas para outros serviços externos, enquanto ele mesmo é exportado como um serviço, para outros participantes da solução. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_2.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=211 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_thumb.png" width=422 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_thumb.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Esse tipo de cenário é bem interessante para arquiteturas de serviços, onde pequenas orquestrações podem coordenar chamadas diversas para serviços da infra-estrutura. Assim, desenhos como esse abaixo são comuns em muitas empresas:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_4.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=365 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_thumb_1.png" width=503 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Com o &lt;STRONG&gt;.NET 3.0&lt;/STRONG&gt; era possível o consumo de serviços a partir de workflows em WF somente através de interfaces &lt;STRONG&gt;Web Services&lt;/STRONG&gt;. Esse tipo de interação era obtida com os shapes de invocação e tratamento de Web Services, como o &lt;STRONG&gt;InvokeWebService, WebServiceInput, WebServiceOutput&lt;/STRONG&gt; e &lt;STRONG&gt;WebServiceFault&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_6.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; MARGIN: 0px 0px 10px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=148 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_thumb_2.png" width=165 align=right border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Com o .NET 3.5, a integração WCF + WF aumentou, com templates interessantes como o &lt;STRONG&gt;Sequential Workflow Service Library&lt;/STRONG&gt;, objeto deste post. &lt;/P&gt;
&lt;P&gt;Nesses últimos dias, tenhos conversado com muitas empresas que têm perguntado sobre essa integração entre interfaces de serviços e workflows em soluções para diversos cenários.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Como criar um SERVIÇO como um WORKFLOW?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Para a criação de um serviços como workflow, o .NET 3.5 oferece o template &lt;STRONG&gt;Sequential Workflow Service Library&lt;/STRONG&gt;, que oferece uma interface de publicação WCF para um workflow WF. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_8.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=349 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_thumb_3.png" width=505 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Através deste template, temos a disposição todos os shapes e recursos do WF para a coordenação de atividades e chamadas para outros serviços ou mesmo outros workflows da solução. Ao mesmo tempo, esse workflow implementa uma interface &lt;STRONG&gt;IWorkflow&lt;/STRONG&gt;, que exporta um contrato de serviço, permitindo que aplicações clientes disparem mensagens para consumo. No template, a interface IWorkflow implementa um método &lt;STRONG&gt;GetData(..)&lt;/STRONG&gt; exemplo, o mesmo implementado pelo template de &lt;STRONG&gt;WCF Service Library&lt;/STRONG&gt;. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_10.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; MARGIN: 0px 10px 10px 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=196 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_thumb_4.png" width=173 align=left border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_thumb_4.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;A figura ao lado ilustra o template &lt;STRONG&gt;Sequential Workflow Service Library&lt;/STRONG&gt; como oferecido pelo Visual Studio e o .NET 3.5. &lt;/P&gt;
&lt;P&gt;Podemos adicionar novas interfaces de serviços através da adição de novos contratos de operação ou mesmo contratos de dados na interface IWorkflow, conforme a necessidade.&lt;/P&gt;
&lt;P&gt;Ao mesmo tempo, podemos adicionar novos shapes de WF ao workflow, para o tratamento dos valores de entrada e execução da lógica de negócio desejada, preparando o valor de retorno do serviço. &lt;/P&gt;
&lt;P&gt;Um exemplo de serviço WCF implementado como um WF é dado a seguir, veja:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_14.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_14.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=519 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_thumb_6.png" width=372 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_thumb_6.png"&gt;&lt;/A&gt;Arquivo: workflow1.cs&lt;/P&gt;
&lt;P&gt;No serviço acima, temos uma primeira atividade &lt;STRONG&gt;codeActivity1&lt;/STRONG&gt; que recebe o valor de entrada do serviço na variável &lt;STRONG&gt;InputValue&lt;/STRONG&gt;. Os argumentos de entrada (&lt;STRONG&gt;InputValue&lt;/STRONG&gt;) e saída (&lt;STRONG&gt;ReturnValue&lt;/STRONG&gt;) do serviço são de fato oferecidos pelo template, como vemos a seguir:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_20.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_20.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=242 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_thumb_9.png" width=326 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_thumb_9.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;No exemplo acima, o valor &lt;STRONG&gt;InputValue&lt;/STRONG&gt; é colocado na propriedade &lt;STRONG&gt;myCond&lt;/STRONG&gt;, que é testada na condição do shape &lt;STRONG&gt;ifElseActivity1&lt;/STRONG&gt;. Para teste, foi criada uma cláusula declarativa de condição &lt;STRONG&gt;myCond&lt;/STRONG&gt;, que verifica se o valor de &lt;STRONG&gt;myCond&lt;/STRONG&gt; é igual a 0. Se for, a atividade &lt;STRONG&gt;codeActivity2&lt;/STRONG&gt; é executada, caso contrário, a atividade &lt;STRONG&gt;codeActivity3&lt;/STRONG&gt; é executada. No final, &lt;STRONG&gt;codeActivity4&lt;/STRONG&gt; adiciona uma string na mensagem de retorno do serviço, que feito através da propriedade &lt;STRONG&gt;ReturnValue&lt;/STRONG&gt; do serviço. &lt;/P&gt;
&lt;P&gt;O código completo deste serviço é dado a seguir:&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.Workflow.Activities;&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;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;   4:&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;namespace&lt;/SPAN&gt; myWorkflowService&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: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;sealed&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;partial&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt; Workflow1 : SequentialWorkflowActivity&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;         &lt;SPAN style="COLOR: #008000"&gt;// Minha variável interna para teste de condição no workflow.&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; &lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt; myCond = 0;&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;         &lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; Workflow1()&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;             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;  14:&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;// These variables are bound to the input and output parameters of the ReceiveActivity.&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;private&lt;/SPAN&gt; String returnValue;&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;SPAN style="COLOR: #0000ff"&gt;private&lt;/SPAN&gt; Int32 inputValue;&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;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;  20:&lt;/SPAN&gt;         &lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; Int32 InputValue&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;/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;             get { &lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt; inputValue; }&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;             set { inputValue = &lt;SPAN style="COLOR: #0000ff"&gt;value&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;  24:&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;&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;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; ReturnValue&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;             get { &lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt; returnValue; }&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;             set { returnValue = &lt;SPAN style="COLOR: #0000ff"&gt;value&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;         }&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;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; codeActivity1_ExecuteCode(&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;  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;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;.myCond = InputValue;&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;/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;&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;  37:&lt;/SPAN&gt;         &lt;SPAN style="COLOR: #0000ff"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; codeActivity2_ExecuteCode(&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: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  38:&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;  39:&lt;/SPAN&gt;             ReturnValue = &lt;SPAN style="COLOR: #006080"&gt;"passei pelo IF"&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;/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;&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;  42:&lt;/SPAN&gt;         &lt;SPAN style="COLOR: #0000ff"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; codeActivity3_ExecuteCode(&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;  43:&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;  44:&lt;/SPAN&gt;             ReturnValue = &lt;SPAN style="COLOR: #006080"&gt;"passei pelo 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;  45:&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;  46:&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;  47:&lt;/SPAN&gt;         &lt;SPAN style="COLOR: #0000ff"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; codeActivity4_ExecuteCode(&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: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  48:&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;  49:&lt;/SPAN&gt;             ReturnValue = ReturnValue + &lt;SPAN style="COLOR: #006080"&gt;" - Fim!"&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;  50:&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;  51:&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;  52:&lt;/SPAN&gt; }&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;Para testes, podemos usar o&lt;STRONG&gt; WCF Test Client&lt;/STRONG&gt; do Visual Studio para exercitar chamadas ao serviço, alterando os valores de entrada do método &lt;STRONG&gt;GetData&lt;/STRONG&gt;, como vemos abaixo:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_16.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_16.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=346 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_thumb_7.png" width=532 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/9db10e8e5e7f_AEF1/image_thumb_7.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Desse modo, vimos um bom exemplo de template que pode ser usado em nossas aplicações e soluções envolvendo os conceitos de interfaces de serviços e workflows, integrando os recursos do WCF e do WF no .NET 3.5.&lt;/P&gt;
&lt;P&gt;Em posts futuros, vamos falar um pouco mais sobre a integração WCF+WF no&lt;STRONG&gt; .NET 4.0&lt;/STRONG&gt; e as novidades que estarão chegando, fiquem ligados!&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=9484965" 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/WF/default.aspx">WF</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/WCF/default.aspx">WCF</category></item><item><title>Interoperabilidade e Comunicação na plataforma Microsoft : o que e quando usar?</title><link>http://blogs.msdn.com/wcamb/archive/2009/02/11/interoperabilidade-e-comunica-o-na-plataforma-microsoft-o-que-e-quando-usar.aspx</link><pubDate>Wed, 11 Feb 2009 20:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9413099</guid><dc:creator>wcamb</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9413099.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9413099</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9413099</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;No post anterior vimos que a interoperabilidade na plataforma Microsoft pode ser organizada em 3 níveis básicos de complexidade: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Interop in the Framework&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Interop in the Box&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Interop in the Cloud&lt;/FONT&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Os recursos assim agrupados permitem um melhor entendimento das necessidades de cada solução, seja através da customização com WCF, WF, seja via um motor de mensageria e transformação com o BizTalk Server ou um barramento de mensanges com o ESB Guidance, ou até mesmo um modelo de integração entre empresas através da nuvem, no chamado ISB - Internet Service Bus, como .NET Services do Azure.&lt;/P&gt;
&lt;P&gt;Falamos também de 4 componentes importantes para a interoperabilidade no ambiente enterprise (local). Vejamos:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;O que usar?&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;FONT color=#000080&gt;Microsoft® BizTalk® Server (BTS)&lt;/FONT&gt; :&lt;/STRONG&gt; BizTalk oferece uma pilha ampla de adaptadores, orquestração, mensageria e protocolos para a construção de soluções preparadas para EAI - Enterprise Application Integration. Através de ferramentas de mapeamento de mensagens, manipulação de schemas, transformação, monitoração e regras de negócio, o ambiente BTS permite a construção de soluções de mensageria em cenários de elevado volume de mensagens e vazão; &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;FONT color=#000080&gt;Microsoft Host Integration Server (HIS)&lt;/FONT&gt; :&lt;/STRONG&gt; HIS oferece uma plataforma para a conectar aplicações com sistemas da plataforma IBM zSeries e iSeries. Ainda, HIS suporta a conexão de dados entre Microsoft Message Queuing (MSMQ) e o IBM WebSphere MQ; &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;FONT color=#000080&gt;Microsoft Message Queuing (MSMQ)&lt;/FONT&gt; :&lt;/STRONG&gt; o MSMQ permite a conexão de entre aplicações usando um modelo de fila de mensagens. MSMQ oferece a garantia de entrega de mensagens, mensagens baseadas em prioridades e segurança. Ele suporta a integração com sistemas parcialmente conectados ou temporariamente offline. MSQM também suporta cenários de mensageria síncrona e assíncrona; &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;FONT color=#000080&gt;Microsoft Enterprise Service Bus (ESB) Guidance&lt;/FONT&gt; :&lt;/STRONG&gt; o ESB Guidance é uma unidade lógica que oferece uma arquitetura desacoplada baseada em mensagens, usando para isso a infra-estrutura do BizTalk Server. O ESB Guidance é na verdade um conjunto de templates e patterns que extendem as funcionalidades do BTS, adicionando características como roteamento de mensagens, repositório de serviços, garantia de entrega, segurança de mensagens, registro de serviços e tratamento unificado de exceções;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Cada uma das tecnologias acima aplica patterns de arquitetura importantes para diversos cenários de integração em TI. Porém, cada cenário exige uma tecnologia mais adequada que a outra. Adotar um modelo síncrono de mensageria quando nossa solução permite cenários parcialmente conectado pode ser desastraso, por exemplo. Então, surge a pergunta:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Quando usar?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Considere o uso de &lt;STRONG&gt;BizTalk Server&lt;/STRONG&gt; quando:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;quando a solução interage com múltiplos web services via uma orquestração, como parte de uma arquitetura orientada a serviços (SOA), suportando as latências de I/O devido a transformação de mensagens, persistência de mensagens para tracing ou latência devido subscrição/distribuição de mensagens;&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;quando a solução deseja suportar processos business-to-business (B2B), incluindo padrões de indústria como &lt;STRONG&gt;EDIFACT, ANSCI X12, HL7, HIPAA&lt;/STRONG&gt;, or &lt;STRONG&gt;SWIFT&lt;/STRONG&gt;.&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;quando a solução exige a execução de serviços em paralelo, com mecanismos facilitadores para esse tipo de orquestração e sincronização entre processos;&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;quando a solução exige alta confiabilidade e infra-estrutura dedicada para escalabilidade, com garantia de entrega e recuperação de mensagens;&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;quando a solução necessita medir &lt;STRONG&gt;KPI's - Key Performance Indicators&lt;/STRONG&gt; de negócio, através de um motor de análise como &lt;STRONG&gt;BAM - Business Analysis Manager&lt;/STRONG&gt;, que deve fornecer uma visibilidade em tempo real sobre os dados processados pela solução;&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;quando a solução deseja abstrair a lógica de negócios e aplicações através de políticas, que podem ser alteradas de acordo com as necessidades de negócio da solução;&lt;/FONT&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Considere o uso de &lt;STRONG&gt;Host Integration&lt;/STRONG&gt; Server quando:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;quando a solução precisa suportar interação com aplicações IBM zSeries ou iSeries;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;quando a solução deve integrar BizTalk com DB2, WebSphere MQ, Aplicações Host (em plataforma alta) ou servidores de arquivos;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;quando a solução deve integrar mensageria MSMQ com WebSphere MQ;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Considere o uso de &lt;STRONG&gt;Message Queuing&lt;/STRONG&gt; quando:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;quando a solução deve suportar interação entre aplicações baseada em mensagens;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;quando a solução precisa integrar plataformas Microsoft e Não-Microsoft, suportando a conversação assíncrona;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;quando a solução precisa suportar conversação SRMP - SOAP Reliable Messaging Protocol entre as aplicações envolvidas;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Considere o uso de &lt;STRONG&gt;Enterprise Service Bus Guidance&lt;/STRONG&gt; quando:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;quando a solução necessita suportar a abordagem de mensageria com itinerário de mensagens ou roteamento entre sistemas envolvidos;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;quando a solução deve suportar a resolução dinâmica de roteamento de mensagens;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;quando a solução deve usar transformação de mensagens dinâmicamente;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;quando a solução deve suportar um gerenciamento de exceções de forma unificada e robusta, para a integração de sistemas EAI;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;quando a solução necessita de uma abordagem de repositóio de serviços, para publicação de funcionalidades envolvidas;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;O mapa acima é uma relação parcial de benefícios ou aspectos de arquitetura que justificam cada tecnologia para uma dada solução. Claro, para alguns cenários, podemos abrir mão dos pacotes acima e simplesmente implementar nossos próprios componentes de integração, interoperabilidade ou orquestração usando frameworks como o &lt;STRONG&gt;WCF - Windows Communication Foundation &lt;/STRONG&gt;e o &lt;STRONG&gt;WF - Windows Workflow Foundation&lt;/STRONG&gt;, sempre considerando o esforço de nosso próprio desenvolvimento.&lt;/P&gt;
&lt;P&gt;No final, podemos construir uma &lt;STRONG&gt;matriz de decisão&lt;/STRONG&gt;, que pode nos ajudar no momento de análilse de uma solução e as tecnologias mais indicadas. Fica a dica para ampliar esse estudo e detalhamento destacando os aspectos mais importantes para sua própria solução.&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=9413099" 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/ESB/default.aspx">ESB</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/Azure+Services+Platform/default.aspx">Azure Services Platform</category></item><item><title>Cenários de implementação de serviços com WCF - Parte 6 : Serviços para Workflow</title><link>http://blogs.msdn.com/wcamb/archive/2008/07/17/cen-rios-de-implementa-o-de-servi-os-com-wcf-parte-6-servi-os-para-workflow.aspx</link><pubDate>Thu, 17 Jul 2008 23:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8744942</guid><dc:creator>wcamb</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/8744942.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=8744942</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=8744942</wfw:comment><description>&lt;P&gt;&lt;FONT size=4&gt;&lt;STRONG&gt;Serviços para Workflow&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Mais um cenário, importante na discussão sobre orquestração, coordenação de processos e fluxos de trabalho: serviços para workflows.&lt;/P&gt;
&lt;P&gt;Em arquiteturas orientadas a serviços, é comum o uso de serviços de negócios que encapsulam um série de funcionalidades, disponibilizando esses recursos através de um firewall (em intranets) ou diretamente para clientes na internet. Como benefícios dessa publicação temos um melhor reuso, manutenção, isolação, tolerância a falhas, distribuição e escalabilidade.&lt;/P&gt;
&lt;P&gt;Interfaces WCF tornam esse encapsulamento mais fácil, através da definição clara de contratos de mensagens e questões sobre o transporte e segurança. Porém, não temos uma definição sobre a ordem das chamadas ou execução desses serviços dentro da aplicação. Com o .NET 3.0 foi introduzido também o &lt;STRONG&gt;WF - Windows Workflow Foundation&lt;/STRONG&gt;, que oferece mecanismos para a construção de workflows e pode ser hosteado em aplicações Windows. Com o uso de workflows ou fluxos de trabalhos, é possível coordenadar as atividades de negócio e requisições de serviços, sendo o método ideal para organizar chamadas para serviços WCF em processos de longa duração.&lt;/P&gt;
&lt;P&gt;O .NET 3.5 trouxe novas funcionalidades e entre elas, uma maior facilidade para o consumo de serviços WCF a partir de fluxos de trabalho em WF. Isso tornou a integração &lt;STRONG&gt;WCF + WF&lt;/STRONG&gt; muito mais direta e de fácial programação. Também com o .NET 3.5 temos o recurso de &lt;STRONG&gt;serviços duráveis&lt;/STRONG&gt;, onde o estado de uma instância de serviço é automaticamente salvo entre chamadas. Isso torna possível a re-hidratação de uma mesma instância de serviço em diferentes máquinas.&lt;/P&gt;
&lt;P&gt;A figura a seguir ilustra uma integração WF / WCF, onde um fluxo de trabalho consome uma funcionalidade exportado por um serviços WCF:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/CenriosdeimplementaodeservioscomWCFPart_10068/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/CenriosdeimplementaodeservioscomWCFPart_10068/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=292 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/CenriosdeimplementaodeservioscomWCFPart_10068/image_thumb.png" width=489 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/CenriosdeimplementaodeservioscomWCFPart_10068/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Podemos publicar um workflow em qualquer tipo de aplicações Windows. Alguns exemplos de implementação são: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;Uma aplicações cliente Windows que oferece um workflow que coordena chamadas para serviços WCF remotos, publicados no IIS, WAS ou um Windows NT Service; &lt;BR&gt;&lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;Uma aplicação ASP.NET que inicia um workflow para coordenar chamadas para serviços WCF remotos publicados em Windows NT Services atrás do firewall de um intranet.&lt;/EM&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Um video interessante sobre exportação de WF como services WCF é encontrado aqui:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Building WCF Services Using Workflow Foundation &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://www.microsoft.com/uk/msdn/nuggets/nugget/285/wf-v35-building-wcf-services-using-workflow-foundation.aspx" mce_href="http://www.microsoft.com/uk/msdn/nuggets/nugget/285/wf-v35-building-wcf-services-using-workflow-foundation.aspx"&gt;http://www.microsoft.com/uk/msdn/nuggets/nugget/285/wf-v35-building-wcf-services-using-workflow-foundation.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Para finalizar, outro cenário típico para a aplicação de workflows é a aprovação e geração de documentos. Um artigo que ilustra bem esse exemplo é dado a seguir:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Crie fluxos de trabalho para obter dados e criar documentos&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://msdn.microsoft.com/pt-br/magazine/cc534981.aspx" mce_href="http://msdn.microsoft.com/pt-br/magazine/cc534981.aspx"&gt;http://msdn.microsoft.com/pt-br/magazine/cc534981.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Nesses últimos dias, passamos pelas principais características de cada cenário, comuns em ambientes corporativos e soluções de negócio.&lt;/P&gt;
&lt;P&gt;Aproveito para agradecer ao amigo &lt;STRONG&gt;&lt;A href="http://blogs.msdn.com/rogerioc/" target=_blank mce_href="http://blogs.msdn.com/rogerioc/"&gt;Rogério Cordeiro&lt;/A&gt;&lt;/STRONG&gt;, pelas discussões e questões levantadas até aqui. Em breve, vamos ter algumas surpresas como resultado dessas discussõ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;P&gt;&lt;IMG src="http://www.wboton.com/modules/technorati/technobubble.gif" mce_src="http://www.wboton.com/modules/technorati/technobubble.gif"&gt;&lt;STRONG&gt;Technorati Tags:&lt;/STRONG&gt;&amp;nbsp;&lt;A href="http://technorati.com/tag/soa" mce_href="http://technorati.com/tag/soa"&gt;&lt;STRONG&gt;&lt;FONT color=#ff8000&gt;SOA&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;&lt;STRONG&gt;&lt;FONT color=#ff8000&gt;,&lt;/FONT&gt;&lt;/STRONG&gt;&lt;A href="http://technorati.com/tag/wcf" mce_href="http://technorati.com/tag/wcf"&gt;&lt;STRONG&gt;&lt;FONT color=#ff8000&gt;WCF&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;&lt;STRONG&gt;&lt;FONT color=#ff8000&gt;,&lt;/FONT&gt;&lt;/STRONG&gt;&lt;A href="http://technorati.com/tag/services" mce_href="http://technorati.com/tag/services"&gt;&lt;STRONG&gt;&lt;FONT color=#ff8000&gt;Services&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;,&lt;A href="http://technorati.com/tag/workflow" target=_blank mce_href="http://technorati.com/tag/workflow"&gt;&lt;STRONG&gt;&lt;FONT color=#ff8000&gt;Workflow&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8744942" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/WF/default.aspx">WF</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Cen_26002300_225_3B00_rios+de+servi_26002300_231_3B00_os+WCF/default.aspx">Cen&amp;#225;rios de servi&amp;#231;os WCF</category></item><item><title>Do Windows DNA para o mundo orientado a serviços : uma proposta para estudo.</title><link>http://blogs.msdn.com/wcamb/archive/2008/04/18/do-windows-dna-para-o-mundo-orientado-a-servi-os-alguns-exemplos-de-evolu-o.aspx</link><pubDate>Fri, 18 Apr 2008 14:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8407543</guid><dc:creator>wcamb</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/8407543.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=8407543</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=8407543</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;No último post, começamos nosso papo sobre evolução de uma arquitetura &lt;STRONG&gt;WinDNA&lt;/STRONG&gt; para uma plataforma mais atual. Vimos que antes de tudo, precisamos ter uma visão clara sobre os cenários envolvidos, assim como conhecer as novas tecnologias oferecidas pelo mercado. Nesse aspecto, novos frameworks estão disponíveis na plataforma Microsoft e cabe a nós, arquitetos, conhecê-los e exercitá-los, afim de melhor decidir sobre cada alternativa de evolução para nossas aplicações.&lt;/P&gt;
&lt;P&gt;Considerando a disposição de componentes na plataforma &lt;STRONG&gt;WinDNA&lt;/STRONG&gt;, podemos estudar uma alternativa de solução, conforme a figura a seguir:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DoWindowsDNAparaomundoorientadoaservios_10BB6/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DoWindowsDNAparaomundoorientadoaservios_10BB6/image_8.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=495 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DoWindowsDNAparaomundoorientadoaservios_10BB6/image_thumb_3.png" width=491 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DoWindowsDNAparaomundoorientadoaservios_10BB6/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Camada de apresentação :&lt;/STRONG&gt; ASP.NET com Microsoft AJAX versão 1.0 e Silverlight 2.0.&lt;/P&gt;
&lt;P&gt;Para uma aplicação tipicamente Web, a construção de uma interface rica (&lt;EM&gt;RIA - Rich Internet Application&lt;/EM&gt;), que traga as funcionalidades e recursos da Web 2.0 é recomendável. E sobre recursos pensamos não somente em &lt;EM&gt;wikis, fóruns, webparts, controles gráficos, streaming&lt;/EM&gt;, etc, mas também em novas abordagens de apresentação e &lt;EM&gt;UX - User Experience&lt;/EM&gt;. Pensando ainda na composição de serviços e workflows, conceitos de &lt;STRONG&gt;aplicações compostas&lt;/STRONG&gt; ou &lt;EM&gt;mashups&lt;/EM&gt; também é uma capacidade que deve ser avaliada para nossa arquitetura.&lt;/P&gt;
&lt;P&gt;Nesse ponto, a infra-estrutura &lt;STRONG&gt;ASP.NET com AJAX e Silverlight 2.0&lt;/STRONG&gt; oferece essa gama de recursos para a construção de interfaces poderosas em .NET. Claro, devemos avaliar qual a aderência de nossa aplicação para todas essas inovações. Mas os novos recursos de administração do IIS 7.0 devem ser avaliados, independente do grau de ousadia de nossa nova interface. O IIS 7.0 seria nossa infra-estrutura de suporte às páginas e requisições HTTP/HTTPS, etc. sobre o Windows Server 2008.&lt;/P&gt;
&lt;P&gt;Para saber mais sobre o IIS 7.0 e esses recursos, não deixe de ver a série especial sobre o produto no blog do &lt;A href="http://blogs.technet.com/dbordini/" target=_blank mce_href="http://blogs.technet.com/dbordini/"&gt;Danilo Bordini&lt;/A&gt;, onde temos:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;IIS 7.0 (Internet Information Services): Parte 7: Delegação&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;IIS 7.0 (Internet Information Services): Parte 6: Configuração&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;IIS 7.0 (Internet Information Services): Parte 5: Extensibilidade&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;IIS 7.0 (Internet Information Services): Parte 4: Segurança&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;IIS 7.0 (Internet Information Services): Parte 3: Pilares&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;IIS 7.0 (Internet Information Services): Parte 2: Evolução da Plataforma&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Série Especial - IIS 7.0 (Internet Information Services)&lt;/FONT&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Ref.: &lt;A title=http://blogs.technet.com/dbordini/archive/tags/Internet+Information+Services+_2800_IIS_2900_/default.aspx href="http://blogs.technet.com/dbordini/archive/tags/Internet+Information+Services+_2800_IIS_2900_/default.aspx" mce_href="http://blogs.technet.com/dbordini/archive/tags/Internet+Information+Services+_2800_IIS_2900_/default.aspx"&gt;http://blogs.technet.com/dbordini/archive/tags/Internet+Information+Services+_2800_IIS_2900_/default.aspx&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;e para saber mais sobre o Silverlight 2.0 e o AJAX 1.0, veja os links:&lt;/P&gt;
&lt;P&gt;Ref.: &lt;A title=http://silverlight.net/ href="http://silverlight.net/" mce_href="http://silverlight.net/"&gt;http://silverlight.net/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Ref.: &lt;A title=http://www.asp.net/ajax/ href="http://www.asp.net/ajax/" mce_href="http://www.asp.net/ajax/"&gt;http://www.asp.net/ajax/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;E sempre é bom acompanhar como está a evolução do modelo &lt;STRONG&gt;ASP.NET MVC Framework&lt;/STRONG&gt;, ainda em Preview 2 (&lt;EM&gt;Model-View-Controller&lt;/EM&gt;). Veja aqui:&lt;/P&gt;
&lt;P&gt;Ref.: &lt;A title=http://www.microsoft.com/downloads/details.aspx?FamilyID=38CC4CF1-773A-47E1-8125-BA3369BF54A3&amp;amp;displaylang=en href="http://www.microsoft.com/downloads/details.aspx?FamilyID=38CC4CF1-773A-47E1-8125-BA3369BF54A3&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=38CC4CF1-773A-47E1-8125-BA3369BF54A3&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=38CC4CF1-773A-47E1-8125-BA3369BF54A3&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Camada de colaboração de processos :&lt;/STRONG&gt; Windows Workflow Foundation (.NET 3.5)&lt;/P&gt;
&lt;P&gt;Em alguns cenários, podemos pensar na implementação de processos de negócio através de fluxos de controle ou mesmo máquinas de estado. Quando falamos em fluxos de controle (ou workflows), pensamos num cenário onde a execução de atividades é sequencial, a partir de eventos que são tratados numa ordem esperada. Temos uma atividade inicial e uma atividade final bem definida. Quando falamos em máquinas de estado, a execução das atividades é orientada por eventos, que podem ocorrer numa ordem aleatória. Assim, nosso desenvolvimento é baseado no estado corrente, com transições por eventos, sendo mais flexível para mudanças externas.&lt;/P&gt;
&lt;P&gt;A implementação de um processo de negócio através de um workflow ou máquina de estados pode ser feita através do &lt;STRONG&gt;WF - Windows Workflow Foundation&lt;/STRONG&gt;. Como vimos em posts anteriores, podemos ainda integrar esses processos com serviços do WCF - Windows Communication Foundation, ou ainda outros processos de negócio. &lt;/P&gt;
&lt;P&gt;Finalmente, lembre-se que um processo pode ter interação humana para aprovações ou submissões, o que pode caracterizar execuções de longa duração. A interação de serviços ou outras camadas com esse tipo de processo precisa ser bem pensada e sinalizada para toda a arquitetura. &lt;/P&gt;
&lt;P&gt;Algumas perguntas: Quais são os processo de longa duração e de curta duração presentes em nossa arquitetura? Podemos implementar parte da lógica e regras de negócio em processos com WF? &lt;/P&gt;
&lt;P&gt;Para saber mais sobre WF e processos, veja:&lt;/P&gt;
&lt;P&gt;Ref.: &lt;A title=http://msdn2.microsoft.com/en-us/netframework/aa663322.aspx href="http://msdn2.microsoft.com/en-us/netframework/aa663322.aspx" mce_href="http://msdn2.microsoft.com/en-us/netframework/aa663322.aspx"&gt;http://msdn2.microsoft.com/en-us/netframework/aa663322.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Camada de serviços e negócicos :&lt;/STRONG&gt; Windows Communication Foundation e serviços hosteados no WAS - Windows Process Activation Service&lt;/P&gt;
&lt;P&gt;Surge então a discussão sobre a camada de serviços. O que é mesmo um serviço? :)&lt;/P&gt;
&lt;P&gt;Podemos pensar na implementação de classes de negócio, com suas &lt;EM&gt;business entities&lt;/EM&gt; e &lt;EM&gt;business process&lt;/EM&gt;, utilizando a infra-estrutura do WCF para sua exportação e publicação de interfaces. Quando surge o WCF em nossa arquitetura, precisamos discutir alguns pontos importantes:&lt;/P&gt;
&lt;P&gt;Qual será o template de serviço que usaremos? Nesse template, precisamos considerar o tratamento de exceção, a propagação de mensagens de erro, exportação de contadores de performance, e também aspectos de comportamento do serviço, contrato de dados, suporte transacional, mensagens tratadas, etc.&lt;/P&gt;
&lt;P&gt;Qual será o transporte tratado pelo serviço? A definição do &lt;STRONG&gt;binding&lt;/STRONG&gt; (para nosso &lt;STRONG&gt;endpoint&lt;/STRONG&gt;) é tão importante quanto a definição do próprio serviço. Através do binding correto, garantimos a melhor performance para a interação entre camadas, processos e serviços.&lt;/P&gt;
&lt;P&gt;Qual será o host para execução de serviços? Aqui, surge o WAS, já comentado em posts anteriores. Veja: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Windows Process Activation Service (WAS) - Um mecanismo de ativação de processos e serviços.&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://blogs.msdn.com/wcamb/archive/2008/04/10/windows-process-activation-service-was-um-mecanismo-de-ativa-o-de-processos-e-servi-os.aspx" mce_href="http://blogs.msdn.com/wcamb/archive/2008/04/10/windows-process-activation-service-was-um-mecanismo-de-ativa-o-de-processos-e-servi-os.aspx"&gt;http://blogs.msdn.com/wcamb/archive/2008/04/10/windows-process-activation-service-was-um-mecanismo-de-ativa-o-de-processos-e-servi-os.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;A importância da definição do host está associada ao processo de execução, mas também de administração, governança, distribuição e monitoração dos serviços em nossa arquitetura. Sem dúvida, cuidado muito especial é exigido.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Camada de negócio e aplicações LOB :&lt;/STRONG&gt; COM+ 1.5 e MSDTC&lt;/P&gt;
&lt;P&gt;Um ponto importante nessa arquitetura para estudo é que ainda podemos conviver com componente publicados no COM+, isto é, componentes COM que estão hosteados no &lt;STRONG&gt;Component Services&lt;/STRONG&gt;&amp;nbsp; (veja comexp.msc) e ainda aproveitam o &lt;STRONG&gt;MSDTC - Distributed Transaction Coordinator&lt;/STRONG&gt; para o suporte transacional. Esses componente podem e devem permanecer em nossa arquitetura. Isso significa que é possível conviver com esse legado, seja através de camadas de interoperabilidade (&lt;EM&gt;interop&lt;/EM&gt; .NET) ou simplemente consumindo esses componentes através de &lt;EM&gt;Web Services&lt;/EM&gt;. Para alguns casos, teremos traduções entre ambiente gerenciado .NET e não-gerenciado, o que deve causar um certo &lt;EM&gt;delay&lt;/EM&gt;, que deve ser avaliado.&lt;/P&gt;
&lt;P&gt;A questão sempre será sobre a viabilidade (de custo, recursos e tempo) para a migração desses componentes (COM+ WinDNA) para .NET. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Camada de acesso a dados e LOB :&lt;/STRONG&gt; bancos de dados legado e aplicações LOB&lt;/P&gt;
&lt;P&gt;E para o acesso aos dados temos algumas alternativas, como:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;ADO.NET 2.0&lt;/STRONG&gt;, quando usamos o .NET 2.0 e seus recursos como Dataset, DataReader, Datatable, DataAdapter, DbConnection, DbCommand, etc.;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;LINQ TO SQL&lt;/STRONG&gt;, quando usamos .NET 3.5 e estamos falando com servidores da família SQL Server;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;LINQ TO ENTITY&lt;/STRONG&gt;, quando usamos ADO.NET Entity Framework (ainda em Beta 3), para falar com outros servidores de bancos de dados, através do providers oferecidos no mercado.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Já falamos sobre LINQ e Entity Framework em alguns posts anteriores, veja aqui:&lt;/P&gt;
&lt;P&gt;Ref.: &lt;A title=http://blogs.msdn.com/wcamb/archive/tags/LINQ/default.aspx href="http://blogs.msdn.com/wcamb/archive/tags/LINQ/default.aspx" mce_href="http://blogs.msdn.com/wcamb/archive/tags/LINQ/default.aspx"&gt;http://blogs.msdn.com/wcamb/archive/tags/LINQ/default.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;A decisão entre as tecnologias de acesso a dados e camadas de persistência acima vai depender da orientação do projeto, entre a especialização para um middleware de alto desempenho, focado num único banco, ou um middleware de abstração e mapeamento, que permitirá trocas futuras de bancos de dados sem impacto na aplicação, porém, com um custo de mapeamento de traduções que deve ser avaliado quanto a performance.&lt;/P&gt;
&lt;P&gt;Mais uma vez, é importante lembrar que &lt;STRONG&gt;cada caso é um caso, sempre!&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;A estrutura em camadas acima foi colocada apenas como pretexto para a discussão dos frameworks e tecnologias disponíveis. Caberá a cada equipe de arquitetura avaliar internamente a aderência às suas próprias aplicações.&lt;/P&gt;
&lt;P&gt;Porém, tenha em mente que sua nova plataforma precisa estar antenada com as tendências de colaboração e integração de &lt;STRONG&gt;Software + Serviços&lt;/STRONG&gt; que temos observado. &lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;Construir preparado para a mudança, já que tudo se move, tudo flui, é uma prática cada vez mais desejada, já dizia Heráclito de Éfeso, uns 500 a.C. :) &lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;EM&gt;Panta hrei!&lt;/EM&gt;&lt;/FONT&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=8407543" 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/Web+2.0/default.aspx">Web 2.0</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/SOA/default.aspx">SOA</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/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/WinDNA/default.aspx">WinDNA</category></item><item><title>Do Windows DNA para o mundo orientado a serviços : cada caso é um caso?</title><link>http://blogs.msdn.com/wcamb/archive/2008/04/12/do-windows-dna-para-o-mundo-orientado-a-servi-os-cada-caso-um-caso.aspx</link><pubDate>Sun, 13 Apr 2008 01:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8385988</guid><dc:creator>wcamb</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/8385988.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=8385988</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=8385988</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo? &lt;/P&gt;
&lt;P&gt;A partir dos últimos emails, tive uma grande discussão com o amigo &lt;A href="http://blogs.msdn.com/rogerioc/" target=_blank mce_href="http://blogs.msdn.com/rogerioc/"&gt;Rogério Cordeiro&lt;/A&gt; (aqui do MSDN) sobre o uso de WCF, WF e outros frameworks na evolução de arquiteturas &lt;STRONG&gt;WinDNA&lt;/STRONG&gt; usadas em algumas aplicações típicas. Cenários como &lt;FONT color=#000080&gt;&lt;EM&gt;Internet Banking&lt;/EM&gt;, &lt;/FONT&gt;&lt;EM&gt;&lt;FONT color=#000080&gt;Interfaces de Corretoras, Acompanhamento de Pedidos&lt;/FONT&gt;&amp;nbsp; &lt;/EM&gt;ou&lt;EM&gt; &lt;FONT color=#000080&gt;Portais de Comércio Eletrônico&lt;/FONT&gt;&lt;/EM&gt; são bons exemplos. Ao final da discussão, começamos a traçar um mapa sobre alternativas de arquiteturas e tecnologias para a evolução desse tipo de plataforma.&lt;/P&gt;
&lt;P&gt;Se relembrarmos os tempos de &lt;STRONG&gt;Windows DNA&lt;/STRONG&gt; &lt;STRONG&gt;- Windows Distributed interNet Applications Architecture&lt;/STRONG&gt; (anunciado em setembro de 1999, você se lembra?), a camada de apresentação era implementada em páginas ASP/HTML, enquanto a lógica de negócio era implementada através de componentes COM+, hosteados no &lt;STRONG&gt;COM+ 1.0&lt;/STRONG&gt; do Windows NT 4.0 ou Windows 2000 Server. O controle e a coordenação de transações eram feitos através do &lt;STRONG&gt;MSDTC - Microsoft Distributed Transaction Coordinator &lt;/STRONG&gt;e a camada de dados era isolada em servidores dedicados, acessados pelos componentes de negócio. E quando havia transações disparadas na plataforma alta (&lt;EM&gt;mainframes&lt;/EM&gt;), o uso de &lt;STRONG&gt;COMTI&lt;/STRONG&gt; e &lt;STRONG&gt;COMAREA&lt;/STRONG&gt; era muito comum (saudades de uma TLB ? :)&lt;/P&gt;
&lt;P&gt;A figura abaixo representa bem o famoso &lt;STRONG&gt;WinDNA&lt;/STRONG&gt;:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DoWindowsDNAaomundoorientadoaserviosmui_14E3E/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DoWindowsDNAaomundoorientadoaserviosmui_14E3E/image_4.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=268 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DoWindowsDNAaomundoorientadoaserviosmui_14E3E/image_thumb_1.png" width=526 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DoWindowsDNAaomundoorientadoaserviosmui_14E3E/image_thumb_1.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Outro ponto importante nessa discussão era o modelo de threads implementado pelo Visual Basic 6.0, grande gerador de componentes COM na época. Tipicamente, VB6 gera componentes &lt;STRONG&gt;STA - Single Thread Apartment&lt;/STRONG&gt;, o que provoca o enfileiramente de mensagens devido sua limitação no tratamento de múltiplas chamadas para a mesma thread. O modelo que liberava esse enfileiramento é conhecido como &lt;STRONG&gt;MTA - Multi Thread Apartment&lt;/STRONG&gt;, que é obtido em componentes COM implementados em C++ ou agora em .NET.&lt;/P&gt;
&lt;P&gt;Um bom artigo sobre o WinDNA está no link abaixo: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Windows DNA Architecture Design: A Scalable, Highly Available Business Object Architecture &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://www.microsoft.com/technet/archive/ittasks/deploy/depovg/windna.mspx?mfr=true" mce_href="http://www.microsoft.com/technet/archive/ittasks/deploy/depovg/windna.mspx?mfr=true"&gt;http://www.microsoft.com/technet/archive/ittasks/deploy/depovg/windna.mspx?mfr=true&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;E sobre as questões de STA e MTA, veja ainda no artigo:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Understanding COM Apartments&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.codeguru.com/cpp/com-tech/activex/apts/article.php/c5529" mce_href="http://www.codeguru.com/cpp/com-tech/activex/apts/article.php/c5529"&gt;http://www.codeguru.com/cpp/com-tech/activex/apts/article.php/c5529&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;De fato, muitas empresas implementaram os cenários acima em &lt;STRONG&gt;WinDNA&lt;/STRONG&gt; e atualmente questionam quais são as alternativas rumo aos novos frameworks da Microsoft. &lt;/P&gt;
&lt;P&gt;Mas sobre quais frameworks e tecnologias estamos falando? Vejamos nossas opções:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;WCF - Windows Communication Foundation (.NET 3.x)&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;WF - Windows Workflow Foundation (.NET 3.x)&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;WPF - Windows Presentation Foundation (.NET 3.x)&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Windows CardSpace (.NET 3.x)&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;ADO.NET Entity Framework (Beta 3)&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;ADO.NET Data Services (CTP)&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Microsoft Sync Framework (CTP)&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;ASP.NET MVC Framework (Preview 2)&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Microsoft ASP.NET AJAX 1.0 &lt;/FONT&gt;&amp;nbsp; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;E ainda outras tecnologias como (misturei assuntos de propósito):&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Virtualização;&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;LINQ to SQL, LINQ to XML, LINQ to Entities, LINQ to Objects;&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Microsoft Silverlight 2 (Beta 1);&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;SaaS, Web 2.0, SOA, ESB, RIA;&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;IIS 7.0 e o Windows Process Activation Service (WAS);&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Windows Server 2008, SQL Server 2008; &lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Service Broker, SSIS;&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Fábricas de Software, Domain-Specific Languages, GAT/GAX;&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Office Business Application (OBA);&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;e mais recentemente Software + Services (S+S), para ficar em algumas...&lt;/FONT&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Assim, nossa discussão sobre evolução de uma arquitetura &lt;STRONG&gt;WinDNA&lt;/STRONG&gt; típica torna-se um grande desafio. Nossas opções de tecnologias tornaram-se mais complexas e diversas nesses útimos 10 anos. &lt;/P&gt;
&lt;P&gt;Mas para atacar esse desafio, vamos propor 2 etapas muito básicas. Como primeiro passo, precisamos de algumas questões para um processo de preparação e entendimento de nosso cenário atual. Vejamos:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Na evolução de nossa interface ASP, temos espaço para um novo padrão visual, caminhando para interfaces mais ricas (RIA), com interatividade e customização feita pelo usuário (WEB 2.0) e ainda com capacidade para compor funcionalidades de diferentes fontes de dados (Aplicações de Composição ou Mashups)?&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Quantos componentes de negócio estamos tratando? &lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Conseguimos separar os componentes críticos em desempenho dos componentes de apoio? &lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Estamos utilizando algum framework de desenvolvimento para a construção dos componentes de negócio no WinDNA?&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Conseguimos construir um inventário completo sobre esses componentes de negócio?&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Na evolução de nossos componentes de negócio, é possível observar espaço para composição e coordenação de processos, na forma de workflows ou encadeamento de atividades? &lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Existe a necessidade de aplicação de regras de negócio, seja de forma dinâmica ou estática?&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Na evolução de nossa conectividade com outros sistemas, quais são os cenários de transporte possíveis? Reconhecemos o uso de TCP, Named Pipes, MSMQ e Web Services?&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Na evolução de nosso consumo de transações na plataforma alta, estamos utilizando chamadas via COMTI ou outros mecanismos de comunicação via APPC ou TCP com aplicações no mainframe?&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Quais são os bancos de dados envolvidos? Conseguimos identificar um isolamento claro entre camada de negócio e camada de dados? Como está o uso de stored procedures e queries SQL pela arquitetura? Como estão os modelos de dados envolvidos?&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Qual o inventário de sistema operacional presente na arquitetura atual?&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Como está a infra-estrutura atual para as questões de disponibilidade da aplicação, como balanceamento de carga, balanceamento de componentes, farm de servidores, clusters, etc.?&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Como são tratados os demais aspectos da aplicação como transação, recuperação, monitoração, segurança, tratamento de exceções, autenticação, controle de acesso, atualização de versões, etc.?&lt;/FONT&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;De fato, as questões acima irão nos ajudar para um maior entendimento sobre a arquitetura atual. Com certeza você irá adicionar novas questões, específicas para sua empresa.&lt;/P&gt;
&lt;P&gt;O passo seguinte será mapear os recursos e benefícios de cada um dos novos frameworks &lt;STRONG&gt;Pós-WinDNA,&lt;/STRONG&gt; afim de começar o mapeamento de tecnologias que irão oferecer a melhor solução para sua arquitetura. Um exemplo de aplicação seria esse:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DoWindowsDNAaomundoorientadoaserviosmui_14E3E/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DoWindowsDNAaomundoorientadoaserviosmui_14E3E/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; MARGIN: 0px 20px 0px 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=351 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DoWindowsDNAaomundoorientadoaserviosmui_14E3E/image_thumb.png" width=219 align=left border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DoWindowsDNAaomundoorientadoaserviosmui_14E3E/image_thumb.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Ao lado, uma aplicação Web (asp) com componentes COM+ 1.0 e acesso ao banco de dados e mainframe (usando HIS), uma foto tirada durante nossa discussão com o Rogério :-)&lt;/P&gt;
&lt;P&gt;Como seria a evolução desse tipo de cenário?&lt;/P&gt;
&lt;P&gt;Veremos algumas idéias em breve...&lt;/P&gt;
&lt;P&gt;Para finalizar, não devemos esperar soluções mágicas ou soluções únicas para todos os cenários. &lt;STRONG&gt;Cada caso é um caso, sempre!&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Esse texto foi só para iniciar a discussão. Vamos continuar o tema em posts futuros, por isso, comentários serão benvindos...&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=8385988" 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/WinDNA/default.aspx">WinDNA</category></item><item><title>Integrando WCF e WF - Uma alternativa para a composição de serviços numa arquitetura SOA.</title><link>http://blogs.msdn.com/wcamb/archive/2008/04/07/integrando-wcf-e-wf-um-modelo-de-composi-o-de-servi-os-para-uma-arquitetura-soa.aspx</link><pubDate>Tue, 08 Apr 2008 03:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8367073</guid><dc:creator>wcamb</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/8367073.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=8367073</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=8367073</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Cada vez mais tenho recebido perguntas sobre o uso de serviços baseados em &lt;STRONG&gt;WCF - Windows Communication Foundation&lt;/STRONG&gt;. De fato, existem diversos aspectos de uma camada de serviços que o framework WCF atende muito bem. Entre as principais características aderentes ao modelo temos:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Framework dedicado para a comunicação entre sistemas;&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Baseado em mensagens;&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Multi-protocolo;&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Multi-hosting;&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Compatível com WS, WS-*, TCP, P2P, etc;&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Adaptável e extensível, através da construção de novos dutos de transporte (bindings), adapters, endpoints, mecanismos de entrega de mensagens, etc;&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Altamente configurável, o que permite um grande desacoplamento entre serviços e sua configuração, entre outros.&lt;/FONT&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Existem ainda outros recursos importantes no WCF que adicionam ao modelo, como programação unificada para diversos métodos de conexão, controle de comportamentos (&lt;EM&gt;behaviors&lt;/EM&gt;),&amp;nbsp;endpoints e seus componentes, etc. A figura a seguir já é conhecida de todos e apresenta os atores de um serviço no WCF:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/IntegrandoWCFeWFUmmodelodecomposiodeserv_10B0B/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/IntegrandoWCFeWFUmmodelodecomposiodeserv_10B0B/image_6.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=299 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/IntegrandoWCFeWFUmmodelodecomposiodeserv_10B0B/image_thumb_2.png" width=466 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/IntegrandoWCFeWFUmmodelodecomposiodeserv_10B0B/image_thumb_2.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Do mesmo modo, o &lt;STRONG&gt;WF - Windows Workflow Foundation&lt;/STRONG&gt; trás uma série de recursos para a composição de atividades, introduzindo os conceitos de fluxo de trabalho, permitindo aos desenvolvedores tratarem diversos&amp;nbsp;cenários, como fluxos de trabalho seqüencial, fluxos simples, fluxos baseados em máquinas de estado, com interações humanas, etc.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/IntegrandoWCFeWFUmmodelodecomposiodeserv_10B0B/image_12.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/IntegrandoWCFeWFUmmodelodecomposiodeserv_10B0B/image_12.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=276 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/IntegrandoWCFeWFUmmodelodecomposiodeserv_10B0B/image_thumb_5.png" width=505 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/IntegrandoWCFeWFUmmodelodecomposiodeserv_10B0B/image_thumb_5.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Portanto, é inevitável que a pergunta sobre o uso integrado de ambos os frameworks aconteça. A pergunta que devemos fazer na sequência é: &lt;EM&gt;como isso pode ser feito? e ainda, quais são as armadilhas nessa implementação?&lt;/EM&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Para a primeira pergunta, um bom artigo que descreve&amp;nbsp;um cenário de integração é este a seguir:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Integrating Windows Workflow Foundation and Windows Communication Foundation (by Jeremy Boyd) &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://msdn2.microsoft.com/en-us/library/bb266709.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/bb266709.aspx"&gt;http://msdn2.microsoft.com/en-us/library/bb266709.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;O artigo apresenta um passo-a-passo que pode ser usado como exemplo na integração de serviços WF em WCF em cenários diversos. Vamos usá-lo como guia para apresentar alguns novos pontos de discussão que envolvem os dois framework. &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Criar o modelo de processos desejado no WF, identificando os pontos de decisão e interação entre serviços;&lt;/LI&gt;
&lt;LI&gt;Evitar o uso de muitos blocos de código em sequência (&lt;EM&gt;Code Shape&lt;/EM&gt;). Sempre que possível, consolidar os blocos por linha de execucão no workflow do WF.&lt;/LI&gt;
&lt;LI&gt;Trabalhar com um &lt;EM&gt;checklist&lt;/EM&gt; de verificações para a integração WCF/WF. De fato, manter um desenho da integração desejada sempre atualizada é um fator crítico;&lt;/LI&gt;
&lt;LI&gt;Definir os contratos de serviços de negócio envolvidos no projeto. Podemos identificar 3 grandes aspectos para um contrato de serviço:&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;As &lt;STRONG&gt;operações publicadas&lt;/STRONG&gt;, que são os recursos que o serviço publica para seus consumidores (são os métodos da interface); &lt;/LI&gt;
&lt;LI&gt;As &lt;STRONG&gt;mensagens&lt;/STRONG&gt; &lt;STRONG&gt;que encapsulam os dados&lt;/STRONG&gt; &lt;STRONG&gt;estruturados&lt;/STRONG&gt; &lt;STRONG&gt;de cada solicitação e resposta&lt;/STRONG&gt;, que são os argumentos e os tipos de retorno de cada método (são os contratos de mensagem ou os contratos de dados);&lt;/LI&gt;
&lt;LI&gt;As &lt;STRONG&gt;definições de dados das entidades de negócio&lt;/STRONG&gt; (business entities) que podem ser trocadas pelo serviço;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Quando necessário, hospedar e manter o tempo de execução do fluxo de trabalho. Isso é feito através da adição de uma classes de extensão ao WF, através da interface &lt;STRONG&gt;IExtension&amp;lt;ServiceHostBase&amp;gt;.&lt;/STRONG&gt; Veja mais aqui: &lt;A title=http://msdn2.microsoft.com/en-us/library/ms554840(VS.85).aspx href="http://msdn2.microsoft.com/en-us/library/ms554840(VS.85).aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms554840(VS.85).aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms554840(VS.85).aspx&lt;/A&gt;;&lt;/LI&gt;
&lt;LI&gt;Também, para fluxos de trabalho de longa duração, recomenda-se o uso de um modelo de persistência por &lt;STRONG&gt;SqlWorkflowPersistenceService&lt;/STRONG&gt;. Isso garante a recuperação e manutenção do estado do fluxo enquanto sua duração. Veja mais aqui: &lt;A title=http://msdn2.microsoft.com/en-us/library/system.workflow.runtime.hosting.sqlworkflowpersistenceservice.aspx href="http://msdn2.microsoft.com/en-us/library/system.workflow.runtime.hosting.sqlworkflowpersistenceservice.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.workflow.runtime.hosting.sqlworkflowpersistenceservice.aspx"&gt;http://msdn2.microsoft.com/en-us/library/system.workflow.runtime.hosting.sqlworkflowpersistenceservice.aspx&lt;/A&gt;;&lt;/LI&gt;
&lt;LI&gt;Verificar os pontos de configuração da implantação, através da definição dos valores para o &lt;STRONG&gt;endpoint&lt;/STRONG&gt; do serviço WCF (&lt;EM&gt;Address, Binding e Contract&lt;/EM&gt;);&lt;/LI&gt;
&lt;LI&gt;Para o consumo do serviço, podemos utilizar o padrão de fábrica &lt;STRONG&gt;ChannelFactory. &lt;/STRONG&gt;Veja mais aqui: &lt;A title=http://msdn2.microsoft.com/en-us/library/ms576132.aspx href="http://msdn2.microsoft.com/en-us/library/ms576132.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms576132.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms576132.aspx&lt;/A&gt;;&lt;/LI&gt;
&lt;LI&gt;Ainda, o WCF suporta alguns fluxos de mensagens alternativos, como &lt;EM&gt;comunicação unidirecional&lt;/EM&gt; e &lt;EM&gt;duplex bidirecional&lt;/EM&gt;. Os canais &lt;STRONG&gt;duplex&lt;/STRONG&gt; podem ser bastante eficientes para sistemas com conexão mais forte, nos quais os dados possam ser enviados em qualquer direção. Importante estudar o cenário para a definição do tipo de fluxo de mensagem mais indicado. Esse tipo de configuração é feita através da chamada &lt;STRONG&gt;DuplexChannelFactory&lt;/STRONG&gt;. Veja mais aqui: &lt;A href="http://msdn2.microsoft.com/en-us/library/ms576164.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms576164.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms576164.aspx&lt;/A&gt;.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Bastante coisa, não é mesmo? &lt;/P&gt;
&lt;P&gt;Relembrando, o &lt;STRONG&gt;Windows Workflow Foundation (WF)&lt;/STRONG&gt; oferece uma estrutura geral para a definição de fluxos de trabalho e um mecanismo de controle que permite hospedar esses fluxos de trabalho em execução, além de interagir com eles. Ainda, o &lt;STRONG&gt;Windows Communication Foundation (WCF)&lt;/STRONG&gt; fornece uma estrutura geral de criação de sistemas conectados, através de um modelo de programação unificada, completo e consistente, que oferece um conjunto amplo de recursos para a definição de serviços, como vimos acima.&lt;/P&gt;
&lt;P&gt;Assim, realmente podemos aplicar esses dois frameworks de forma combinada, criando uma plataforma flexível e adaptável. O WF permite modelar e encapsular a lógica de negócio e os processos de negócio, enquanto o WCF fornece a infra-estrutura de mensagens para a comunicação entre sistemas.&lt;/P&gt;
&lt;P&gt;Os passos acima não são o guia definitivo para a implementação de integrações WCF&amp;nbsp;+ WF. A idéia do post foi apontar alguns temas envolvidos na construção de soluções sofisticadas, utilizando os dois frameworks. E para relembrar uma outra discussão&amp;nbsp;já feita aqui no blog, segue o link abaixo:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Windows Workflow Foundation - Uma alternativa para a camada de processos numa arquitetura SOA. &lt;/STRONG&gt;&lt;BR&gt;Ref.: &lt;A href="http://blogs.msdn.com/wcamb/archive/2008/02/01/windows-workflow-foundation-uma-alternativa-para-a-camada-de-processos-numa-arquitetura-soa.aspx"&gt;http://blogs.msdn.com/wcamb/archive/2008/02/01/windows-workflow-foundation-uma-alternativa-para-a-camada-de-processos-numa-arquitetura-soa.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&lt;/P&gt;Em posts futuros, ainda vamos dar uma olhada no impacto dessa integração WCF + WF sobre o &lt;STRONG&gt;Windows Server 2008&lt;/STRONG&gt;, especificamente com o uso do &lt;STRONG&gt;Windows Process Activation Service (WAS)&lt;/STRONG&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=8367073" 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/WF/default.aspx">WF</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/WCF/default.aspx">WCF</category></item><item><title>Windows Workflow Foundation - Uma alternativa para a camada de processos numa arquitetura SOA.</title><link>http://blogs.msdn.com/wcamb/archive/2008/02/01/windows-workflow-foundation-uma-alternativa-para-a-camada-de-processos-numa-arquitetura-soa.aspx</link><pubDate>Fri, 01 Feb 2008 16:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7374572</guid><dc:creator>wcamb</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/7374572.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=7374572</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=7374572</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo? &lt;/P&gt;
&lt;P&gt;Nas últimas semanas, tenho conversado com alguns clientes que iniciaram suas primeiras visões sobre a camada de composição de processos e o consumo de serviços num ambiente &lt;STRONG&gt;SOA&lt;/STRONG&gt;. Realmente, o assunto &lt;STRONG&gt;"Arquitetura Orientada a Serviços"&lt;/STRONG&gt; ainda está bem presente no meio corporativo, pois muitas questões ainda estão em aberto. &lt;/P&gt;
&lt;P&gt;Entre as considerações recorrentes nessa discussão temos:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;O que é um serviço?&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Quais são os patterns para criação de serviços?&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Quais os mecanismos de conexão e comunicação entre serviços e aplicações LOB - Line Of Business?&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Quais funcionalidades serão implementadas no formato de serviços?&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Como organizar os sistemas e investimentos já existentes na organização?&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Como publicar os serviços gerados?&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Como consumir os serviços gerados?&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Como administrar os serviços gerados?&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;O que é governança de serviços? ...e&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;ntre outras...&lt;/FONT&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Nesse post, vamos revisar alguns conceitos sobre a arquitetura SOA e falar um pouco sobre a implementação da &lt;STRONG&gt;Camada de Processos&lt;/STRONG&gt; através do &lt;STRONG&gt;Windows Workflow Foundation&lt;/STRONG&gt;, o WF do .NET Framework 3.0. &lt;/P&gt;
&lt;P&gt;Quando pensamos no paradigma de distribuição e consumo de serviços, a figura abaixo é uma boa representação: &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WindowsWorkflowFoundationUmaalternativa_883B/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WindowsWorkflowFoundationUmaalternativa_883B/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=329 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WindowsWorkflowFoundationUmaalternativa_883B/image_thumb.png" width=484 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WindowsWorkflowFoundationUmaalternativa_883B/image_thumb.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Vemos que num ambiente orientado a serviços, existirá uma camada de implementação e integração com fontes de dados, sistemas legados e aplicações linhas de negócio (&lt;STRONG&gt;LOB - Line of Business Applications&lt;/STRONG&gt;). Acima dessa camada, pensamos um conjunto de serviços atômicos que exportam de maneira consistente as funcionalidades das aplicações. Nessa camada é que existem as grandes considerações sobre anatomia de serviços, publicação, barramento de serviços, etc.&lt;/P&gt;
&lt;P&gt;E para consumir esses serviços, podemos pensar na composição e na colaboração de uma &lt;STRONG&gt;camada de processos&lt;/STRONG&gt;. Uma camada de processos pode ser organizada através de orquestrações ou fluxos de atividades ou ainda máquinas de estado, que através de regras de negócio decidem quais serviços serão consumidos. Note que sobre uma camada de processos, aplicações compostas podem oferecer uma rica oferta de funcionalidades para usuários corporativos finais. Aqui temos os chamados &lt;STRONG&gt;Mashups Corporativos&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;Em teoria, o cenário acima é perfeito. Porém, para a implementação dessa visão muitos cuidados são necessários e a escolha das tecnologias corretas se torna crítica. &lt;/P&gt;
&lt;P&gt;O &lt;STRONG&gt;Windows Workflow Fountation&lt;/STRONG&gt; (ou simplesmente WF) é um framework componente do .NET 3.0 que permite a construção de orquestrações ou fluxos de atividades. Pense numa atividade como um trecho de código, manipulação de dados, interação com usuário, chamadas para web services ou serviços WCF que sejam necessários para um processo. Assim, em WF, um conjunto de atividades coordena pessoas e/ou software de forma organizada através de um fluxo de trabalho.&lt;/P&gt;
&lt;P&gt;A figura abaixo apresenta um visão sobre a arquitetura geral do WF:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WindowsWorkflowFoundationUmaalternativa_883B/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WindowsWorkflowFoundationUmaalternativa_883B/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=359 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WindowsWorkflowFoundationUmaalternativa_883B/image_thumb_1.png" width=231 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WindowsWorkflowFoundationUmaalternativa_883B/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Note que todo workflow ou fluxo de atividades criado em WF é executado por um host. Esse host pode ser um serviço Windows, uma aplicação .NET ou mesmo um serviço WCF em execução. E nessa arquitetura, o &lt;STRONG&gt;Runtime Engine&lt;/STRONG&gt; é o módulo responsável pela execução do fluxo de atividades. Como parte integrante desse ambiente temos o &lt;STRONG&gt;Visual Designer&lt;/STRONG&gt;, uma interface integrada ao Visual Studio 2005 (via extensions)&amp;nbsp;ou 2008 (de forma nativa) que permite a construção de fluxos de atividades WF de forma visual. Veja na figura abaixo um exemplo de workflow construído no Visual Designer:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WindowsWorkflowFoundationUmaalternativa_883B/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WindowsWorkflowFoundationUmaalternativa_883B/image_6.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=305 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WindowsWorkflowFoundationUmaalternativa_883B/image_thumb_2.png" width=359 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WindowsWorkflowFoundationUmaalternativa_883B/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Ao final, um fluxo de atividades WF deve gerar um assembly .NET, seja uma .DLL ou um .EXE de acordo com o tipo de host gerado. Esse assembly será executado numa máquina, que proverá o workflow para os demais sistemas. De fato, o assembly irá encapsular uma&amp;nbsp;classe em .NET, com a seguinte estrutura:&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#0000ff size=2&gt;using System; &lt;BR&gt;using System.ComponentModel; &lt;BR&gt;using System.ComponentModel.Design; &lt;BR&gt;using System.Collections; &lt;BR&gt;using System.Drawing; &lt;BR&gt;using System.Workflow.ComponentModel.Compiler; &lt;BR&gt;using System.Workflow.ComponentModel.Serialization; &lt;BR&gt;using System.Workflow.ComponentModel; &lt;BR&gt;using System.Workflow.ComponentModel.Design; &lt;BR&gt;using System.Workflow.Runtime; &lt;BR&gt;using System.Workflow.Activities; &lt;BR&gt;using System.Workflow.Activities.Rules; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#0000ff size=2&gt;namespace &lt;STRONG&gt;MyWorkflowConsoleApplication&lt;/STRONG&gt; &lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;public sealed partial class MyWorkflow: SequentialWorkflowActivity&lt;/STRONG&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;STRONG&gt;MyWorkflow&lt;/STRONG&gt;() &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InitializeComponent(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void codeActivity_ExecuteCode(object sender, EventArgs e) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("codeActivity_ExecuteCode");&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Assim, uma vez dentro de um método ou trecho de código do workflow, temos acesso a todos os recursos e funcionalidades do .NET Framework, o que permite uma grande flexibilidade na construção e integração com outras aplicações. Note que da mesma forma, valerão as boas práticas de performance e recomendações para .NET no desenvolvimento de código de uma classe &lt;STRONG&gt;Workflow&lt;/STRONG&gt;, como vista acima. Como boa prática, é importante evitar construções com um número excessivo de shapes de código. Assim, sempre que possível é melhor consolidar atividades num único shape ou simplesmente evitar um número elevado de chamadas para componentes externos, para que cada workflow seja simples e assim, com uma boa performance. Cada shape de código é implementado através de um método &lt;STRONG&gt;private void codeActivity_nonon(object sender, EventArgs e)&lt;/STRONG&gt;, como visto no exemplo acima. Lembre-se que um workflow com alta latência terá impacto na performance final da aplicação front-end que o consome. &lt;/P&gt;
&lt;P&gt;Enfim, tivemos aqui apenas uma introdução sobre o tema Windows Workflow Foundation e seu uso como alternativa para orquestrações na camada de processos de uma arquitetura orientada a serviços.&lt;/P&gt;
&lt;P&gt;Como boas referências para avançarmos sobre o estudo do &lt;STRONG&gt;WF&lt;/STRONG&gt;, recomendo alguns links: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Hands-on Labs for Windows® Workflow Foundation in C# and VB.NET&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=2e575633-e357-4ee7-aaff-34138f00e830&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=2e575633-e357-4ee7-aaff-34138f00e830&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=2e575633-e357-4ee7-aaff-34138f00e830&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;BPEL for Windows Workflow Foundation March CTP&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=6D0DAF00-F689-4E61-88E6-CBE6F668E6A3&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=6D0DAF00-F689-4E61-88E6-CBE6F668E6A3&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=6D0DAF00-F689-4E61-88E6-CBE6F668E6A3&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Visual Studio 2005 extensions for .NET Framework 3.0 (Windows Workflow Foundation)&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=5D61409E-1FA3-48CF-8023-E8F38E709BA6&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=5D61409E-1FA3-48CF-8023-E8F38E709BA6&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=5D61409E-1FA3-48CF-8023-E8F38E709BA6&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Windows Workflow Foundation, Part 1 – by Dino Esposito&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://msdn.microsoft.com/msdnmag/issues/06/03/CuttingEdge/" mce_href="http://msdn.microsoft.com/msdnmag/issues/06/03/CuttingEdge/"&gt;http://msdn.microsoft.com/msdnmag/issues/06/03/CuttingEdge/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Windows Workflow Foundation, Part 2 – by Dino Esposito&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://msdn.microsoft.com/msdnmag/issues/06/04/cuttingedge/default.aspx" mce_href="http://msdn.microsoft.com/msdnmag/issues/06/04/cuttingedge/default.aspx"&gt;http://msdn.microsoft.com/msdnmag/issues/06/04/cuttingedge/default.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;E um bom livro é o lançamento do Paul Andrew, veja abaixo: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Presenting Windows Workflow Foundation&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.amazon.com/Presenting-Windows-Workflow-Foundation-Andrew/dp/0672328488" mce_href="http://www.amazon.com/Presenting-Windows-Workflow-Foundation-Andrew/dp/0672328488"&gt;http://www.amazon.com/Presenting-Windows-Workflow-Foundation-Andrew/dp/0672328488&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Em posts futuros vamos discutir mais questões de otimização e performance sobre a camada de orquestração e o desenvolvimento sobre o &lt;STRONG&gt;Windows Workflow Foundation&lt;/STRONG&gt;. Como sempre, fiquem ligados.&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=7374572" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/SOA/default.aspx">SOA</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/WF/default.aspx">WF</category></item><item><title>Extensions e Addins para o Visual Studio 2005.</title><link>http://blogs.msdn.com/wcamb/archive/2007/12/10/extensions-e-addins-para-o-visual-studio-2005.aspx</link><pubDate>Tue, 11 Dec 2007 02:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6728658</guid><dc:creator>wcamb</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/6728658.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=6728658</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=6728658</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Conforme combinado, este é o post que fala de &lt;EM&gt;Extensions&lt;/EM&gt; e &lt;EM&gt;Addins&lt;/EM&gt; para o &lt;STRONG&gt;Visual Studio 2005&lt;/STRONG&gt;, para trabalharmos com uma série de tecnologias, de .NET 3.5 a AJAX.&amp;nbsp;Sobre seu ambiente de&amp;nbsp;Visual Studio 2005, vamos prepará-lo para os seguintes cenários:&lt;/P&gt;
&lt;P&gt;- Guias de Automação e Software Factories&lt;BR&gt;- Recursos para o desenvolvimento Office (Visual Studio Tools for Office)&lt;BR&gt;- Recursos para o desenvolvimento sobre o BizTalk Services SDK 1.0&lt;BR&gt;- Recursos para a construção de serviços WCF - Windows Communication Foundation&lt;BR&gt;- Recursos para a construção de workflows com o WF - Windows Workflow Foundation&lt;BR&gt;- Recursos para o desenvolvimento AJAX&lt;BR&gt;- Recursos do .NET Framework 3.0 e 3.5, Extensions, Samples e SDK's&lt;/P&gt;
&lt;P&gt;Abaixo temos os links para download de cada um dos pacotes desejados. Veja que, de acordo com a necessidade, instale os pacotes que você irá mesmo utilizar:&lt;/P&gt;
&lt;P&gt;1. Microsoft .NET Framework Version 2.0 Redistributable Package (x86)&lt;BR&gt;&lt;A class="" href="https://www.microsoft.com/downloads/details.aspx?familyid=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&amp;amp;displaylang=en" target=_blank mce_href="https://www.microsoft.com/downloads/details.aspx?familyid=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&amp;amp;displaylang=en"&gt;https://www.microsoft.com/downloads/details.aspx?familyid=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;2. Microsoft .NET Framework 2.0 Service Pack 1 (x86)&lt;BR&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=79BC3B77-E02C-4AD3-AACF-A7633F706BA5&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=79BC3B77-E02C-4AD3-AACF-A7633F706BA5&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=79BC3B77-E02C-4AD3-AACF-A7633F706BA5&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;3. Microsoft .NET Framework 3.0 Redistributable Package&lt;BR&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=10CC340B-F857-4A14-83F5-25634C3BF043&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=10CC340B-F857-4A14-83F5-25634C3BF043&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=10CC340B-F857-4A14-83F5-25634C3BF043&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;4. GAX - Guidance Automation Extensions&lt;BR&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C0A394C0-5EEB-47C4-9F7B-71E51866A7ED&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C0A394C0-5EEB-47C4-9F7B-71E51866A7ED&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=C0A394C0-5EEB-47C4-9F7B-71E51866A7ED&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;5. GAT - Guidance Automation Toolkit&lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=E3D101DB-6EE1-4EC5-884E-97B27E49EAAE&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=E3D101DB-6EE1-4EC5-884E-97B27E49EAAE&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;6. Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System (VSTO SE)&lt;BR&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=5E86CAB3-6FD6-4955-B979-E1676DB6B3CB&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=5E86CAB3-6FD6-4955-B979-E1676DB6B3CB&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=5E86CAB3-6FD6-4955-B979-E1676DB6B3CB&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;7. Visual Studio 2005 extensions for .NET Framework 3.0 (WCF &amp;amp; WPF), November 2006 CTP&lt;BR&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=F54F5537-CC86-4BF5-AE44-F5A1E805680D&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=F54F5537-CC86-4BF5-AE44-F5A1E805680D&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=F54F5537-CC86-4BF5-AE44-F5A1E805680D&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;8. Visual Studio 2005 extensions for .NET Framework 3.0 (Windows Workflow Foundation)&lt;BR&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?familyid=5D61409E-1FA3-48CF-8023-E8F38E709BA6&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=5D61409E-1FA3-48CF-8023-E8F38E709BA6&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=5D61409E-1FA3-48CF-8023-E8F38E709BA6&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;9. Microsoft .NET Framework 3.5&lt;BR&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=333325FD-AE52-4E35-B531-508D977D32A6&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=333325FD-AE52-4E35-B531-508D977D32A6&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=333325FD-AE52-4E35-B531-508D977D32A6&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;10. Microsoft .NET Framework 3.0 Service Pack 1&lt;BR&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?familyid=EC2CA85D-B255-4425-9E65-1E88A0BDB72A&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=EC2CA85D-B255-4425-9E65-1E88A0BDB72A&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=EC2CA85D-B255-4425-9E65-1E88A0BDB72A&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;11. Web Service Software Factory - Feb 2007&lt;BR&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=DB996113-6E92-4894-9B7E-0DEBB614D72F%20&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=DB996113-6E92-4894-9B7E-0DEBB614D72F%20&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=DB996113-6E92-4894-9B7E-0DEBB614D72F%20&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;12. Mobile Client Software Factory July 2006 (refresh)&lt;BR&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=F9176708-9F57-4C0F-97FB-F9C65A9BBF22&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=F9176708-9F57-4C0F-97FB-F9C65A9BBF22&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=F9176708-9F57-4C0F-97FB-F9C65A9BBF22&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;13. Smart Client Software Factory - May 2007&lt;BR&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?familyid=2B6A10F9-8410-4F13-AD53-05A202FBDB63&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=2B6A10F9-8410-4F13-AD53-05A202FBDB63&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=2B6A10F9-8410-4F13-AD53-05A202FBDB63&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;14. Service Factory - Modeling Edition (VS2005)&amp;nbsp;&amp;nbsp; &lt;BR&gt;&lt;A class="" href="http://www.codeplex.com/servicefactory/Release/ProjectReleases.aspx?ReleaseId=8130" target=_blank mce_href="http://www.codeplex.com/servicefactory/Release/ProjectReleases.aspx?ReleaseId=8130"&gt;http://www.codeplex.com/servicefactory/Release/ProjectReleases.aspx?ReleaseId=8130&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;15. BizTalk Services SDK 1.0&lt;BR&gt;&lt;A class="" href="http://labs.biztalk.net/GetStarted.aspx" target=_blank mce_href="http://labs.biztalk.net/GetStarted.aspx"&gt;http://labs.biztalk.net/GetStarted.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;16. Windows SharePoint Services 3.0 Tools: Visual Studio 2005 Extensions&lt;BR&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?familyid=19F21E5E-B715-4F0C-B959-8C6DCBDC1057&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=19F21E5E-B715-4F0C-B959-8C6DCBDC1057&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=19F21E5E-B715-4F0C-B959-8C6DCBDC1057&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;17. SharePoint Server 2007 SDK: Software Development Kit&lt;BR&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?familyid=6D94E307-67D9-41AC-B2D6-0074D6286FA9&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=6D94E307-67D9-41AC-B2D6-0074D6286FA9&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=6D94E307-67D9-41AC-B2D6-0074D6286FA9&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;18. Microsoft ASP.NET AJAX - Vários recursos para download&lt;BR&gt;&lt;A class="" href="http://www.asp.net/ajax/downloads/" target=_blank mce_href="http://www.asp.net/ajax/downloads/"&gt;http://www.asp.net/ajax/downloads/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;19. Basic Windows Communication Foundation Technology Samples&lt;BR&gt;&lt;A class="" href="http://msdn2.microsoft.com/en-us/library/ms752239(VS.90).aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/ms752239(VS.90).aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms752239(VS.90).aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;20. Windows Communication Foundation (WCF), Windows Workflow Foundation (WF) and Windows CardSpace Samples&lt;BR&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?familyid=2611a6ff-fd2d-4f5b-a672-c002f1c09ccd&amp;amp;displaylang=en&amp;amp;tm" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=2611a6ff-fd2d-4f5b-a672-c002f1c09ccd&amp;amp;displaylang=en&amp;amp;tm"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=2611a6ff-fd2d-4f5b-a672-c002f1c09ccd&amp;amp;displaylang=en&amp;amp;tm&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;21. Visual Studio 2008 and .NET Framework 3.5 Training Kit&lt;BR&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8bdaa836-0bba-4393-94db-6c3c4a0c98a1&amp;amp;DisplayLang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8bdaa836-0bba-4393-94db-6c3c4a0c98a1&amp;amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=8bdaa836-0bba-4393-94db-6c3c4a0c98a1&amp;amp;DisplayLang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Repare que alguns links são de comunidades ou podem ser atualizados. Assim, fica a dica para continuar acompanhando as próximas edições desses recursos.&lt;BR&gt;É sempre bom lembrar que devemos ler todas as recomendações do processo de instalação para cada um dos links acima escolhidos.&lt;/P&gt;
&lt;P&gt;Por enquanto é só. Bom divertimento e 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=6728658" width="1" height="1"&gt;</description><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></item><item><title>Tech-Ed Brasil 2007 - Um resumo...</title><link>http://blogs.msdn.com/wcamb/archive/2007/12/09/tech-ed-brasil-2007-um-resumo.aspx</link><pubDate>Sun, 09 Dec 2007 17:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6713287</guid><dc:creator>wcamb</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/6713287.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=6713287</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=6713287</wfw:comment><description>&lt;P&gt;&amp;nbsp;&lt;IMG src="http://www.techedbrasil.com.br/App_Themes/images/novo/index_06.jpg" mce_src="http://www.techedbrasil.com.br/App_Themes/images/novo/index_06.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;O evento &lt;STRONG&gt;Tech-Ed Brasil 2007&lt;/STRONG&gt; foi um sucesso! Mais de 130 sessões sobre temas importantes, de infra-estrutura a desenvolvimento, com uma grande participação de todos presentes. Muito obrigado a você que participou e fez suas perguntas, colaborando durante as várias apresentações e mesas redondas. Confira algumas fotos no blog do amigo &lt;A class="" href="http://blogs.msdn.com/renedepaula/" target=_blank mce_href="http://blogs.msdn.com/renedepaula/"&gt;René de Paula Jr&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Em breve devo publicar um post sobre algumas discussões que tivemos nas sessões de &lt;STRONG&gt;WCF - Windows Communication Foundation, WF - Windows Workflow Foundation e OBA - Office Business Application&lt;/STRONG&gt;. Muitas pessoas pediram um roteiro de &lt;EM&gt;addins&lt;/EM&gt; e &lt;EM&gt;extensões&lt;/EM&gt; que precisamos aplicar no &lt;EM&gt;Visual Studio 2005&lt;/EM&gt;, para trabalhar com os templates de WCF e WF. Isso para que ainda não experimentou o&amp;nbsp;&lt;STRONG&gt;Visual Studio 2008&lt;/STRONG&gt;, que tem todos esses recursos integrados ao ambiente.&lt;/P&gt;
&lt;P&gt;Assim, fiquem ligados pois estou preparando o roteiro com os links para sua avaliação.&lt;/P&gt;
&lt;P&gt;E para os arquitetos de plantão, fica aqui algumas dicas de livros importantes, que citei durante as sessões:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Programming WCF Services -&amp;nbsp; o livro do peixinho... :)&lt;/STRONG&gt;&lt;BR&gt;&lt;A class="" href="http://www.amazon.com/Programming-WCF-Services-Juval-Lowy/dp/0596526997/ref=sr_1_7?ie=UTF8&amp;amp;s=books&amp;amp;qid=1197209103&amp;amp;sr=8-7" target=_blank mce_href="http://www.amazon.com/Programming-WCF-Services-Juval-Lowy/dp/0596526997/ref=sr_1_7?ie=UTF8&amp;amp;s=books&amp;amp;qid=1197209103&amp;amp;sr=8-7"&gt;http://www.amazon.com/Programming-WCF-Services-Juval-Lowy/dp/0596526997/ref=sr_1_7?ie=UTF8&amp;amp;s=books&amp;amp;qid=1197209103&amp;amp;sr=8-7&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Presenting Windows Workflow Foundation &lt;BR&gt;&lt;/STRONG&gt;&lt;A class="" href="http://www.amazon.com/gp/product/0672328488" target=_blank mce_href="http://www.amazon.com/gp/product/0672328488"&gt;http://www.amazon.com/gp/product/0672328488&lt;/A&gt;&lt;BR&gt;de &lt;STRONG&gt;Paul Andrew&lt;/STRONG&gt; (veja o blog : &lt;A class="" href="http://blogs.msdn.com/pandrew/" target=_blank mce_href="http://blogs.msdn.com/pandrew/"&gt;http://blogs.msdn.com/pandrew/&lt;/A&gt; )&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Programming Windows Presentation Foundation &lt;BR&gt;&lt;/STRONG&gt;&lt;A class="" href="http://www.amazon.com/Programming-Windows-Presentation-Foundation/dp/0596101139/ref=pd_bxgy_b_img_b" target=_blank mce_href="http://www.amazon.com/Programming-Windows-Presentation-Foundation/dp/0596101139/ref=pd_bxgy_b_img_b"&gt;http://www.amazon.com/Programming-Windows-Presentation-Foundation/dp/0596101139/ref=pd_bxgy_b_img_b&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=6713287" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/OBA/default.aspx">OBA</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></item></channel></rss>