<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Rafael Godinho</title><subtitle type="html">Tecnologia para aplicações distribuídas</subtitle><id>http://blogs.msdn.com/rafaelgodinho/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/rafaelgodinho/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/rafaelgodinho/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2009-06-22T14:49:05Z</updated><entry><title>Windows Server AppFabric</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/rafaelgodinho/archive/2009/11/30/windows-server-appfabric.aspx" /><id>http://blogs.msdn.com/rafaelgodinho/archive/2009/11/30/windows-server-appfabric.aspx</id><published>2009-11-30T21:25:21Z</published><updated>2009-11-30T21:25:21Z</updated><content type="html">&lt;p align="justify"&gt;Olá pessoal,&lt;/p&gt;  &lt;p align="justify"&gt;Durante o &lt;a href="http://www.microsoftpdc.com/" target="_blank"&gt;Microsoft PDC 2009&lt;/a&gt; foi anunciado o Windows Server AppFabric Beta 1, uma evolução das tecnologias de fornecimento de aplicações, como Internet Information Services (IIS) e o Windows Process Activation Service (WAS). O AppFabric fornece capacidade para hospedagem de serviços e também cache distribuídos para as aplicações.&lt;/p&gt;  &lt;p align="justify"&gt;O AppFabric permite a hospedagem de serviços WF ou WCF e é baseado em uma tecnologia que até à pouco tempo era conhecida para codename “Dublin”. Especificamente para serviços WF, ele possui um conjunto de funcionalidades de persistência que permite armazenar estados de processamento de Workflows, recuperar um Workflow persistido para processamento e também escalar estes serviços em várias servidores.&lt;/p&gt;  &lt;p align="justify"&gt;Além da persistência de Workflows, o AppFabric também conta com um ambiente para monitoração da saúde dos serviços, contando também com funcionalidade para log de falhas que podem ocorrer no processamento, o que facilita muito no troubleshooting.&lt;/p&gt;  &lt;p align="justify"&gt;Uma outra funcionalidade que sempre foi muito pedida é a possibilidade de auto-start ou warm-up dos serviços, o que reduz a latência da primeira chamada ao serviço.&lt;/p&gt;  &lt;p align="justify"&gt;Já a funcionalidade de cache é baseada no codename “Velocity” e disponibiliza uma infra-estrutura de cache distribuído para a criação de aplicações escaláveis, com alta disponibilidade e desempenho. Permitindo as seguintes possibilidades:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Cache de qualquer objeto CLR serializável&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Scale-out pela adição de mais de um nó de cache&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Cópias backup para permitir alta disponibilidade&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Balanceamento de carga&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Integração com o ASP.NET Session State Provider&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Se vc ficou interessado, baixe agora mesmo o setup e faça seus testes:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx" target="_blank"&gt;Visual Studio 2010 and .NET Framework 4 Beta 2&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://msdn.microsoft.com/en-us/windowsserver/ee695849.aspx" target="_blank"&gt;Windows Server AppFabric&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9930391" width="1" height="1"&gt;</content><author><name>rafael.godinho</name><uri>http://blogs.msdn.com/members/rafael.godinho.aspx</uri></author><category term="WCF" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/WCF/default.aspx" /><category term="WF" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/WF/default.aspx" /><category term="AppFabric" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/AppFabric/default.aspx" /></entry><entry><title>Material para estudo de SQL Server 2008</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/rafaelgodinho/archive/2009/11/13/material-para-estudo-de-sql-server-2008.aspx" /><id>http://blogs.msdn.com/rafaelgodinho/archive/2009/11/13/material-para-estudo-de-sql-server-2008.aspx</id><published>2009-11-13T17:37:04Z</published><updated>2009-11-13T17:37:04Z</updated><content type="html">&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rafaelgodinho/WindowsLiveWriter/MaterialparaestudodeSQLServer2008_DB9B/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/rafaelgodinho/WindowsLiveWriter/MaterialparaestudodeSQLServer2008_DB9B/image_thumb.png" width="367" height="80" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Olá pessoal,&lt;/p&gt;  &lt;p&gt;Separei alguns links com materiais de estudo sobre o SQL Server 2008, com informação tanto para desenvolvimento quanto para infra-estrutura.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://sqlserver2008jumpstart.microsofttraining.com/" target="_blank"&gt;SQL Server 2008 JumpStart&lt;/a&gt; (necessário registro)&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Possui demos, labs, apresentações, vídeos e VPC para download sobre:&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Novidades do T-SQL&lt;/li&gt;        &lt;li&gt;Uso de dados não relacionais (Spatial Data, FileStream, XML, Fulltext Search)&lt;/li&gt;        &lt;li&gt;Service Broker&lt;/li&gt;        &lt;li&gt;SQLCLR&lt;/li&gt;        &lt;li&gt;Entity Framework&lt;/li&gt;        &lt;li&gt;Compatibilidade de aplicações&lt;/li&gt;        &lt;li&gt;Alta disponibilidade&lt;/li&gt;        &lt;li&gt;Replicação de dados&lt;/li&gt;        &lt;li&gt;Transparent Data Encryption&lt;/li&gt;        &lt;li&gt;Escalabilidade&lt;/li&gt;        &lt;li&gt;Gerenciamento&lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=E9C68E1B-1E0E-4299-B498-6AB3CA72A6D7&amp;amp;displaylang=en" target="_blank"&gt;SQL Server 2008 Developer Training Kit&lt;/a&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Informações de desenvolvimento sobre:&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;FileStream&lt;/li&gt;        &lt;li&gt;Spatial Data&lt;/li&gt;        &lt;li&gt;Novidades do T-SQL&lt;/li&gt;        &lt;li&gt;Tipo Date e tipo Time&lt;/li&gt;        &lt;li&gt;SQLCLR&lt;/li&gt;        &lt;li&gt;Reporting Services&lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt;    &lt;li&gt;SQL 2008 Virtual Labs&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/vlabs-app-development.aspx" target="_blank"&gt;Application Development&lt;/a&gt;&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;         &lt;p&gt;Data Programmability&lt;/p&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;p&gt;Data Platform&lt;/p&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;p&gt;Spatial Data&lt;/p&gt;       &lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;&lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/vlabs-bi.aspx" target="_blank"&gt;Business Intelligence&lt;/a&gt;&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;         &lt;p&gt;Analysis Services&lt;/p&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;p&gt;Data Mining&lt;/p&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;p&gt;SQL Server Integration Services&lt;/p&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;p&gt;SQL Server Reporting Services&lt;/p&gt;       &lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;&lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/vlabs-data-warehousing.aspx" target="_blank"&gt;Data Warehousing&lt;/a&gt;&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;         &lt;p&gt;Data Warehousing&lt;/p&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;p&gt;SQL Server 2008 Overview&lt;/p&gt;       &lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;&lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/vlabs-oltp.aspx" target="_blank"&gt;OLTP&lt;/a&gt;&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;         &lt;p&gt;High Availability – Always On&lt;/p&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;p&gt;Manageability&lt;/p&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;p&gt;Performance and Scale&lt;/p&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt;    &lt;li&gt;     &lt;p&gt;Treinamentos gratuitos&lt;/p&gt;   &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://learning.microsoft.com/Manager/ResourceDetails.aspx?resourceId=01fd1277-d731-48c0-a182-91b5b10e2a77&amp;amp;clang=en-US&amp;amp;brand=learning"&gt;Clinic 10259: SQL Server 2008: Database Infrastructure and Scalability&lt;/a&gt;&lt;/p&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;p&gt;&lt;a href="http://learning.microsoft.com/Manager/ResourceDetails.aspx?resourceId=4546db2b-8c34-4c1c-8bd6-48917ccc9255&amp;amp;clang=en-US&amp;amp;brand=learning"&gt;Clinic 10258: SQL Server 2008: Upgrade and Application Compatibility&lt;/a&gt;&lt;/p&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;p&gt;&lt;a href="http://learning.microsoft.com/Manager/ResourceDetails.aspx?resourceId=245f8a3d-7d32-41f6-b761-093e509ba8cc&amp;amp;clang=en-US&amp;amp;brand=learning"&gt;Course 6339: Database Fundamentals in Microsoft SQL Server 2008&lt;/a&gt;&lt;/p&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;p&gt;&lt;a href="http://learning.microsoft.com/Manager/ResourceDetails.aspx?resourceId=d1b0dfb0-0c11-11dd-bd0b-0800200c9a66&amp;amp;clang=en-US&amp;amp;brand=learning"&gt;Clinic 6258: New Features Of Microsoft SQL Server 2008 Reporting Services&lt;/a&gt;&lt;/p&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;p&gt;&lt;a href="http://learning.microsoft.com/Manager/ResourceDetails.aspx?resourceId=d640a100-0c11-11dd-bd0b-0800200c9a66&amp;amp;clang=en-US&amp;amp;brand=learning"&gt;Collection 6187: What’s New in Microsoft SQL Server 2008 &lt;/a&gt;&lt;/p&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;p&gt;&lt;a href="http://learning.microsoft.com/Manager/ResourceDetails.aspx?resourceId=3410bab5-6482-4583-bd73-86f5a516cb22&amp;amp;clang=en-US&amp;amp;brand=learning"&gt;Clinic 6188: What's New in Microsoft SQL Server 2008 for Enterprise Data Platform&lt;/a&gt;&lt;/p&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;p&gt;&lt;a href="http://learning.microsoft.com/Manager/ResourceDetails.aspx?resourceId=8c94655d-c39d-4cff-b8cc-607b57f86219&amp;amp;clang=en-US&amp;amp;brand=learning"&gt;Clinic 6189: What's New in Microsoft SQL Server 2008 for Business Intelligence&lt;/a&gt;&lt;/p&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;p&gt;&lt;a href="http://learning.microsoft.com/Manager/ResourceDetails.aspx?resourceId=cb7058a2-4d7f-44cd-8a6a-463ed771dfbc&amp;amp;clang=en-US&amp;amp;brand=learning"&gt;Clinic 6190: What's New in Microsoft SQL Server 2008 for Database Development&lt;/a&gt;&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;     &lt;p&gt;E-book gratuito&lt;/p&gt;   &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://csna01.libredigital.com/?urss1q2we6" target="_blank"&gt;Introducing Microsoft SQL Server 2008&lt;/a&gt; (necessário registro)&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;Se alguém tiver alguma outra dica de material de estudo para SQL 2008, favor deixar nos comentários.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9922087" width="1" height="1"&gt;</content><author><name>rafael.godinho</name><uri>http://blogs.msdn.com/members/rafael.godinho.aspx</uri></author><category term="Treinamento" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/Treinamento/default.aspx" /><category term="SQL Server" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/SQL+Server/default.aspx" /></entry><entry><title>Autenticação customizada de WCF – Parte III</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/rafaelgodinho/archive/2009/10/30/autentica-o-customizada-de-wcf-parte-iii.aspx" /><id>http://blogs.msdn.com/rafaelgodinho/archive/2009/10/30/autentica-o-customizada-de-wcf-parte-iii.aspx</id><published>2009-10-30T16:21:39Z</published><updated>2009-10-30T16:21:39Z</updated><content type="html">&lt;p&gt;Olá pessoal,&lt;/p&gt;  &lt;p&gt;Esta é a última parte da série de autenticação customizada com WCF e hoje iremos ver como o cliente fornece as informações das credenciais para o serviço.&lt;/p&gt;  &lt;p&gt;O primeiro passo é começar com uma aplicação que contém um proxy gerado para o serviço, em seguida configurá-la para utilizar autenticação do tipo UserName e também para validar o serviço através de um certificado, conforme abaixo:&lt;/p&gt;  &lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; width: 100%; overflow: scroll; border-top: black 1px solid; border-right: black 1px solid"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;






