<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Rafael Godinho</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/rafaelgodinho/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/rafaelgodinho/feed.xml</link>
    <description>Tecnologia para aplicações distribuídas</description>
    <lastBuildDate>Tue, 16 Apr 2019 05:24:19 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Palestra no TDC 2014</title>
      <link>https://docs.microsoft.com/archive/blogs/rafaelgodinho/palestra-no-tdc-2014</link>
      <pubDate>Wed, 13 Aug 2014 07:11:40 GMT</pubDate>
      <dc:creator><![CDATA[Rafael.Godinho]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rafaelgodinho/2014/08/13/palestra-no-tdc-2014/</guid>
      <description><![CDATA[Olá pessoal,  Semana passada fiz uma palestra no TDC 2014 na trilha de Arquitetura .NET, o tema da...]]></description>
      <content:encoded><![CDATA[<p>Olá pessoal,</p>  <p>Semana passada fiz uma palestra no TDC 2014 na trilha de Arquitetura .NET, o tema da minha palestra foi “Arquitetura de Big Data no Microsoft Azure”.</p>  <p>Na palestra falei um pouco sobre Big Data, Azure e <a href="https://azure.microsoft.com/pt-br/services/hdinsight/">HDInsight</a>. Depois disso falei um pouco sobre o livro <a href="https://msdn.microsoft.com/en-us/library/dn749874.aspx">Developing Big Data Solutions on Microsoft Azure HDInsight</a>, publicado pelo time de Patterns &amp; Practices e que fui um dos revisores. No livro existem quatro cenários bastante interessantes para o uso de Big Data: iterativo, ETL, Data Warehousing e BI.</p>  <p>O PPT da minha sessão pode ser encontrado abaixo:</p>  <p><iframe height="367" src="https://onedrive.live.com/embed?cid=3573BA33315680F9&amp;resid=3573BA33315680F9%2118711&amp;authkey=&amp;em=2&amp;wdAr=1.7777777777777776" frameborder="0" width="610">Este é um apresentação do &lt;a target=&quot;_blank&quot; href=&quot;https://office.com&quot;&gt;Microsoft Office&lt;/a&gt; inserido, desenvolvido por &lt;a target=&quot;_blank&quot; href=&quot;https://office.com/webapps&quot;&gt;Office Online&lt;/a&gt;.</iframe></p>  <p>Abs.,</p>  <p>RG</p>]]></content:encoded>
    </item>
    <item>
      <title>Migrandos VMs entre regiões do Microsoft Azure</title>
      <link>https://docs.microsoft.com/archive/blogs/rafaelgodinho/migrandos-vms-entre-regies-do-microsoft-azure</link>
      <pubDate>Mon, 30 Jun 2014 14:42:53 GMT</pubDate>
      <dc:creator><![CDATA[Rafael.Godinho]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rafaelgodinho/2014/06/30/migrandos-vms-entre-regies-do-microsoft-azure/</guid>
      <description><![CDATA[Olá pessoal,  Com o recente anúncio do GA (General Availability) da região sul do Brasil, muitos...]]></description>
      <content:encoded><![CDATA[<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/8080.worksonmymachine_19DF8588.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/8080.worksonmymachine_5F00_19DF8588.jpg"><img title="worksonmymachine" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="worksonmymachine" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/5618.worksonmymachine_thumb_6B88908B.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/5618.worksonmymachine_5F00_thumb_5F00_6B88908B.jpg" width="240" height="240" /></a></p>  <p>Olá pessoal,</p>  <p>Com o recente anúncio do GA (General Availability) da região sul do Brasil, muitos clientes estão me perguntando como podem migrar suas máquinas virtuais das outras regiões para a região brasileira. A realidade é que não existe um procedimento automatizado para que esta migração ocorra, sendo necessário passos manuais para a migração ocorrer.</p>  <p>Em linhas gerais, os principais passos são os seguintes:</p>  <ol>   <li>Listar as VMs de um determinado Cloud Service</li>    <li>Para cada VM     <ol>       <li>Desligar a VM se ela estiver rodando</li>        <li>Criar um snapshot para o disco do sistema operacional</li>        <li>Criar um snapshot para cada data disk</li>        <li>Ligar a VM se ela estivesse rodando</li>     </ol>   </li>    <li>Para cada snapshot criado, copiar o Blob uma outra conta de storge</li>    <li>Esperar a cópia de todos os Blobs</li>    <li>Importar a configuração das VMs existentes</li>    <li>Substituir os discos, tanto do sistema operacional quanto de dados, pelos novos Blobs</li>    <li>Criar as novas VMs em um outro Cloud Service</li> </ol>  <p>Ufa!!! São vários passos, mas para facilitar podemos utilizar os Cmdlets PowerShell de gerenciamento do Azure. Vamos detalhar cada um dos passos acima.</p>  <p><strong>Listar as VMs de um determinado Cloud Service:</strong></p>  <p>Para listar as VMs de um Cloud Service basta utilizar o Cmdlet Get-AzureVM, passando o nome do Cloud Service como parâmetro:</p>  <p><em>$vms = Get-AzureVM -ServiceName $sourceCloudServiceName</em></p>  <p><strong>Desligar a VM se ela estiver rodando</strong></p>  <p>Antes de criarmos os snapshots dos discos é importante que a VM esteja desligada, pois isso irá garantir que todos os dados que eventualmente estão em algum cache foram efetivamente gravados em disco, minimizando a perda de alguma informação e garantindo a integridade das informações. </p>  <p>Nesta etapa, primeiro é necessário verificar se a VM está rodando. Isso é feito verificando a propriedade <em>InstanceStatus</em> da VM. Se ela for <em>ReadyRole</em> significa que ela está no ar.</p>  <p>Para desligar a VM, basta utilizar o Cmdlet <em>Stop-AzureVM</em>, conforme abaixo:</p>  <p><em>Stop-AzureVM -ServiceName $sourceCloudServiceName -Name $vmName –StayProvisioned</em></p>  <p>O parâmetro <em>StayProvisioned</em> é importante para mantermos o endereço IP da VM e permitir que ela seja religada de maneira mais rápida nos próximos passos.</p>  <p><strong>Criar um snapshot para o disco do sistema operacional</strong></p>  <p>A tarefa de criar um snapshot do disco do sistema operacional é um pouco complexa. O primeiro passo é ter acesso ao disco, isso é feito através do Cmdlet <em>Get-AzureOSDisk:</em></p>  <p><em>$osDisk = $vm | Get-AzureOSDisk</em></p>  <p>Em seguida, é necessário acessar o Blob que o disco está utilizando. A propriedade <em>MediaLink</em> do disco contém o endereço deste Blob. O acesso ao Blob pode ser feito com o Cmdlet <em>Get-AzureStorageBlob.</em></p>  <p>Utilizando o objeto de Blob retornado, é possível criar o snapshot através da interface ICloudBlob da API .NET, conforme abaixo:</p>  <p><em>$snapshot = $blob.ICloudBlob.CreateSnapshot()</em></p>  <p><strong>Criar um snapshot para cada data disk</strong></p>  <p>Para criar um snapshot para cada data disk, o primeiro passo é ter acesso aos data disks. Isso é feito pelo Cmdlet Get-AzureDataDisk:</p>  <p><em>$dataDisks = $vm | Get-AzureDataDisk</em></p>  <p>A principal diferença dos passos acima, é que o <em>Get-AzureDataDisk</em> retorna uma coleção de discos, sendo necessário trata-los individualmente, o que pode ser feito com um foreach. Os outros passos são muitos similares ao que foi apontado acima.</p>  <p><strong>Ligar a VM se ela estivesse rodando</strong></p>  <p>Para ligar a VM, basta utilizar o Cmdlet <em>Start-AzureVM</em>:</p>  <p><em>Start-AzureVM -ServiceName $sourceCloudServiceName -Name $vmName</em></p>  <p><strong>Para cada snapshot criado, copiar o Blob uma outra conta de storage</strong></p>  <p>Para facilitar a cópia de arquivos grandes, caso dos discos das VMs, o Azure possui uma API de cópia assíncrona em background que ocorre do lado do servidor. O time do Azure storage fez um post chamado <a href="https://blogs.msdn.com/b/windowsazurestorage/archive/2012/06/12/introducing-asynchronous-cross-account-copy-blob.aspx">Introducing Asynchronous Cross-Account Copy Blob</a> detalhando essa API.</p>  <p>O PowerShell possui o Cmdlet <em>Start-AzureStorageBlobCopy</em> que utiliza essa API, conforme abaixo:</p>  <p><em>Start-AzureStorageBlobCopy -ICloudBlob $snapshot -DestContext $destinationStorageAccountContext -DestContainer &quot;vhds&quot; -DestBlob $snapshot.Name</em></p>  <p><strong>Esperar a cópia de todos os Blobs</strong></p>  <p>Para esperar que a cópia dos Blobs ocorra, o PowerShell possui um Cmdlet chamado <em>Get-AzureStorageBlobCopyState</em>, que retorna informações sobre a situação da cópia.</p>  <p><strong>Importar a configuração das VMs existentes</strong></p>  <p>Depois que os discos foram copiados, o próximo passo seria configurar as novas VMs. Para isso é necessário realizar dois passos: exportar a configuração atual e depois importar esta configuração:</p>  <p><em>$vmSource | Export-AzureVM -Path $env:TEMP\$($vmSource.Name).xml     <br /> $vmDestination = Import-AzureVM -Path $env:TEMP\$($vmSource.Name).xml</em></p>  <p><strong>Substituir os discos, tanto do sistema operacional quanto de dados, pelos novos Blobs</strong></p>  <p>Nesta etapa são vários passos. Primeiro é necessário encontrar o novo Blob copiado que está relacionado com o disco da configuração atual, isso é feito da seguinte maneira:</p>  <p><em>$osDisk = Get-AzureDisk -DiskName $vmSource.VM.OSVirtualHardDisk.DiskName     <br /> $blob = $blobs | Where-Object {$_.Name -eq $osDisk.MediaLink.Segments[2]}</em></p>  <p>Depois criar um novo disco e substituir o disco da nova VM:</p>  <p><em>$newOSDisk = Add-AzureDisk -DiskName ($destinationCloudServiceName + &quot;-&quot; + $osDisk.DiskName) -MediaLocation $blob.ICloudBlob.Uri.AbsoluteUri -OS $osDisk.OS</em></p>  <p><em>$vmDestination.OSVirtualHardDisk.DiskName = $newOSDisk.DiskName</em></p>  <p>Para os Data Disks o procedimento é muito parecido, com algumas pequenas diferenças:</p>  <ul>   <li>Uma VM pode ter vários Data Disks, então isso deve ser tratado em um loop</li>    <li>Utilizar a propriedade <em>DataVirtualHardDisks</em> da VM, ao invés da propriedade <em>OSVirtualHardDisk</em></li>    <li>Ao criar o disco com o Cmdlet <em>Add-AzureDisk</em>, não informar o parâmetro <em>–OS</em></li> </ul>  <p><strong>Criar as novas VMs em um outro Cloud Service</strong></p>  <p>A criação das novas VMs é um passo bastante simples, basta utilizar o Cmdlet <em>New-AzureVM</em>. Este comando recebe uma coleção de configurações de VMs, então todas podem ser criadas em um único passo:</p>  <p><em>New-AzureVM -ServiceName $destinationCloudServiceName -VMs $vmDestination</em></p>  <p>Se as VMs originais estiverem configuradas em uma Virtual Network, também é possível especificar esse parâmetro na criação das VMs:</p>  <p><em>New-AzureVM -ServiceName $destinationCloudServiceName -VMs $vmDestination -VNetName $vnetName</em></p>  <p><strong>Script</strong></p>  <p>Para facilitar, criei um script PowerShell que faz os passos acima e um pouco mais. O download pode ser feito <a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/8306.CopyAzureVM.ps1" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58/8306.CopyAzureVM.ps1">aqui</a>.</p>  <p>Para o script funcionar, são necessários os seguintes requisitos:</p>  <ol>   <li>O Cloud Service de destino deve existir</li>    <li>A conta de storage de destino deve existir</li>    <li>Um container chamado <em>vhds</em> deve existir no storage de destino</li>    <li>Tanto os Cloud Services de origem e destino, quanto as contas de storage de origem e destino devem estar na mesma assinatura do Azure</li>    <li>Se uma rede virtual está sendo utilizada, é necessário que a rede de destino tenha as mesmas configurações de sub rede da rede de origem</li> </ol>  <p>Para rodar o script, utilize a seguinte sintaxe:</p>  <p><em>Copy-AzureVM $sourceCloudServiceName $destinationCloudServiceName $destinationStorageAccountName $vnetName</em></p>  <p>Abs.,</p>  <p>RG</p>]]></content:encoded>
    </item>
    <item>
      <title>Migrando arquivos do AWS S3 para os Blobs do Azure</title>
      <link>https://docs.microsoft.com/archive/blogs/rafaelgodinho/migrando-arquivos-do-aws-s3-para-os-blobs-do-azure</link>
      <pubDate>Wed, 25 Jun 2014 18:48:25 GMT</pubDate>
      <dc:creator><![CDATA[Rafael.Godinho]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rafaelgodinho/2014/06/25/migrando-arquivos-do-aws-s3-para-os-blobs-do-azure/</guid>
      <description><![CDATA[Olá pessoal,  Recentemente tenho trabalhado com alguns clientes na migração de aplicações da Amazon...]]></description>
      <content:encoded><![CDATA[<p><font size="3" face="Arial">Olá pessoal,</font></p>  <p><font size="3" face="Arial">Recentemente tenho trabalhado com alguns clientes na migração de aplicações da Amazon para o Azure, principalmente de arquivos armazenados no S3 para os Blobs do Azure.</font></p>  <p><font size="3" face="Arial">Em relação à essa migração, do lado do Azure, uma técnica que pode ser utilizada é o uso da API de cópia assíncrona de Blobs, no .NET o método <a href="https://msdn.microsoft.com/en-us/library/jj717428.aspx">StartCopyFromBlob</a>. Este método permite a cópia do lado do servidor entre Blobs diferentes. Por Blobs diferentes significa que eles podem estar em containers, contas de storage ou até mesmo assinaturas de Azure diferentes. Além disso, esse método também possui uma sobrecarga que recebe uma url pública, permitindo a cópia assíncrona do lado do servidor de arquivos externos ao Azure acessíveis pela internet.</font></p>  <p><font size="3" face="Arial">Em linhas gerais, um programa para fazer a migração desses arquivos deve realizar os seguintes passos:</font></p>  <ol>   <li><font size="3" face="Arial">Listar os arquivos de um bucket do S3</font></li>    <li><font size="3" face="Arial">Para cada arquivo, gerar uma url pública de acesso</font></li>    <li><font size="3" face="Arial">Para cada arquivo, realizar a cópia para o Azure utilizando o método StartCopyFromBlob</font></li>    <li><font size="3" face="Arial">Monitorar o status da cópia do lado do Azure</font></li> </ol>  <p><font size="3" face="Arial">Para facilitar o trabalho, criei um projeto no CodePlex chamado <a href="https://awss3toazureblob.codeplex.com/">AWS S3 To Azure Blob</a>. Esta é uma aplicação de linha de comando que realizar os passos acima. O projeto foi publicado como Git, fique à vontade para colaborar.</font></p>  <p><font size="3" face="Arial">Abs.,</font></p>  <p><font size="3" face="Arial">RG</font></p>  <p><font size="3" face="Arial">&#160;</font></p>]]></content:encoded>
    </item>
    <item>
      <title>Uso de ASP clássico com Azure Web Sites</title>
      <link>https://docs.microsoft.com/archive/blogs/rafaelgodinho/uso-de-asp-clssico-com-azure-web-sites</link>
      <pubDate>Mon, 28 Apr 2014 13:48:36 GMT</pubDate>
      <dc:creator><![CDATA[Rafael.Godinho]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rafaelgodinho/2014/04/28/uso-de-asp-clssico-com-azure-web-sites/</guid>
      <description><![CDATA[Olá pessoal,  Uma das coisas que pouca gente percebeu é que é possível rodar aplicações ASP...]]></description>
      <content:encoded><![CDATA[<p>Olá pessoal,</p>  <p>Uma das coisas que pouca gente percebeu é que é possível rodar aplicações ASP clássicas no Azure Web Sites.</p>  <p>Para conseguir rodar um site ASP não é necessária nenhuma configuração especial. De fato, na lista de documentos padrão já temos pré-cadastrado o bom e velho <em>Default.asp</em>.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/4857.image_599729CC.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/4857.image_5F00_599729CC.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/7026.image_thumb_4D953998.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/7026.image_5F00_thumb_5F00_4D953998.png" width="214" height="383" /></a></p>  <p>Para testar, basta criar um arquivo com a extensão ASP, por exemplo, <em>Default.asp</em> e em seguida editar seu conteúdo com algum comando ASP. O exemplo abaixo mostra a versão do IIS rodando no ambiente:</p>  <p><em>&lt;%      <br />&#160;&#160;&#160;&#160; Response.Write(Request.ServerVariables(&quot;SERVER_SOFTWARE&quot;))      <br /> %&gt;</em></p>  <p>Em seguida, basta fazer deploy por um dos vários métodos que o Azure Web Sites suporta, eu utilizei FTP para fazer deploy deste exemplo, e por último acessar o site.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/8424.image_3D88FB92.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/8424.image_5F00_3D88FB92.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/8546.image_thumb_188B3B19.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/8546.image_5F00_thumb_5F00_188B3B19.png" width="343" height="147" /></a></p>  <p>Abs.,</p>  <p>RG</p>]]></content:encoded>
    </item>
    <item>
      <title>Utilizando o Microsoft Azure Cache em aplicações ASP.NET</title>
      <link>https://docs.microsoft.com/archive/blogs/rafaelgodinho/utilizando-o-microsoft-azure-cache-em-aplicaes-asp-net</link>
      <pubDate>Mon, 14 Apr 2014 14:34:59 GMT</pubDate>
      <dc:creator><![CDATA[Rafael.Godinho]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rafaelgodinho/2014/04/14/utilizando-o-microsoft-azure-cache-em-aplicaes-asp-net/</guid>
      <description><![CDATA[Olá pessoal,  Algumas pessoas me perguntam como melhorar o desempenho de uma aplicação rodando no...]]></description>
      <content:encoded><![CDATA[<p>Olá pessoal,</p>  <p>Algumas pessoas me perguntam como melhorar o desempenho de uma aplicação rodando no Microsoft Azure. Existem várias possibilidades de otimização, uma delas é o uso de cache, fazendo com que a aplicação diminua a latência no acesso aos dados e consequentemente tenha um melhor tempo de resposta ao usuário.</p>  <p>O primeiro passo no uso do cache é a criação de uma instância do serviço de cache (no momento que este post foi escrito o serviço estava em preview). Para isso, selecione o botão New, em seguida Data Services, Cache, Quick Create e forneça o endpoint que o cache será acessado, a região que o serviço ficará localizado e o seu tamanho, que pode variar entre 128MB até 150GB.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/6710.image_50BA9A4B.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/6710.image_5F00_50BA9A4B.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/6558.image_thumb_6D57161E.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/6558.image_5F00_thumb_5F00_6D57161E.png" width="529" height="301" /></a></p>  <p>Depois do cache criado, o processo de criação pode levar alguns minutos para ser concluído, o próximo passo é utilizar o cache. Em um projeto ASP.NET no Visual Studio, vc pode adicionar referências aos componentes de cache via NuGet, pesquisando por Windows Azure Cache.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/0245.image_189E3DD7.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/0245.image_5F00_189E3DD7.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/6888.image_thumb_7C900F9C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/6888.image_5F00_thumb_5F00_7C900F9C.png" width="521" height="349" /></a></p>  <p>Além de instalar todas as referências, o NuGet também faz algumas modificações no arquivo web.config, facilitando bastante o uso do cache. Vc deve informar o endpoint do serviço de cache, no formato <em>&lt;Nome&gt;.cache.windows.net</em>, substituindo o conteúdo <strong>[Cache role name or Service Endpoint]</strong> do elemento autoDiscover. Vc encontra o endereço do endpoint no dashboard do serviço de cache:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/5758.image_54EC2423.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/5758.image_5F00_54EC2423.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/2577.image_thumb_5245F923.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/2577.image_5F00_thumb_5F00_5245F923.png" width="443" height="777" /></a></p>  <p>O próximo passo é fornecer a chave de acesso para autenticação do cache. Para isso, descomente a sessão <em>secutiryProperties</em> do web.config e forneça a chave de acesso, substituindo o texto <strong>[Authentication Key]</strong>. A chave de acesso pode ser encontrada através da opção <em>Manage Keys </em>do portal de gerenciamento:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/5756.image_1D3BFAA4.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/5756.image_5F00_1D3BFAA4.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/2068.image_thumb_2868159F.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/2068.image_5F00_thumb_5F00_2868159F.png" width="474" height="502" /></a></p>  <p>Finalmente, o próximo passo é utilizar o cache no código da sua aplicação. O primeiro passo é criar um objeto da classe <em>DataCache</em>, disponível no namespace <em>Microsoft.ApplicationServer.Caching. </em>Se o construtor padrão for utilizado uma conexão com o cache padrão será criada.</p>  <p>O cache possui vários métodos para interagir com o seu conteúdo, mas um padrão bastante comum utilizado é o <a href="https://msdn.microsoft.com/en-us/library/dn589799.aspx">Cache-Aside</a>, onde ser verifica se o conteúdo já existe no cache, se não existir deve-se buscar o conteúdo no repositório de dados, em seguida adicionar o conteúdo no cache e depois retornar, conforme diagrama abaixo:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/3566.image_10D0682C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/3566.image_5F00_10D0682C.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/1351.image_thumb_19BFFA6B.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/1351.image_5F00_thumb_5F00_19BFFA6B.png" width="283" height="390" /></a></p>  <p>Criei um projeto padrão ASP.NET MVC no Visual Studio 2013 e modifiquei o método <em>About</em> do controller <em>HomeController</em> para utilizar o cache. No método <em>GetAboutMessageFromRepository</em>, faço um <em>Thread.Sleep</em> de 10 segundos para simular a demora de uma consulta complexa em um banco de dados:</p>  <p><em>public ActionResult About()     <br /> {      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; ViewBag.Message = GetAboutMessage();</em></p> <em></em>  <p><em>&#160;&#160;&#160;&#160;&#160;&#160;&#160; return View();     <br /> }</em></p> <em></em>  <p><em>private static string GetAboutMessage()     <br /> {      <br />&#160;&#160;&#160; const string AboutMessage = &quot;AboutMessage&quot;;      <br />&#160;&#160;&#160; DataCache cache = new DataCache();</em></p> <em></em>  <p><em>&#160;&#160;&#160; object aboutMessage = cache.Get(AboutMessage);</em></p> <em></em>  <p><em>&#160;&#160;&#160; if (aboutMessage == null)     <br />&#160;&#160;&#160; {      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; aboutMessage = GetAboutMessageFromRepository();      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; cache.Add(AboutMessage, aboutMessage);      <br />&#160;&#160;&#160; }      <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; return aboutMessage.ToString();      <br /> }</em></p> <em></em>  <p><em>private static string GetAboutMessageFromRepository()     <br /> {      <br />&#160;&#160;&#160; Thread.Sleep(10000);      <br />&#160;&#160;&#160; return &quot;Your application description page.&quot;;      <br /> }</em></p>  <p>Nos próximos posts pretendo detalhar um pouco a classe DataCache, com seus principais métodos, como controlar a expiração de conteúdo e também como utilizar o cache integrado com o ASP.NET para controlar sessão e o output cache das páginas.</p>  <p>Abs.,</p>  <p>RG</p>]]></content:encoded>
    </item>
    <item>
      <title>Utilizando HTTPS/SSL com Cloud Services no Windows Azure</title>
      <link>https://docs.microsoft.com/archive/blogs/rafaelgodinho/utilizando-httpsssl-com-cloud-services-no-windows-azure</link>
      <pubDate>Mon, 30 Dec 2013 11:31:38 GMT</pubDate>
      <dc:creator><![CDATA[Rafael.Godinho]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rafaelgodinho/2013/12/30/utilizando-httpsssl-com-cloud-services-no-windows-azure/</guid>
      <description><![CDATA[Olá pessoal,  Geralmente quando discuto a arquitetura de aplicações que tirem proveito dos...]]></description>
      <content:encoded><![CDATA[<p><font size="3" face="Calibri">Olá pessoal,</font></p>  <p><font size="3" face="Calibri">Geralmente quando discuto a arquitetura de aplicações que tirem proveito dos benefícios dos Cloud Services no Windows Azure, muitas dessas aplicações precisam proteger conteúdos sensíveis, como, informações pessoais e dados de login das aplicações.</font></p>  <p><font size="3" face="Calibri">O processo para se utilizar HTTPS nas aplicações é bastante simples, envolvendo algumas tarefas no portal de gerenciamento e outras tarefas no Visual Studio, e pode ser resumido da seguinte forma:</font></p>  <p><font size="3" face="Calibri">Tarefas no portal de gerenciamento:</font></p>  <ol>   <li><font size="3" face="Calibri">Criar o Cloud Services</font></li>    <li><font size="3" face="Calibri">Fazer upload do certificado digital</font></li> </ol>  <p><font size="3" face="Calibri">Tarefas no Visual Studio:</font></p>  <ol>   <li><font size="3" face="Calibri">Fazer referência à um certificado</font></li>    <li><font size="3" face="Calibri">Adicionar um endpoint HTTPS utilizando essa referência</font></li> </ol>  <p><font size="3" face="Calibri">Entretanto, existe um pré-requisito muito importante que precisa ser satisfeito antes de iniciarmos os passos acima, que é ter acesso ao certificado digital. Se vc está fazendo a publicação de uma aplicação em produção, muito possivelmente vc já adquiriu o certificado digital de uma entidade certificadora e pode passar para os próximos passos. Agora, se vc está fazendo o deploy de um sistema que está em desenvolvimento, é bem provável que vc queira utilizar um certificado auto assinado (<a href="https://en.wikipedia.org/wiki/Self-signed_certificate"><em>self signed certificate</em></a>). Tecnicamente este tipo de certificado funciona, mas como ele não é assinado por uma entidade certificadora os navegadores emitem um aviso e seu uso não é indicado para ambientes de produção.</font></p>  <p><font size="3" face="Calibri">O Visual Studio possui uma ferramenta que facilita a geração de certificados auto assinados, é a ferramenta <a href="https://msdn.microsoft.com/en-us/library/bfsktky3(v=vs.110).aspx"><em>Makecert</em></a> (na verdade o <em>Makecert</em> pode ser instalado com vários SDKs). Vc pode gerar um desses certificados utilizando a seguinte sintaxe:</font></p>  <p><font size="3" face="Calibri"><em>makecert -sky exchange -r -n &quot;CN=&lt;Nome do certificado&gt;&quot; -pe -a sha1 -len 2048 -ss My &lt;Nome do certificado&gt;.cer</em></font></p>  <p><font size="3" face="Calibri">Para entender melhor o exemplo acima, vamos ver detalhes de todos os parâmetros utilizados:</font></p>  <ul>   <li><font size="3" face="Calibri">-sky exchange: indica que o certificado pode ser utilizado para encriptar os dados;</font></li>    <li><font size="3" face="Calibri">-r: cria um certificado auto assinado;</font></li>    <li><font size="3" face="Calibri">-n “CN=&lt;Nome do certificado&gt;”: indica o nome do certificado;</font></li>    <li><font size="3" face="Calibri">-pe: marca a chave privada como sendo possível de ser exportada;</font></li>    <li><font size="3" face="Calibri">-a sha1: algoritmo utilizado para assinatura;</font></li>    <li><font size="3" face="Calibri">-len 2048: tamanho, em bits, da chave do certificado;</font></li>    <li><font size="3" face="Calibri">-ss My: indica em qual certificate store o certificado será salvo;</font></li>    <li><font size="3" face="Calibri">&lt;Nome do certificado&gt;.cer: arquivo que terá o certificado salvo.</font></li> </ul>  <p><font size="3" face="Calibri">Com o certificado criado, podemos voltar para os passos elencados anteriormente no portal de gerenciamento e depois no Visual Studio.</font></p>  <p><font size="3" face="Calibri">A primeira tarefa no portal de gerenciamento é a criação do Cloud Service. Acredito que a maneira mais fácil de criar um Cloud Service é através da opção <em>Quick Create </em>do portal de gerenciamento. Para isso, acesse a opção <em>New</em>, <em>Compute</em>, <em>Cloud Service</em>, <em>Quick Create</em> e forneça o nome do Cloud Service, que terá uma URL no formato <em>&lt;NomeDoCloudService&gt;.cloudapp.net</em>, e também a região que ele estará localizado.</font></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/2476.image_264F723E.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/2476.image_5F00_264F723E.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/5047.image_thumb_714573BE.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/5047.image_5F00_thumb_5F00_714573BE.png" width="524" height="224" /></a></p>  <p><font size="3" face="Calibri">O próximo passo é fazer upload do certificado gerado no portal de gerenciamento. Para isso precisamos exportar o certificado no formato <em>.pfx</em>, conforme os seguinte passos:</font></p>  <p><font size="3" face="Calibri">Abra o gerenciador de certificados do Windows executando o comando <em>certmgr.MSc</em></font></p>  <p><font size="3" face="Calibri">Encontre e abra o certificado que foi gerado com o <em>Makecert</em>.</font></p>  <p><font size="3" face="Calibri">Acesse a aba <em>Details</em> e em seguida clique no botão <em>Copy to File…</em></font></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/2766.image_60CD02C3.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/2766.image_5F00_60CD02C3.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/5824.image_thumb_1E5CF13E.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/5824.image_5F00_thumb_5F00_1E5CF13E.png" width="423" height="526" /></a></p>  <p><font size="3" face="Calibri">No wizard, escolha a opção para exportar a <em>private key.</em></font></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/8081.image_46FB5D45.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/8081.image_5F00_46FB5D45.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/1184.image_thumb_048B4BC0.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/1184.image_5F00_thumb_5F00_048B4BC0.png" width="497" height="484" /></a></p>  <p><font size="3" face="Calibri">Mantenha as opções padrão apresentadas e forneça uma senha quando tiver a possibilidade.</font></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/3583.image_4CD8918F.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/3583.image_5F00_4CD8918F.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/8814.image_thumb_2364504F.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/8814.image_5F00_thumb_5F00_2364504F.png" width="497" height="484" /></a></p>  <p><font size="3" face="Calibri">Por último, forneça o endereço que o arquivo será exportado e finalize o wizard.</font></p>  <p><font size="3" face="Calibri">Agora devemos fazer upload do certificado no portal de gerenciamento. Abra o <em>Cloud Service </em>recém criado na guia de certificados e escolha a opção upload:</font></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/8764.image_75798E47.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/8764.image_5F00_75798E47.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/0755.image_thumb_3B8A4B5B.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/0755.image_5F00_thumb_5F00_3B8A4B5B.png" width="446" height="203" /></a></p>  <p><font size="3" face="Calibri">Na tela apresentada, forneça o arquivo <em>.pfx</em> exportado e a senha utilizada:</font></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/1385.image_4B2CE71D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/1385.image_5F00_4B2CE71D.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/7266.image_thumb_0209CC15.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/7266.image_5F00_thumb_5F00_0209CC15.png" width="433" height="308" /></a></p>  <p><font size="3" face="Calibri">Com isso vc deve ter um resultado similar à tela abaixo. Copie o <em>thumbprint</em>, destacado em amarelo na imagem, que ele será utilizado nos próximos passos dentro do Visual Studio.</font></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/8182.image_2AA8381C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/8182.image_5F00_2AA8381C.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/6064.image_thumb_286E4011.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/6064.image_5F00_thumb_5F00_286E4011.png" width="431" height="100" /></a></p>  <p><font size="3" face="Calibri">Já no Visual Studio, abra as propriedades da sua <em>Web</em> <em>Role </em>e adicione um novo certificado informando o <em>thumbprint</em> do certificado que foi feito upload.</font></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/3683.image_3C1B29A5.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/3683.image_5F00_3C1B29A5.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/3618.image_thumb_60AF47DA.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/3618.image_5F00_thumb_5F00_60AF47DA.png" width="444" height="121" /></a></p>  <p><font size="3" face="Calibri">Feito isso, é hora de adicionar é hora de adicionar um <em>endpoint Https</em> fazendo referência para esse certificado, que pode ser escolhido na lista de seleção da coluna <em>SSL Certificate Name</em>.</font></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/6371.image_24F23FD8.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/6371.image_5F00_24F23FD8.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/6330.image_thumb_2D759F22.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/6330.image_5F00_thumb_5F00_2D759F22.png" width="453" height="140" /></a></p>  <p><font size="3" face="Calibri">Agora é só fazer o deploy do seu projeto e acessar a sua aplicação via Https.</font></p>  <p><font size="3" face="Calibri">Como estamos utilizando um certificado <em>self signed</em>, é bastante provável que o seu navegador gere uma mensagem de erro ao acessar o endereço. Para acessar a aplicação deve-se escolher a opção de continuar.</font></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/5618.image_3CAC07EF.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/5618.image_5F00_3CAC07EF.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/6644.image_thumb_2EDC52A5.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/6644.image_5F00_thumb_5F00_2EDC52A5.png" width="479" height="231" /></a></p>  <p><font size="3" face="Calibri">Abs.,</font></p>  <p><font size="3" face="Calibri">RG</font></p>]]></content:encoded>
    </item>
    <item>
      <title>Apresentação Community Zone 2013–TTT–Windows Azure para IT Pros</title>
      <link>https://docs.microsoft.com/archive/blogs/rafaelgodinho/apresentao-community-zone-2013tttwindows-azure-para-it-pros</link>
      <pubDate>Mon, 14 Oct 2013 14:31:43 GMT</pubDate>
      <dc:creator><![CDATA[Rafael.Godinho]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rafaelgodinho/2013/10/14/apresentao-community-zone-2013tttwindows-azure-para-it-pros/</guid>
      <description><![CDATA[Olá pessoal,  Entre os dias 5 e 6 (sábado e domingo) de outubro deste ano (2013) tivemos o evento...]]></description>
      <content:encoded><![CDATA[<p>Olá pessoal,</p>  <p>Entre os dias 5 e 6 (sábado e domingo) de outubro deste ano (2013) tivemos o evento Community Zone na Microsoft. Neste evento tive a oportunidade de ministrar um TTT de Windows Azure para os ITPros.</p>  <p>&#160;</p>  <p>A minha apresentação pode ser encontrada abaixo:</p> <iframe height="220" src="https://skydrive.live.com/embed?cid=3573BA33315680F9&amp;resid=3573BA33315680F9%213974&amp;authkey=&amp;em=2&amp;wdAr=1.7777777777777776" frameborder="0" width="350">Este é um apresentação do &lt;a target=&quot;_blank&quot; href=&quot;https://office.com&quot;&gt;Microsoft Office&lt;/a&gt; inserido, desenvolvido por &lt;a target=&quot;_blank&quot; href=&quot;https://office.com/webapps&quot;&gt;Office Web Apps&lt;/a&gt;.</iframe>   <p>É interessante notar que fora o slide de título, a apresentação tinha apenas mais um slide para o conteúdo. Este slide de conteúdo contém uma série de links que os ITPros podem utilizar para se preparar quanto ao uso de Windows Azure.</p>  <p>O último link de conteúdo é o <a href="https://www.microsoft.com/en-us/download/details.aspx?id=8396">Windows Azure Training Kit</a>, que traz uma série de hand-on labs, demos e apresentações que podem ser reutilizadas.</p>  <p>&#160;</p>  <p>Abs.,</p>  <p>RG</p>]]></content:encoded>
    </item>
    <item>
      <title>Utilizando PowerShell para entender as chamadas REST das APIs de gerenciamento do Windows Azure</title>
      <link>https://docs.microsoft.com/archive/blogs/rafaelgodinho/utilizando-powershell-para-entender-as-chamadas-rest-das-apis-de-gerenciamento-do-windows-azure</link>
      <pubDate>Mon, 22 Jul 2013 08:22:49 GMT</pubDate>
      <dc:creator><![CDATA[Rafael.Godinho]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rafaelgodinho/2013/07/22/utilizando-powershell-para-entender-as-chamadas-rest-das-apis-de-gerenciamento-do-windows-azure/</guid>
      <description><![CDATA[Olá pessoal,
Para quem não sabe, o Windows Azure possui uma camada de APIs REST que permitem...]]></description>
      <content:encoded><![CDATA[<p>Olá pessoal,
</p><p>Para quem não sabe, o Windows Azure possui uma camada de APIs REST que permitem realizar o gerenciamento do seu ambiente, chamada de <a href="https://msdn.microsoft.com/en-us/library/windowsazure/ee460799.aspx">Windows Azure Service Management REST API</a>. O interessante é que tudo que interage com o ambiente do Azure utiliza essas APIs, ou seja, tanto o portal de administração, o Visual Studio, System Center e ferramentas de linhas de comando.
</p><p><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/58/metablogapi/6170.072213_1525_UtilizandoP1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-58-metablogapi/6170.072213_5F00_1525_5F00_UtilizandoP1.png" alt=""/>
	</p><p>Isso é excelente, afinal praticamente tudo que pode ser administrado no ambiente é feito por essas APIs. Entretanto, esse processo não é fácil. Como a API é muito poderosa, sua documentação é bastante extensa e seu uso pode ficar um pouco confuso.
</p><p>Quando esse tipo de situação ocorre, eu recorro ao PowerShell. Os cmdlets do Windows Azure possuem mecanismos de depuração que retornam a chamada REST realizada na API, e o PowerShell gerencia essas informações de depuração com <a href="https://technet.microsoft.com/en-us/library/hh847796.aspx">variáveis de preferências</a> que são capazes de modificar o comportamento do script. Dessas variáveis, uma muito importante é a <em>$DebugPreference</em> que indica como o PowerShell deve tratar as informações de depuração e pode ter os seguintes valores:
</p><ul><li>Stop: exibe a mensagem de depuração e finaliza a execução do script
</li><li>Inquire: exibe a mensagem de depuração e pergunta se deve continuar a execução do script
</li><li>Continue: exibe a mensagem de depuração e continua a execução do script
</li><li>SilentlyContinue: é o valor padrão. Não exibe a mensagem de depuração e executa o script sem interrupção
</li></ul><p>Logo, se mudarmos o valor da variável $DebugPreference para algum valor diferente do padrão temos informações úteis das chamadas aos serviços REST. Vou utilizar o script de criação de VMs de um <a href="https://blogs.msdn.com/b/rafaelgodinho/archive/2013/07/05/criando-uma-vm-no-windows-azure-com-powershell.aspx">post que fiz anteriormente</a>, apenas alterando as informações de depuração.
</p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt"><span style="color:blue">clear</span>
		</span></p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt"><span style="color:orangered">$DebugPreference</span>
			<span style="color:darkgray">=</span>
			<span style="color:darkred">"Continue"</span>
		</span></p><p style="background: white">
 </p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt"><span style="color:orangered">$imageName</span>
			<span style="color:darkgray">=</span>
			<span style="color:darkred">"a699494373c04fc0bc8f2bb1389d6106__Win2K8R2SP1-Datacenter-201306.01-en.us-127GB.vhd"</span>
		</span></p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt"><span style="color:orangered">$user</span>
			<span style="color:darkgray">=</span>
			<span style="color:darkred">"&lt;SeuUsuario&gt;"</span>
		</span></p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt"><span style="color:orangered">$password</span>
			<span style="color:darkgray">=</span>
			<span style="color:darkred">"&lt;SuaSenha&gt;"</span>
		</span></p><p style="background: white">
 </p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt"><span style="color:blue">New-AzureVMConfig</span>
			<span style="color:navy">-Name</span>
			<span style="color:darkred">"&lt;NomeDaSuaMaquina&gt;"</span>
			<span style="color:navy">-InstanceSize</span>
			<span style="color:darkred">"Small"</span>
			<span style="color:navy">-ImageName</span>
			<span style="color:orangered">$imageName</span>
			<span style="color:darkgray">|</span>
		</span></p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt"><span style="color:blue">Add-AzureProvisioningConfig</span>
			<span style="color:navy">-Windows</span>
			<span style="color:navy">-AdminUsername</span>
			<span style="color:orangered">$user</span>
			<span style="color:navy">-Password</span>
			<span style="color:orangered">$password</span>
			<span style="color:darkgray">|</span>
		</span></p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt"><span style="color:blue">New-AzureVM</span>
			<span style="color:navy">-ServiceName</span>
			<span style="color:darkred">"&lt;NomeDoSeuServico&gt;"</span>
			<span style="color:navy">-Location</span>
			<span style="color:darkred">"East US"
</span></span></p><p style="background: white">
 </p><p>Com isso, é possível perceber que o PowerShell realizar uma série chamadas REST ao Windows Azure:
</p><p>Primeiro ele verifica se o serviço ainda não existe:
</p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">DEBUG: 11:59:50 - NewAzureVMCommand begin processing with ParameterSet 'CreateService'.
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">DEBUG: ============================ HTTP REQUEST ============================
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">HTTP Method:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">GET
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Absolute Uri:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">https://management.core.windows.net/&lt;SubscriptionId&gt;/services/hostedservices/&lt;NomeDoSeuServico&gt;/deploymentslots/Production
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Headers:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">x-ms-version                  : 2013-06-01
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">x-ms-client-id                : &lt;GuidDaChamada&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">User-Agent                    : WindowsAzurePowershell/v0.6.16.1
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Body: 
</span></p><p>
 </p><p> Depois envia um comando para criar o serviço e recebe o id da operação como resposta:
</p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">DEBUG: ============================ HTTP REQUEST ============================
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">HTTP Method:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">POST
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Absolute Uri:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">https://management.core.windows.net/&lt;SubscriptionId&gt;/services/hostedservices
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Headers:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">x-ms-version                  : 2013-06-01
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">x-ms-client-id                : &lt;GuidDaChamada&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">User-Agent                    : WindowsAzurePowershell/v0.6.16.1
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Body:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">&lt;?xml version="1.0" encoding="utf-16"?&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">&lt;CreateHostedService xmlns="https://schemas.microsoft.com/windowsazure" xmlns:i="https://www.w3.org/2001/XMLSchema-instance"&gt;
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">    &lt;ServiceName&gt;&lt;NomeDoSeuServico&gt;&lt;/ServiceName&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">    &lt;Label&gt;cmdvZGluaG9kYmc=&lt;/Label&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">    &lt;Description&gt;Implicitly created hosted service2013-07-22 14:59&lt;/Description&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">    &lt;Location&gt;East US&lt;/Location&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">&lt;/CreateHostedService&gt;
</span></p><p>
 </p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">DEBUG: ============================ HTTP RESPONSE ============================
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Status Code:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Created
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Headers:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">x-ms-servedbyregion           : ussouth
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">x-ms-request-id               : &lt;IdDaOperacao&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Content-Length                : 0
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Cache-Control                 : no-cache
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Date                          : Mon, 22 Jul 2013 14:59:58 GMT
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Location                      : https://management.core.windows.net/subscriptions/&lt;SubscriptionId&gt;/compute/&lt;NomeDoSeuServico&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Server                        : 33.0.6198.68 (rd_rdfe_stable.130710-0833) Microsoft-HTTPAPI/2.0
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Body: 
</span></p><p>
 </p><p>Depois ele fica em um loop verificando o status da operação até ela ser finalizada com sucesso:
</p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">DEBUG: ============================ HTTP REQUEST ============================
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">HTTP Method:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">GET
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Absolute Uri:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">https://management.core.windows.net/&lt;SubscriptionId&gt;/operations/&lt;IdDaOperacao&gt;
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Headers:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">x-ms-version                  : 2013-06-01
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">x-ms-client-id                : &lt;GuidDaChamada&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">User-Agent                    : WindowsAzurePowershell/v0.6.16.1
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Body:
</span></p><p>
 </p><p>
 </p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">DEBUG: ============================ HTTP RESPONSE ============================
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Status Code:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">OK
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Headers:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">x-ms-servedbyregion           : ussouth
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">x-ms-request-id               : &lt;NovoIdDaOperacao&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Content-Length                : 232
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Cache-Control                 : no-cache
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Content-Type                  : application/xml; charset=utf-8
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Date                          : Mon, 22 Jul 2013 14:59:58 GMT
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Server                        : 33.0.6198.68 (rd_rdfe_stable.130710-0833) Microsoft-HTTPAPI/2.0
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Body:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">&lt;?xml version="1.0" encoding="utf-16"?&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">&lt;Operation xmlns="https://schemas.microsoft.com/windowsazure" xmlns:i="https://www.w3.org/2001/XMLSchema-instance"&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">    &lt;ID&gt;&lt;IdDaOperacao&gt;&lt;/ID&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">    &lt;Status&gt;Succeeded&lt;/Status&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">    &lt;HttpStatusCode&gt;200&lt;/HttpStatusCode&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">&lt;/Operation&gt; 
</span></p><p>
 </p><p>Agora sim ele manda criar a VM:
</p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">DEBUG: ============================ HTTP REQUEST ============================
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">HTTP Method:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">POST
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Absolute Uri:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">https://management.core.windows.net/&lt;SubscriptionId&gt;/services/hostedservices/&lt;NomeDoSeuServico&gt;/deployments
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Headers:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">x-ms-version                  : 2013-06-01
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">x-ms-client-id                : &lt;GuidDaChamada&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">User-Agent                    : WindowsAzurePowershell/v0.6.16.1
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Body:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">&lt;?xml version="1.0" encoding="utf-16"?&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">&lt;Deployment xmlns="https://schemas.microsoft.com/windowsazure" xmlns:i="https://www.w3.org/2001/XMLSchema-instance"&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">    &lt;Name&gt;&lt;NomeDoSeuServico&gt;&lt;/Name&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">    &lt;DeploymentSlot&gt;Production&lt;/DeploymentSlot&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">    &lt;Label&gt;&lt;NomeDoSeuServico&gt;&lt;/Label&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">    &lt;RoleList&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">        &lt;Role i:type="PersistentVMRole"&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">            &lt;RoleName&gt;&lt;NomeDoSeuServico&gt;1&lt;/RoleName&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">            &lt;OsVersion i:nil="true"&gt;&lt;/OsVersion&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">            &lt;RoleType&gt;PersistentVMRole&lt;/RoleType&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">            &lt;ConfigurationSets&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                &lt;ConfigurationSet i:type="WindowsProvisioningConfigurationSet"&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                    &lt;ConfigurationSetType&gt;WindowsProvisioningConfiguration&lt;/ConfigurationSetType&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                    &lt;ComputerName&gt;&lt;NomeDaSuaMaquina&gt;&lt;/ComputerName&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                    &lt;AdminPassword&gt;&lt;SuaSenha&gt;&lt;/AdminPassword&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                    &lt;EnableAutomaticUpdates&gt;true&lt;/EnableAutomaticUpdates&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                    &lt;ResetPasswordOnFirstLogon&gt;false&lt;/ResetPasswordOnFirstLogon&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                    &lt;WinRM&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                        &lt;Listeners&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                            &lt;Listener&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                                &lt;Protocol&gt;Https&lt;/Protocol&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                            &lt;/Listener&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                        &lt;/Listeners&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                    &lt;/WinRM&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                    &lt;AdminUsername&gt;&lt;SeuUsuario&gt;&lt;/AdminUsername&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                &lt;/ConfigurationSet&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                &lt;ConfigurationSet i:type="NetworkConfigurationSet"&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                    &lt;ConfigurationSetType&gt;NetworkConfiguration&lt;/ConfigurationSetType&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                    &lt;InputEndpoints&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                        &lt;InputEndpoint&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                            &lt;LocalPort&gt;3389&lt;/LocalPort&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                            &lt;Name&gt;RDP&lt;/Name&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                            &lt;Protocol&gt;tcp&lt;/Protocol&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                        &lt;/InputEndpoint&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                        &lt;InputEndpoint&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                            &lt;LocalPort&gt;5986&lt;/LocalPort&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                            &lt;Name&gt;WinRmHTTPs&lt;/Name&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                            &lt;Protocol&gt;tcp&lt;/Protocol&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                        &lt;/InputEndpoint&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                    &lt;/InputEndpoints&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                &lt;/ConfigurationSet&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">            &lt;/ConfigurationSets&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">            &lt;DataVirtualHardDisks&gt;&lt;/DataVirtualHardDisks&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">            &lt;Label&gt;&lt;NomeDaSuaMaquina&gt;&lt;/Label&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">            &lt;OSVirtualHardDisk&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                &lt;MediaLink&gt;https://&lt;SuaContaDeStorage&gt;.blob.core.windows.net/vhds/&lt;NomeDoSeuServico&gt;-&lt;NomeDaSuaMaquina&gt;-2013-7-22-11-59-58-332-0.vhd&lt;/MediaLink&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">                &lt;SourceImageName&gt;a699494373c04fc0bc8f2bb1389d6106__Win2K8R2SP1-Datacenter-201306.01-en.us-127GB.vhd&lt;/SourceImageName&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">            &lt;/OSVirtualHardDisk&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">            &lt;RoleSize&gt;Small&lt;/RoleSize&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">        &lt;/Role&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">    &lt;/RoleList&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">&lt;/Deployment&gt;
</span></p><p>
 </p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">DEBUG: ============================ HTTP RESPONSE ============================
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Status Code:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Accepted
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Headers:
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">x-ms-servedbyregion           : ussouth
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">x-ms-request-id               : &lt;IdDaOperacao&gt;
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Content-Length                : 0
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Cache-Control                 : no-cache
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Date                          : Mon, 22 Jul 2013 15:00:02 GMT
</span></p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Server                        : 33.0.6198.68 (rd_rdfe_stable.130710-0833) Microsoft-HTTPAPI/2.0
</span></p><p>
 </p><p><span style="color:blue; font-family:Lucida Console; font-size:9pt">Body: 
</span></p><p>
 </p><p>Novamente ele fica em um loop verificando o status da requisição, vou omitir aqui pq a chamada é muito parecida com a anterior, e finalmente finaliza a execução do script.
</p><p>RG</p>]]></content:encoded>
    </item>
    <item>
      <title>Apresentação no TDC2013</title>
      <link>https://docs.microsoft.com/archive/blogs/rafaelgodinho/apresentao-no-tdc2013</link>
      <pubDate>Fri, 12 Jul 2013 07:53:03 GMT</pubDate>
      <dc:creator><![CDATA[Rafael.Godinho]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rafaelgodinho/2013/07/12/apresentao-no-tdc2013/</guid>
      <description><![CDATA[Olá pessoal,  &#160;  Essa semana fiz a apresentação “Projetando aplicações para o Windows Azure” na...]]></description>
      <content:encoded><![CDATA[<p>Olá pessoal,</p>  <p>&#160;</p>  <p>Essa semana fiz a apresentação “Projetando aplicações para o Windows Azure” na trilha de Arquitetura .NET do evento TDC2013. Para quem tiver interesse, abaixo é possível encontrar o arquivo da minha apresentação.</p>  <p>&#160;</p> <iframe height="366" src="https://skydrive.live.com/embed?cid=3573BA33315680F9&amp;resid=3573BA33315680F9%213549&amp;authkey=&amp;em=2&amp;wdAr=1.7777777777777776" frameborder="0" width="610">Este é um apresentação do &lt;a target=&quot;_blank&quot; href=&quot;https://office.com&quot;&gt;Microsoft Office&lt;/a&gt; inserido, desenvolvido por &lt;a target=&quot;_blank&quot; href=&quot;https://office.com/webapps&quot;&gt;Office Web Apps&lt;/a&gt;.</iframe>   <p>&#160;</p>  <p>RG</p>]]></content:encoded>
    </item>
    <item>
      <title>Criando uma VM no Windows Azure com PowerShell</title>
      <link>https://docs.microsoft.com/archive/blogs/rafaelgodinho/criando-uma-vm-no-windows-azure-com-powershell</link>
      <pubDate>Fri, 05 Jul 2013 09:54:09 GMT</pubDate>
      <dc:creator><![CDATA[Rafael.Godinho]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rafaelgodinho/2013/07/05/criando-uma-vm-no-windows-azure-com-powershell/</guid>
      <description><![CDATA[Olá pessoal,
Hoje vou comentar sobre como criar uma VM no Windows Azure utilizando comandos...]]></description>
      <content:encoded><![CDATA[<p>Olá pessoal,
</p><p>Hoje vou comentar sobre como criar uma VM no Windows Azure utilizando comandos PowerShell.
</p><p>Neste post vou criar uma VM à partir de uma image. Eu também poderia utilizar um disco existente, mas vou deixar para outro post. Então, a primeira coisa à ser feita, é identificar qual a imagem que será utilizada. Para facilitar, o Windows Azure possui um cmdlet chamado <em>Get-AzureVMImage</em>, que traz a lista de todas as imagens que podem ser utilizadas. Devemos utilizar o conteúdo do retorno da propriedade <em>ImageName</em> para indicar qual imagem será utilizada na criação da nossa VM.
</p><p>Devemos em seguida, criar uma nova configuração de VM através do cmdlet <em>New-AzureVMConfig</em>. Para este comando, devemos informar o nome da máquina, seu tamanho e o nome da imagem que deve ser utilizada.
</p><p>O próximo passo é adicionar informação de provisionamento do sistema operacional, indicando se é uma imagem Windows ou Linux, como também nome do usuário administrador e sua senha.
</p><p>Por último, efetivamos a criação da VM através do cmdlet <em>New-AzureVM</em>, informando o nome do Cloud Services e também sua localização. Abaixo vemos um script completo de criação de uma VM utilizando os cmdlets acima através da estrutura de pipe do PowerShell:
</p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt"><span style="color:darkgreen">#Get-AzureVMImage | Select ImageName</span>
		</span></p><p style="background: white">
 </p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt"><span style="color:orangered">$imageName</span>
			<span style="color:darkgray">=</span>
			<span style="color:darkred">"a699494373c04fc0bc8f2bb1389d6106__Win2K8R2SP1-Datacenter-201306.01-en.us-127GB.vhd"</span>
		</span></p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt"><span style="color:orangered">$user</span>
			<span style="color:darkgray">=</span>
			<span style="color:darkred">"&lt;SeuUsuario&gt;"</span>
		</span></p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt"><span style="color:orangered">$password</span>
			<span style="color:darkgray">=</span>
			<span style="color:darkred">"&lt;SuaSenha&gt;"</span>
		</span></p><p style="background: white">
 </p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt"><span style="color:blue">New-AzureVMConfig</span>
			<span style="color:navy">-Name</span>
			<span style="color:darkred">"&lt;NomeDaSuaMaquina&gt;"</span>
			<span style="color:navy">-InstanceSize</span>
			<span style="color:darkred">"Small"</span>
			<span style="color:navy">-ImageName</span>
			<span style="color:orangered">$imageName</span>
			<span style="color:darkgray">|</span>
		</span></p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt">
			<span style="color:blue">Add-AzureProvisioningConfig</span>
			<span style="color:navy">-Windows</span>
			<span style="color:navy">-AdminUsername</span>
			<span style="color:orangered">$user</span>
			<span style="color:navy">-Password</span>
			<span style="color:orangered">$password</span>
			<span style="color:darkgray">|</span>
		</span></p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt">
			<span style="color:blue">New-AzureVM</span>
			<span style="color:navy">-ServiceName</span>
			<span style="color:darkred">"&lt;NomeDoSeuServico&gt;"</span>
			<span style="color:navy">-Location</span>
			<span style="color:darkred">"East US"
</span></span></p><p style="background: white">
 </p><p>Uma variação desse script pode ser a criação de uma segunda máquina no mesmo Cloud Service, onde deve ser informado o nome da VM, o mesmo nome de Cloud Service e deve ser omitido o parâmetro de localidade, afinal o Cloud Service já existe. Uma possibilidade interessante pode ser o uso do parâmetro –WaitForBoot, onde o PowerShell somente retornaria depois que a VM estivesse no ar. 
</p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt"><span style="color:darkgreen">#Get-AzureVMImage | Select ImageName</span>
		</span></p><p style="background: white">
 </p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt"><span style="color:orangered">$imageName</span>
			<span style="color:darkgray">=</span>
			<span style="color:darkred">"a699494373c04fc0bc8f2bb1389d6106__Win2K8R2SP1-Datacenter-201306.01-en.us-127GB.vhd"</span>
		</span></p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt"><span style="color:orangered">$user</span>
			<span style="color:darkgray">=</span>
			<span style="color:darkred">"&lt;SeuUsuario&gt;"</span>
		</span></p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt"><span style="color:orangered">$password</span>
			<span style="color:darkgray">=</span>
			<span style="color:darkred">"&lt;SuaSenha&gt;"</span>
		</span></p><p style="background: white">
 </p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt"><span style="color:blue">New-AzureVMConfig</span>
			<span style="color:navy">-Name</span>
			<span style="color:darkred">"&lt;NomeDaSuaSegundaMaquina&gt;"</span>
			<span style="color:navy">-InstanceSize</span>
			<span style="color:darkred">"Small"</span>
			<span style="color:navy">-ImageName</span>
			<span style="color:orangered">$imageName</span>
			<span style="color:darkgray">|</span>
		</span></p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt">
			<span style="color:blue">Add-AzureProvisioningConfig</span>
			<span style="color:navy">-Windows</span>
			<span style="color:navy">-AdminUsername</span>
			<span style="color:orangered">$user</span>
			<span style="color:navy">-Password</span>
			<span style="color:orangered">$password</span>
			<span style="color:darkgray">|</span>
		</span></p><p style="background: white"><span style="font-family:Lucida Console; font-size:9pt">
			<span style="color:blue">New-AzureVM</span>
			<span style="color:navy">-ServiceName</span>
			<span style="color:darkred">"&lt;NomeDoSeuServico&gt;"</span>
			<span style="color:navy">–WaitForBoot
</span></span></p><p style="background: white">
 </p><p style="background: white">Além disso, também seria possível realizar outras configurações na VM, como adicionar discos através do cmdlet <em>Add-AzureDataDisk</em> ou endpoints utilizando o cmdlet <em>Add-AzureEndpoint</em>.
</p><p style="background: white">
 </p><p style="background: white">RG</p>]]></content:encoded>
    </item>
  </channel>
</rss>