.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;    &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;configuration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;system.serviceModel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;bindings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;wsHttpBinding&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;binding&lt;/span&gt; ...&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;security&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Message&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;message&lt;/span&gt; &lt;span class="attr"&gt;clientCredentialType&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;UserName&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;security&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;binding&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;wsHttpBinding&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;bindings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        ...&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;endpointBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ClientCertificateBehaviour&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;clientCredentials&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceCertificate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;authentication&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                            &lt;span class="attr"&gt;certificateValidationMode&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;PeerOrChainTrust&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;serviceCertificate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;clientCredentials&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;endpointBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;system.serviceModel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;configuration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Em seguida, é necessário que a aplicação informe ao serviço a credencial utilizada na autenticação:&lt;/p&gt;

&lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; width: 100%; overflow: scroll; border-top: black 1px solid; border-right: black 1px solid"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;

  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;CalculatorServiceReference.CalculatorClient proxy = &lt;span class="kwrd"&gt;new&lt;/span&gt; CalculatorServiceReference.CalculatorClient();&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;proxy.ClientCredentials.UserName.UserName = &lt;span class="str"&gt;&amp;quot;administrator&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;proxy.ClientCredentials.UserName.Password = &lt;span class="str"&gt;&amp;quot;P@ssw0rd&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;double&lt;/span&gt; n = proxy.Add(1, 2);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;O download do código fonte gerado na série pode ser realizado &lt;a href="http://cid-3573ba33315680f9.skydrive.live.com/self.aspx/P%c3%bablico/CustomAuthentication.zip" target="_blank"&gt;aqui&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Posts da série:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://blogs.msdn.com/rafaelgodinho/archive/2009/09/24/autentica-o-customizada-de-wcf-parte-i.aspx" target="_blank"&gt;Parte I&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.msdn.com/rafaelgodinho/archive/2009/10/01/autentica-o-customizada-de-wcf-parte-ii.aspx" target="_blank"&gt;Parte II&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.msdn.com/rafaelgodinho/archive/2009/10/30/autentica-o-customizada-de-wcf-parte-iii.aspx" target="_blank"&gt;Parte III&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9915341" width="1" height="1"&gt;</content><author><name>rafael.godinho</name><uri>http://blogs.msdn.com/members/rafael.godinho.aspx</uri></author><category term="WCF" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/WCF/default.aspx" /><category term="Segurança" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/Seguran_E700_a/default.aspx" /></entry><entry><title>Autenticação customizada de WCF – Parte II</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/rafaelgodinho/archive/2009/10/01/autentica-o-customizada-de-wcf-parte-ii.aspx" /><id>http://blogs.msdn.com/rafaelgodinho/archive/2009/10/01/autentica-o-customizada-de-wcf-parte-ii.aspx</id><published>2009-10-01T06:00:00Z</published><updated>2009-10-01T06:00:00Z</updated><content type="html">&lt;p&gt;Olá pessoal,&lt;/p&gt;  &lt;p&gt;No post anterior da nossa série, &lt;a href="http://blogs.msdn.com/rafaelgodinho/archive/2009/09/24/autentica-o-customizada-de-wcf-parte-i.aspx" target="_blank"&gt;Autenticação customizada de WCF – Parte I&lt;/a&gt;, mostrei como criar uma classe para autenticar as informações de usuário e senha, ficando pendente como trafegar estas informações de maneira segura, através do uso de certificados. Exatamente o assunto do post de hoje.&lt;/p&gt;  &lt;p&gt;O primeiro passo é conseguir o certificado para ser utilizado na configuração do serviço. Uma opção para ambientes de produção é comprar um certificado de uma entidade certificadora, uma outra opção é gerar um certificado através do Certificate Server, uma das funcionalidade do Windows Server. Já para &lt;strong&gt;&lt;font color="#ff0000" size="4"&gt;ambientes de desenvolvimento&lt;/font&gt;&lt;/strong&gt; uma abordagem interessante pode ser gerar &lt;strong&gt;&lt;font color="#ff0000" size="4"&gt;certificados de teste&lt;/font&gt;&lt;/strong&gt; (acho que ficou claro) utilizando a ferramenta &lt;a href="http://msdn.microsoft.com/en-us/library/bfsktky3.aspx" target="_blank"&gt;makecert&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Com o makecert é necessário primeiro criar um certificado Root, utilizado na geração de outros certificados. Para isto, o comando abaixo deve ser executado no prompt de comando:&lt;/p&gt;  &lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; width: 100%; overflow: scroll; border-top: black 1px solid; border-right: black 1px solid"&gt;makecert -n &amp;quot;CN=RootCATest&amp;quot; -r -sv RootCATest.pvk RootCATest.cer&lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Depois de gerar o certificado Root, precisamos instalá-lo no computador. O que deve ser feito no Snap-in de certificados para o computador local do MMC na pasta Trusted Root Certification Authorities, conforme imagem abaixo:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rafaelgodinho/WindowsLiveWriter/AutenticaocustomizadadeWCFParteII_129C0/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/rafaelgodinho/WindowsLiveWriter/AutenticaocustomizadadeWCFParteII_129C0/image_thumb.png" width="463" height="345" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Com o certificado Root instalado, podemos utilizá-lo para gerar o certificado que irá efetivamente proteger a comunicação entre o cliente e o serviço. Para isto, o comando abaixo deve ser executado no prompt de comando:&lt;/p&gt;  &lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; width: 100%; overflow: scroll; border-top: black 1px solid; border-right: black 1px solid"&gt;makecert -sk localhost -iv RootCATest.pvk -n &amp;quot;CN=localhost&amp;quot; -ic RootCATest.cer -sr localmachine -ss trustedPeople -sky exchange -pe&lt;/div&gt;  &lt;p&gt;Notem que o comando acima cria e instala o certificado na pasta Trusted People, sem necessidade de instalação manual.&lt;/p&gt;  &lt;p&gt;Agora que os certificados foram criados e instalados, precisamos configurar o serviço e o cliente para utilizá-los. O serviço deve ser configurado utilizando a tag serviceCertificate, conforme exemplo abaixo:&lt;/p&gt;  &lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; width: 100%; overflow: scroll; border-top: black 1px solid; border-right: black 1px solid"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;    &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;WCFService.CalculatorServiceBehavior&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceMetadata&lt;/span&gt; &lt;span class="attr"&gt;httpGetEnabled&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceDebug&lt;/span&gt; &lt;span class="attr"&gt;includeExceptionDetailInFaults&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceCredentials&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;userNameAuthentication&lt;/span&gt; &lt;span class="attr"&gt;userNamePasswordValidationMode&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Custom&amp;quot;&lt;/span&gt;  &lt;span class="attr"&gt;customUserNamePasswordValidatorType&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;WCFCustomAuthentication.CustomUsernamePasswordValidator, WCFCustomAuthentication&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceCertificate&lt;/span&gt; &lt;span class="attr"&gt;findValue&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;localhost&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;x509FindType&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;FindBySubjectName&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;storeLocation&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LocalMachine&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;storeName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;TrustedPeople&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;serviceCredentials&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;serviceBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Já a configuração do cliente deve ficar similar ao código xml abaixo:&lt;/p&gt;

&lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; width: 100%; overflow: scroll; border-top: black 1px solid; border-right: black 1px solid"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;

  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;endpointBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ClientCertificateBehaviour&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;clientCredentials&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceCertificate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;authentication&lt;/span&gt; &lt;span class="attr"&gt;certificateValidationMode&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;PeerOrChainTrust&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;serviceCertificate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;clientCredentials&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;endpointBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Notem que o cliente foi configurado para validar o serviço como PeerOrChainTrust, o que significa que primeiro ele vai verificar se confia no próprio certificado e se não conseguir tenta validar a cadeia hierárquica até chegar no certificado Root. O modelo mais seguro é a validação através da hierarquia (ChainTrust), entretanto isto não é possível com certificados criados utilizando a ferramenta makecert, somente com certificados comerciais.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Posts da série:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://blogs.msdn.com/rafaelgodinho/archive/2009/09/24/autentica-o-customizada-de-wcf-parte-i.aspx" target="_blank"&gt;Parte I&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.msdn.com/rafaelgodinho/archive/2009/10/01/autentica-o-customizada-de-wcf-parte-ii.aspx" target="_blank"&gt;Parte II&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.msdn.com/rafaelgodinho/archive/2009/10/30/autentica-o-customizada-de-wcf-parte-iii.aspx" target="_blank"&gt;Parte III&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9901040" width="1" height="1"&gt;</content><author><name>rafael.godinho</name><uri>http://blogs.msdn.com/members/rafael.godinho.aspx</uri></author><category term="WCF" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/WCF/default.aspx" /><category term="Segurança" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/Seguran_E700_a/default.aspx" /></entry><entry><title>Autenticação customizada de WCF – Parte I</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/rafaelgodinho/archive/2009/09/24/autentica-o-customizada-de-wcf-parte-i.aspx" /><id>http://blogs.msdn.com/rafaelgodinho/archive/2009/09/24/autentica-o-customizada-de-wcf-parte-i.aspx</id><published>2009-09-24T21:10:03Z</published><updated>2009-09-24T21:10:03Z</updated><content type="html">&lt;p&gt;Olá pessoal,&lt;/p&gt;  &lt;p&gt;Estava conversando com um cliente sobre como um serviço WCF pode autenticar de maneira customizada as chamadas que recebe, confrontando as informações de usuário e senha com os dados de uma tabela em um banco de dados.&lt;/p&gt;  &lt;p&gt;O primeiro para é criar uma classe para autenticar as chamadas do serviço. Esta classe deve herdar de System.IdentityModel.Selectors.UserNamePasswordValidator, disponível no assembly System.IdentityModel, e implementar o método Validate, conforme abaixo:&lt;/p&gt;  &lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; width: 100%; overflow: scroll; border-top: black 1px solid; border-right: black 1px solid"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;








.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;    &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CustomUsernamePasswordValidator : UserNamePasswordValidator&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;  {&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Validate(&lt;span class="kwrd"&gt;string&lt;/span&gt; userName, &lt;span class="kwrd"&gt;string&lt;/span&gt; password)&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    {&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;      &lt;span class="kwrd"&gt;if&lt;/span&gt; (userName == &lt;span class="kwrd"&gt;null&lt;/span&gt; || password == &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;      {&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ArgumentNullException();&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;      }&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;      &lt;span class="kwrd"&gt;if&lt;/span&gt; (!(userName == &lt;span class="str"&gt;&amp;quot;administrator&amp;quot;&lt;/span&gt; &amp;amp;&amp;amp; password == &lt;span class="str"&gt;&amp;quot;P@ssw0rd&amp;quot;&lt;/span&gt;))&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;      {&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; FaultException(&lt;span class="str"&gt;&amp;quot;Unknown username or invalid password&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;      }&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    }&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;  }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Notem que por uma questão de facilidade não estou utilizando um banco de dados para validar usuário e senha, mas sim comparando as informações recebidas contra constantes no meu código. Se a autenticação não ocorrer com sucesso emito uma mensagem de erro do tipo FaulException, que é o tipo de exceção possível de ser propagada pelo WCF &lt;strike&gt;(isso vale um post)&lt;/strike&gt;.&lt;/p&gt;

&lt;p&gt;Em seguida é necessário configurar o serviço para utilizar esta customização para autenticação no arquivo de configurações:&lt;/p&gt;

&lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; width: 100%; overflow: scroll; border-top: black 1px solid; border-right: black 1px solid"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;

  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;services&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;service&lt;/span&gt; &lt;span class="attr"&gt;behaviorConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;WCFService.CalculatorServiceBehavior&amp;quot;&lt;/span&gt; ...&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        ...&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;service&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;services&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;WCFService.CalculatorServiceBehavior&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceMetadata&lt;/span&gt; &lt;span class="attr"&gt;httpGetEnabled&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceDebug&lt;/span&gt; &lt;span class="attr"&gt;includeExceptionDetailInFaults&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceCredentials&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;userNameAuthentication&lt;/span&gt; &lt;span class="attr"&gt;userNamePasswordValidationMode&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Custom&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;customUserNamePasswordValidatorType&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;WCFCustomAuthentication.CustomUsernamePasswordValidator, WCFCustomAuthentication&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;serviceCredentials&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;serviceBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Agora é necessário configurar tanto o serviço quanto o cliente para autenticar as chamadas através de usuário e senha nos seus bindings:&lt;/p&gt;

&lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; width: 100%; overflow: scroll; border-top: black 1px solid; border-right: black 1px solid"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;

  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;bindings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;wsHttpBinding&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;binding&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;wsHttpBindingWithMessageSecurity&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;security&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Message&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;message&lt;/span&gt; &lt;span class="attr"&gt;clientCredentialType&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;UserName&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;security&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;binding&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;wsHttpBinding&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;bindings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Como as informações de usuário e senha passam de maneira aberta é necessário configurar a comunicação para ocorrer de maneira segura utilizando um certificado, mas isto é assunto para o post &lt;a href="http://blogs.msdn.com/rafaelgodinho/archive/2009/10/01/autentica-o-customizada-de-wcf-parte-ii.aspx" target="_blank"&gt;Autenticação customizada de WCF – Parte II&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Por último também é necessário que o cliente do serviço informe as credenciais na chamadas das operações, assunto do post &lt;a href="http://blogs.msdn.com/rafaelgodinho/archive/2009/10/30/autentica-o-customizada-de-wcf-parte-iii.aspx" target="_blank"&gt;Autenticação customizada de WCF – Parte III&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Posts da série:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://blogs.msdn.com/rafaelgodinho/archive/2009/09/24/autentica-o-customizada-de-wcf-parte-i.aspx" target="_blank"&gt;Parte I&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.msdn.com/rafaelgodinho/archive/2009/10/01/autentica-o-customizada-de-wcf-parte-ii.aspx" target="_blank"&gt;Parte II&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.msdn.com/rafaelgodinho/archive/2009/10/30/autentica-o-customizada-de-wcf-parte-iii.aspx" target="_blank"&gt;Parte III&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9899153" width="1" height="1"&gt;</content><author><name>rafael.godinho</name><uri>http://blogs.msdn.com/members/rafael.godinho.aspx</uri></author><category term="WCF" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/WCF/default.aspx" /><category term="Segurança" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/Seguran_E700_a/default.aspx" /></entry><entry><title>Hands On Lab de ALM para parceiros Microsoft</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/rafaelgodinho/archive/2009/09/24/hands-on-lab-de-alm-para-parceiros-microsoft.aspx" /><id>http://blogs.msdn.com/rafaelgodinho/archive/2009/09/24/hands-on-lab-de-alm-para-parceiros-microsoft.aspx</id><published>2009-09-24T04:51:51Z</published><updated>2009-09-24T04:51:51Z</updated><content type="html">&lt;p&gt;Olá pessoal,&lt;/p&gt;  &lt;p&gt;Nos dias 24 e 25 de setembro de 2009 teremos na Microsoft/SP dois Hands On Labs de ALM para parceiros Microsoft. Se você trabalha em um parceiro pode se inscrever.&lt;/p&gt;  &lt;p&gt;No total teremos 24 laboratórios com foco em: desenvolvimento em times, controle de versões, análise de código, testes e builds.&lt;/p&gt;  &lt;p&gt;As inscrições podem ser feitas aqui (mesmo HOL em dois dias diferentes):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="https://training.partner.microsoft.com/learning/app/management/LMS_ActDetails.aspx?UserMode=0&amp;amp;ActivityId=552045" target="_blank"&gt;24 de setembro de 2009&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="https://training.partner.microsoft.com/learning/app/management/LMS_ActDetails.aspx?UserMode=0&amp;amp;ActivityId=551863" target="_blank"&gt;25 de setembro de 2009&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Local: Microsoft Brasil   &lt;br /&gt;Av. Nações Unidas, 12.901, Torre Norte 31º andar    &lt;br /&gt;04578-000 São Paulo, SP&lt;/p&gt;  &lt;p&gt;Lembre-se de me avisar se você se inscrever.&lt;/p&gt;  &lt;p&gt;Abraços,   &lt;br /&gt;Rafael&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9898755" width="1" height="1"&gt;</content><author><name>rafael.godinho</name><uri>http://blogs.msdn.com/members/rafael.godinho.aspx</uri></author><category term="Treinamento" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/Treinamento/default.aspx" /><category term="Parceiros" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/Parceiros/default.aspx" /></entry><entry><title>Hands On Lab de .NET Framework 3.x</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/rafaelgodinho/archive/2009/09/22/hands-on-lab-de-net-framework-3-x.aspx" /><id>http://blogs.msdn.com/rafaelgodinho/archive/2009/09/22/hands-on-lab-de-net-framework-3-x.aspx</id><published>2009-09-22T21:06:47Z</published><updated>2009-09-22T21:06:47Z</updated><content type="html">&lt;p&gt;Olá pessoal,&lt;/p&gt;  &lt;p&gt;Nesta semana estamos tendo na Microsoft Brasil alguns HOLs (Hands On Labs) de .NET Framework 3.x (3.0, 3.5 e 3.5 SP1) para parceiros e uma dúvida que o pessoal teve foi como replicar o conteúdo nas empresas e também como preparar uma máquina virtual igual a utilizada na sala de aula.&lt;/p&gt;  &lt;p&gt;Separei aqui algumas referências que utilizei para preparar o ambiente:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c7a809d8-8c9f-439f-8147-948bc6957812&amp;amp;displaylang=en" target="_blank"&gt;Máquina virtual de Visual Studio 2008&lt;/a&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Neste &lt;a href="http://blogs.msdn.com/briankel/archive/2007/09/06/a-more-reliable-and-faster-download-experience-for-rosario-vs08-vpc-s.aspx" target="_blank"&gt;post&lt;/a&gt; o Brian Keller mostra como fazer o download de maneira mais fácil, pois são vários arquivos compactados&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b&amp;amp;displaylang=en" target="_blank"&gt;ASP.NET MVC&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://cid-3573ba33315680f9.skydrive.live.com/self.aspx/P%c3%bablico/2006-11-07%20-%20NetFx3TrainingKit.EXE" target="_blank"&gt;.NET Framework 3.0 Training Kit: WF, WCF, and CardSpace&lt;/a&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;O site que hospedava este training kit não está mais no ar, então subi um dos meus backups no SkyDrive.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8BDAA836-0BBA-4393-94DB-6C3C4A0C98A1&amp;amp;displaylang=en" target="_blank"&gt;Visual Studio 2008 and .NET Framework 3.5 Training Kit&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=355C80E9-FDE0-4812-98B5-8A03F5874E96&amp;amp;displaylang=en" target="_blank"&gt;.NET Framework 3.5 Enhancements Training Kit&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e82db5e2-7106-419e-80b0-65cce89f06bb&amp;amp;displaylang=en" target="_blank"&gt;Microsoft Expression Blend 3&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Abraços e até a próxima.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9898125" width="1" height="1"&gt;</content><author><name>rafael.godinho</name><uri>http://blogs.msdn.com/members/rafael.godinho.aspx</uri></author><category term="Tutorial" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/Tutorial/default.aspx" /><category term="Treinamento" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/Treinamento/default.aspx" /><category term=".NET Framework" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/.NET+Framework/default.aspx" /></entry><entry><title>TechCast Brasil – Introdução ao WF 4.0</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/rafaelgodinho/archive/2009/09/15/techcast-brasil-introdu-o-ao-wf-4-0.aspx" /><id>http://blogs.msdn.com/rafaelgodinho/archive/2009/09/15/techcast-brasil-introdu-o-ao-wf-4-0.aspx</id><published>2009-09-15T02:44:00Z</published><updated>2009-09-15T02:44:00Z</updated><content type="html">&lt;p&gt;Olá pessoal,&lt;/p&gt;  &lt;p&gt;Gravei meu primeiro vídeo para o &lt;a href="http://channel9.msdn.com" target="_blank"&gt;Channel9&lt;/a&gt;, é um vídeo com uma &lt;a href="http://channel9.msdn.com/posts/Markus+Christen/TechCastBrasil-WF-40/" target="_blank"&gt;introdução ao WF 4.0&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rafaelgodinho/WindowsLiveWriter/TechCastBrasilIntroduoaoWF4.0_12388/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/rafaelgodinho/WindowsLiveWriter/TechCastBrasilIntroduoaoWF4.0_12388/image_thumb_1.png" width="332" height="241" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Lembrem-se de comentar o que acharam.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9895178" width="1" height="1"&gt;</content><author><name>rafael.godinho</name><uri>http://blogs.msdn.com/members/rafael.godinho.aspx</uri></author><category term="WF" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/WF/default.aspx" /><category term="Channel9" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/Channel9/default.aspx" /></entry><entry><title>Demos das apresentações no TechEd</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/rafaelgodinho/archive/2009/08/31/demos-das-apresenta-es-no-teched.aspx" /><id>http://blogs.msdn.com/rafaelgodinho/archive/2009/08/31/demos-das-apresenta-es-no-teched.aspx</id><published>2009-08-31T16:12:00Z</published><updated>2009-08-31T16:12:00Z</updated><content type="html">&lt;p&gt;Olá pessoal,&lt;/p&gt;  &lt;p&gt;Semana passada ocorreu o &lt;a href="http://www.teched.com.br/"&gt;TechEd&lt;/a&gt;, principal evento técnico da Microsoft no Brasil, onde foram apresentadas grandes novidades em várias palestras, como: Windows 7, Windows Server 2008 R2, Visual Studio 2010 e .NET Framework 4.0 e Windows Azure.&lt;/p&gt;  &lt;p&gt;Fiz três palestras, todas com sala cheia, abaixo separei as demos para download:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://cid-3573ba33315680f9.skydrive.live.com/self.aspx/P%c3%bablico/AZP302%20-%20DotNetServices.zip"&gt;AZP302 - Compreendendo e utilizando o .Net Services&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://cid-3573ba33315680f9.skydrive.live.com/self.aspx/P%c3%bablico/DEV308%20-%20REST.zip"&gt;DEV308 - Criando serviços RESTful com WCF&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://cid-3573ba33315680f9.skydrive.live.com/self.aspx/P%c3%bablico/DEV309%20-%20WCFWF4.zip" target="_blank"&gt;DEV309 - Visão geral do WCF e do WF no .NET Framework 4.0&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;As apresentações serão disponibilizadas para download no site do evento.&lt;/p&gt;  &lt;p&gt;Se você esteve presente em alguma das minhas palestras e quer discutir algum tópico, faça seu comentário :)&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9889341" width="1" height="1"&gt;</content><author><name>rafael.godinho</name><uri>http://blogs.msdn.com/members/rafael.godinho.aspx</uri></author><category term="WCF" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/WCF/default.aspx" /><category term="TechEd" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/TechEd/default.aspx" /><category term="Azure" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/Azure/default.aspx" /><category term=".NET Services" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/.NET+Services/default.aspx" /><category term="REST" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/REST/default.aspx" /><category term="WF" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/WF/default.aspx" /></entry><entry><title>Boot de VHD no Windows 7</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/rafaelgodinho/archive/2009/08/17/boot-de-vhd-no-windows-7.aspx" /><id>http://blogs.msdn.com/rafaelgodinho/archive/2009/08/17/boot-de-vhd-no-windows-7.aspx</id><published>2009-08-17T07:20:39Z</published><updated>2009-08-17T07:20:39Z</updated><content type="html">&lt;p align="justify"&gt;Olá pessoal,&lt;/p&gt;  &lt;p align="justify"&gt;Estou preparando meu ambiente para as demos no TechEd Brasil 2009 e resolvi testar uma funcionalidade de conseguir dar boot de arquivos vhd do Windows 7. Abaixo você encontra algumas dicas e a maneira que utilizei para fazer a instalação, existem outras.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Dicas&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;A versão do Windows 7 que precisa ser instalada no arquivo vhd é a Ultimate ou Enterprise, outras versão não são suportadas;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;O arquivo vhd precisa estar em um file system NTFS;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;O arquivo vhd não pode estar compactado com NTFS; &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;O arquivo vhd precisa estar em um disco interno do computador, não é possível dar boot de vhd armazenado em disco USB;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;O disco do computador precisa ter de espaço livre pelo menos o tamanho total do VHD, mesmo para um VHD dinâmico.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Como vocês devem imaginar, cometi todos os erros acima na minha instalação :)&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Criação do arquivo VHD&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;O primeiro passo é criar um disco VHD, que pode ser realizado através da linha de comando DISKPART:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;DISKPART      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; CREATE VDISK FILE=C:\VHD\&amp;lt;filename&amp;gt;.vhd MAXIMUM=20000 TYPE=EXPANDABLE       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SELECT VDISK FILE=C:\VHD\&amp;lt;filename&amp;gt;.vhd       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ATTACH VDISK       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; CREATE PARTITION PRIMARY       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ASSIGN LETTER=V       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; FORMAT QUICK FS=NTFS LABEL=VHD       &lt;br /&gt;EXIT&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Instalação&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Depois do arquivo criado VHD, é necessário instalar o Windows 7. Existem algumas maneiras de realizar a instalação, eu preferi o script powershell &lt;a href="http://code.msdn.microsoft.com/InstallWindowsImage/Project/License.aspx"&gt;Install-WindowsImagem&lt;/a&gt;, que pode ser utilizado para instalar um arquivo de imagem Windows (.wim), disponível no disco de instalação do Windows 7 em um arquivo VHD.&lt;/p&gt;  &lt;p align="justify"&gt;O arquivo wim está localizado no diretório \sources\install.wim da instalação do Windows 7.&lt;/p&gt;  &lt;p align="justify"&gt;Parar este script é necessário modificar a permissão de execução de scripts, conforme comando abaixo:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;PS &amp;gt; set-ExecutionPolicy RemoteSigned&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Em seguida devemos descobrir qual versão de Windows instalar, o comando abaixo lista as versões disponíveis:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;PS&amp;gt; .\Install-WindowsImage.ps1 -WIM D:\sources\install.wim&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Já a instalação leva em torno de 15 minutos e pode ser feita com o comando:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;PS&amp;gt; .\Install-WindowsImage.ps1 -WIM D:\sources\install.wim -Apply -Index 5 -Destination V:&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Configuração do boot&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Após a instalação é necessário configurar o Windows 7 para o boot, imaginando que o disco que foi feita a instalação está montado no drive V, o processo seria feito com o comando:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;V:\Windows\System32\bcdboot V:\Windows&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Ao realizar um boot será exibido um menu para escolha de qual instalação subir, é só escolher a opção para o boot do VHD e terminar o processo de instalação.&lt;/p&gt;  &lt;p align="justify"&gt;Maiores detalhes podem ser encontrados no documento &lt;a href="http://code.msdn.microsoft.com/InstallWindowsImage/Release/ProjectReleases.aspx?ReleaseId=2662"&gt;Using Install-WindowsImage to apply a Windows Image to a VHD&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9871994" width="1" height="1"&gt;</content><author><name>rafael.godinho</name><uri>http://blogs.msdn.com/members/rafael.godinho.aspx</uri></author><category term="Windows 7" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/Windows+7/default.aspx" /></entry><entry><title>Material para estudo de .NET Framework 3.x</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/rafaelgodinho/archive/2009/07/27/material-para-estudo-de-net-framework-3-x.aspx" /><id>http://blogs.msdn.com/rafaelgodinho/archive/2009/07/27/material-para-estudo-de-net-framework-3-x.aspx</id><published>2009-07-28T00:14:44Z</published><updated>2009-07-28T00:14:44Z</updated><content type="html">&lt;p&gt;Olá pessoal, tudo bom?&lt;/p&gt;  &lt;p align="justify"&gt;Hoje separei alguns links de estudo de .NET Framework 3.x para passar para vocês. Como sabemos, as versões mais atuais do .NET Framework nada mais são do que conjunto de classes e funcionalidades que foram incorporadas ao .NET Framework em uma estrutura de pilha e funcionam em cima da Common Language Runtime do .NET Framework 2.0, conforme ilustração abaixo.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rafaelgodinho/WindowsLiveWriter/Materialparaestudode.NETFramework3.x_C74C/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Pilha do .NET Framework 3.x" border="0" alt="Pilha do .NET Framework 3.x" src="http://blogs.msdn.com/blogfiles/rafaelgodinho/WindowsLiveWriter/Materialparaestudode.NETFramework3.x_C74C/image_thumb.png" width="441" height="480" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Na ordem cronológica temos:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;.NET Framework 3.0: &lt;/strong&gt;Lançado em 2006, apresenta como novidades:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Windows Communication Foundation (WCF):&lt;/strong&gt; Permite o desenvolvimento de aplicações distribuídas através de uma plataforma unificada de comunicação, permitindo que os desenvolvedores criem serviços através de diferentes protocolos sem precisar conhecer os detalhes de cada um.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Windows Presentation Foundation (WPF):&lt;/strong&gt; Introduziu uma maneira fácil de criar aplicações com uma rica interface visual através de linguagem de marcação XAML, com suporte à aceleração por hardware, transparências, gradientes, animações e transformações.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Windows Workflow Foundation (WF):&lt;/strong&gt; Fornece uma modelo de programação para workflows, com possibilidade suporte à transações de longa duração e persistência de informações gerenciadas pelo próprio runtime.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;CardSpace:&lt;/strong&gt; Mecanismo de gerenciamento de tokens de identidade para aplicações cliente.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Uma excelente maneira de estudar os conceitos do .NET Framework 3.0 é através do seu &lt;a href="http://cid-3573ba33315680f9.skydrive.live.com/self.aspx/P%c3%bablico/2006-11-07%20-%20NetFx3TrainingKit.EXE"&gt;Training Kit&lt;/a&gt;, que coloquei para download no meu SkyDrive.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;.NET Framework 3.5:&lt;/strong&gt; Esta versão foi lançada em 2007 e trouxe uma séria de novas funcionalidades, dentre as quais considero as principais:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;LINQ(Language Integrated Query):&lt;/strong&gt; Define uma padronização para criação de queries na própria linguagem de programação, com suporte à consulta em objetos, XML e bases de dados SQL Server.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;C# 3.0 e VB.NET 9.0:&lt;/strong&gt; Novidades nas linguagens de programação, como: suporte à LINQ, object/collection initializers, anonymous types, automatic properties e extension methods (optei por manter os termos em inglês).&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Melhorias no WCF:&lt;/strong&gt; Exposição de WFs como serviços, suporte nativo à REST, POX e JSON.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;ASP.NET AJAX:&lt;/strong&gt; Nesta versão o AJAX veio integrado ao .NET Framework e Visual Studio, sem a necessidade de uma instalação separada.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Para estudar recomendo baixar o &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8BDAA836-0BBA-4393-94DB-6C3C4A0C98A1&amp;amp;displaylang=en"&gt;Visual Studio 2008 and .NET Framework 3.5 Training Kit&lt;/a&gt;, onde você vai encontrar uma série de Hands On Labs sobre os assuntos acima, entre outras novidades.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;.NET Framework 3.5 SP1: &lt;/strong&gt;O Service Pack 1 do .NET Framework 3.5, lançado em 2008, não se preocupou somente na correção de erros e melhoria de desempenho, ele trouxe uma série de novidades para os desenvolvedores, as principais são:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;ADO.NET Entity Framework:&lt;/strong&gt; É a primeira versão de um ORM (Object Relational Mapping) para o .NET Framework, permitindo o mapeamento de informações em banco de dados para objetos na memória e também o contrário.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;ADO.NET Data Services: &lt;/strong&gt;Mecanismos de exposição de dados através de um serviços com uma interface REST.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;ASP.NET Routing:&lt;/strong&gt; Funcionalidade de interpretação e roteamento das requisições ASP.NET, utilizado internamento pelo ASP.NET Dynamica Data e ASP.NET MVC.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;ASP.NET Dynamic Data:&lt;/strong&gt; Possibilita a criação de páginas para manipulação de dados no estilo CRUD.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;O material de estudo recomendado é o &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=355C80E9-FDE0-4812-98B5-8A03F5874E96&amp;amp;displaylang=en"&gt;.NET Framework 3.5 Enhancements Training Kit&lt;/a&gt;, onde você encontra as novidades listadas acima além de outras novidades do .NET Framework 3.5 SP1.&lt;/p&gt;  &lt;p align="justify"&gt;Espero que os Training Kits que separei para vocês possam ajudar no estudo e no uso das APIs do .NET Framework 3.x.&lt;/p&gt;  &lt;p align="justify"&gt;Até a próxima e não esqueçam de comentar.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9850321" width="1" height="1"&gt;</content><author><name>rafael.godinho</name><uri>http://blogs.msdn.com/members/rafael.godinho.aspx</uri></author><category term=".NET Framework" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/.NET+Framework/default.aspx" /></entry><entry><title>12o Encontro DotNetArchitects</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/rafaelgodinho/archive/2009/07/21/12o-encontro-dotnetarchitects.aspx" /><id>http://blogs.msdn.com/rafaelgodinho/archive/2009/07/21/12o-encontro-dotnetarchitects.aspx</id><published>2009-07-21T04:23:05Z</published><updated>2009-07-21T04:23:05Z</updated><content type="html">&lt;p align="justify"&gt;Olá pessoal, tudo bom? &lt;/p&gt;  &lt;p align="justify"&gt;No último sábado (18/07/2009) participei do 12o encontro do grupo &lt;a href="http://www.dotnetarchitects.net"&gt;DotNetArchitects&lt;/a&gt; e fiz uma apresentação sobre aplicações distribuídas com WCF, onde comentei sobre: motivação para uso de serviços, visão geral do WCF e cenários de uso do WCF. No final foi muito bacana, fizemos uma discussão sobre o assunto que acabou se estendendo até o uso de Oslo.&lt;/p&gt;  &lt;p align="justify"&gt;Cheguei a fazer também algumas demos sobre a criação de serviços, hospedagem de serviços em uma aplicação .NET, no IIS e também no WAS. No final também falei um pouco sobre serviços REST com WCF. &lt;/p&gt;  &lt;p align="justify"&gt;Se alguém tiver interesse, coloquei a apresentação para download no &lt;a href="http://cid-3573ba33315680f9.skydrive.live.com/self.aspx/P%c3%bablico/Distribuindo%20aplica%c3%a7%c3%b5es%20com%20WCF.pptx"&gt;SkyDrive&lt;/a&gt;. &lt;/p&gt;  &lt;p align="justify"&gt;[]'s    &lt;br /&gt;Rafael&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9842603" width="1" height="1"&gt;</content><author><name>rafael.godinho</name><uri>http://blogs.msdn.com/members/rafael.godinho.aspx</uri></author><category term="WCF" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/WCF/default.aspx" /><category term="DotNetArchitects" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/DotNetArchitects/default.aspx" /></entry><entry><title>Screencast – Consumindo serviços WCF</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/rafaelgodinho/archive/2009/07/14/screencast-consumindo-servi-os-wcf.aspx" /><id>http://blogs.msdn.com/rafaelgodinho/archive/2009/07/14/screencast-consumindo-servi-os-wcf.aspx</id><published>2009-07-14T15:51:10Z</published><updated>2009-07-14T15:51:10Z</updated><content type="html">&lt;p&gt;Olá pessoal,&lt;/p&gt;  &lt;p&gt;Dando continuidade à nossa série de WCF, segue screencast mostrando como consumir serviços WCF através de uma aplicação cliente.&lt;/p&gt; &lt;iframe style="width: 500px; height: 375px" src="http://silverlight.services.live.com/invoke/70695/Cliente%20WCF/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;Para assistir offline, o download pode ser realizado &lt;a href="http://silverlight.services.live.com/70695/Cliente%20WCF/video.wmv"&gt;aqui&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9833077" width="1" height="1"&gt;</content><author><name>rafael.godinho</name><uri>http://blogs.msdn.com/members/rafael.godinho.aspx</uri></author><category term="WCF" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/WCF/default.aspx" /><category term="Tutorial" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/Tutorial/default.aspx" /><category term="Screencast" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/Screencast/default.aspx" /></entry><entry><title>Consumindo serviços WCF</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/rafaelgodinho/archive/2009/06/26/consumindo-servi-os-wcf.aspx" /><id>http://blogs.msdn.com/rafaelgodinho/archive/2009/06/26/consumindo-servi-os-wcf.aspx</id><published>2009-06-26T18:27:35Z</published><updated>2009-06-26T18:27:35Z</updated><content type="html">&lt;p&gt;Olá pessoal, dando continuidade às postagens sobre WCF, agora vou comentar sobre como consumir serviços utilizando WCF.&lt;/p&gt; &lt;p&gt;O primeiro passo é adicionar um novo projeto na solução, aqui vou adicionar um projeto do tipo &lt;em&gt;WPF Application&lt;/em&gt; e a solução deve ficar assim:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rafaelgodinho/WindowsLiveWriter/ConsumindoserviosWCF_AF11/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Solu&amp;ccedil;&amp;atilde;o servi&amp;ccedil;o cliente WCF" border="0" alt="Solu&amp;ccedil;&amp;atilde;o servi&amp;ccedil;o cliente WCF" src="http://blogs.msdn.com/blogfiles/rafaelgodinho/WindowsLiveWriter/ConsumindoserviosWCF_AF11/image_thumb.png" width="200" height="127"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Em seguida é necessário criar uma interface para o cliente do serviço, para isto basta utilizar o XAML abaixo.&lt;/p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt; &lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt; &lt;span class="attr"&gt;x:Class&lt;/span&gt;&lt;span class="kwrd"&gt;="ClienteWCF.Window1"&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="attr"&gt;xmlns:x&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        &lt;span class="attr"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;="ClienteWCF"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="300"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="300"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ColumnDefinition&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ColumnDefinition&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="40*"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="40*"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="40*"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="200*"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Valor1:"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                   &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="5"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Valor2:"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                   &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="5"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Resultado:"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                   &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="5"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBox&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="Valor1TextBox"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                 &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="5"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBox&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="Valor2TextBox"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                 &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="5"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="ResultadoTextBlock"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                   &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="5"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Button&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="SomarButton"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="3"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;ColumnSpan&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;                &lt;span class="attr"&gt;Click&lt;/span&gt;&lt;span class="kwrd"&gt;="SomarButton_Click"&lt;/span&gt; &lt;span class="attr"&gt;Content&lt;/span&gt;&lt;span class="kwrd"&gt;="Somar"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="100"&lt;/span&gt;  &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="40"&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Top"&lt;/span&gt;  &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="5"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Que deve gerar a seguinte tela:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rafaelgodinho/WindowsLiveWriter/ConsumindoserviosWCF_AF11/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Interface WPF cliente WCF" border="0" alt="Interface WPF cliente WCF" src="http://blogs.msdn.com/blogfiles/rafaelgodinho/WindowsLiveWriter/ConsumindoserviosWCF_AF11/image_thumb_1.png" width="335" height="324"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Depois é necessário adicionar uma referência para o serviço WCF, conforme na tela abaixo&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rafaelgodinho/WindowsLiveWriter/ConsumindoserviosWCF_AF11/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Inclus&amp;atilde;o de refer&amp;ecirc;ncia do servi&amp;ccedil;o" border="0" alt="Inclus&amp;atilde;o de refer&amp;ecirc;ncia do servi&amp;ccedil;o" src="http://blogs.msdn.com/blogfiles/rafaelgodinho/WindowsLiveWriter/ConsumindoserviosWCF_AF11/image_thumb_2.png" width="252" height="132"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Em seguida clique no botão &lt;em&gt;Discover&lt;/em&gt; para pesquisar pelos projetos de serviço na solução, escolha o serviço da calculadora e forneça um nome para o &lt;em&gt;namespace&lt;/em&gt;, no exemplo o nome é &lt;em&gt;CalcServiceReference&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rafaelgodinho/WindowsLiveWriter/ConsumindoserviosWCF_AF11/image_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/rafaelgodinho/WindowsLiveWriter/ConsumindoserviosWCF_AF11/image_thumb_3.png" width="522" height="423"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Com a referência criada o próximo passo é criar o código para chamar o serviço, conforme o seguinte exemplo.&lt;/p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SomarButton_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    var servico = &lt;span class="kwrd"&gt;new&lt;/span&gt; CalcServiceReference.CalcServiceClient();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    var valor1 = &lt;span class="kwrd"&gt;double&lt;/span&gt;.Parse(Valor1TextBox.Text);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    var valor2 = &lt;span class="kwrd"&gt;double&lt;/span&gt;.Parse(Valor2TextBox.Text);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    var resultado = servico.Add(valor1, valor2);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    ResultadoTextBlock.Text = resultado.ToString();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;font face="Tahoma"&gt;Depois é só compilar e testar a aplicação, segue o print do meu teste.&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rafaelgodinho/WindowsLiveWriter/ConsumindoserviosWCF_AF11/image_10.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Cliente WCF executando" border="0" alt="Cliente WCF executando" src="http://blogs.msdn.com/blogfiles/rafaelgodinho/WindowsLiveWriter/ConsumindoserviosWCF_AF11/image_thumb_4.png" width="300" height="300"&gt;&lt;/a&gt; &lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;font face="Tahoma"&gt;O código fonte deste post pode ser acessado &lt;a href="http://cid-3573ba33315680f9.skydrive.live.com/self.aspx/P%c3%bablico/ClienteWCF.zip"&gt;aqui&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9805599" width="1" height="1"&gt;</content><author><name>rafael.godinho</name><uri>http://blogs.msdn.com/members/rafael.godinho.aspx</uri></author><category term="WCF" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/WCF/default.aspx" /><category term="Tutorial" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/Tutorial/default.aspx" /></entry><entry><title>Webcast – Visão Geral do Windows 7 no ambiente de Desenvolvimento</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/rafaelgodinho/archive/2009/06/22/webcast-vis-o-geral-do-windows-7-no-ambiente-de-desenvolvimento.aspx" /><id>http://blogs.msdn.com/rafaelgodinho/archive/2009/06/22/webcast-vis-o-geral-do-windows-7-no-ambiente-de-desenvolvimento.aspx</id><published>2009-06-22T16:49:05Z</published><updated>2009-06-22T16:49:05Z</updated><content type="html">&lt;p&gt;Olá pessoal,&lt;/p&gt;  &lt;p&gt;Amanhã vou fazer um webcast, em conjunto com o &lt;a href="http://blogs.msdn.com/alexschulz/"&gt;Alex Schulz&lt;/a&gt;, sobre as novidades do Windows 7 para os desenvolvedores. Estão todos convidados para participar!&lt;/p&gt;  &lt;p&gt;A inscrição no webcast pode ser feita &lt;a href="https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032416653&amp;amp;EventCategory=4&amp;amp;culture=pt-BR&amp;amp;CountryCode=BR"&gt;aqui&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Até a próxima.   &lt;br /&gt;Rafael Godinho&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9797651" width="1" height="1"&gt;</content><author><name>rafael.godinho</name><uri>http://blogs.msdn.com/members/rafael.godinho.aspx</uri></author><category term="Webcast" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/Webcast/default.aspx" /><category term="Windows 7" scheme="http://blogs.msdn.com/rafaelgodinho/archive/tags/Windows+7/default.aspx" /></entry></feed>