Exportar (0) Imprimir
Expandir Tudo

Esquema WorkerRole

Atualizado: fevereiro de 2014

[Este tópico contém conteúdo preliminar da versão atual do Microsoft Azure.]

A função de trabalho Azure é útil para desenvolvimento generalizado e pode executar processamento em segundo plano para uma função Web.

A extensão padrão para o arquivo de definição de serviço é .csdef.

O formato básico do arquivo de definição de serviço que contém uma função de trabalho é o seguinte.


<ServiceDefinition …>
  <WorkerRole name="<worker-role-name>" vmsize="<worker-role-size>" enableNativeCodeExecution="[true|false]">
    <Certificates>
      <Certificate name="<certificate-name>" storeLocation="[CurrentUser|LocalMachine] storeName="[My|Root|CA|Trust|Disallow|TrustedPeople|TrustedPublisher|AuthRoot|AddressBook|<custom-store>]” />
    </Certificates>
    <ConfigurationSettings>
      <Setting name="<setting-name>" />
    </ConfigurationSettings>
    <Endpoints>
      <InputEndpoint name="<input-endpoint-name>" protocol="[http|https|tcp|udp]" localPort="<local-port-number>" port="<port-number>" certificate="<certificate-name>" loadBalancerProbe=”<load-balancer-probe-name>” />
      <InternalEndpoint name="<internal-endpoint-name" protocol="[http|tcp|udp|any]" port="<port-number>">
         <FixedPort port="<port-number>"/>
         <FixedPortRange min="<minium-port-number>" max="<maximum-port-number>"/>
      </InternalEndpoint>
     <InstanceInputEndpoint name="<instance-input-endpoint-name>" localPort="<port-number>" protocol="[udp|tcp]">
         <AllocatePublicPortFrom>
            <FixedPortRange min="<minium-port-number>" max="<maximum-port-number>"/>
         </AllocatePublicPortFrom>
      </InstanceInputEndpoint>
    </Endpoints>
    <Imports>
      <Import moduleName="[RemoteAccess|RemoteForwarder|Diagnostics|Connect]"/>
    </Imports>
    <LocalResources>
      <LocalStorage name="<local-store-name>" cleanOnRoleRecycle="[true|false]" sizeInMB="<size-in-megabytes>" />
    </LocalResources>
    <LocalStorage name="<local-store-name>" cleanOnRoleRecycle="[true|false]" sizeInMB="<size-in-megabytes>" />
    <Runtime executionContext="[limited|elevated]">
      <Environment>
         <Variable name="<variable-name>" value="<variable-value>">
            <RoleInstanceValue xpath="<xpath-to-role-environment-settings>"/>
          </Variable>          
      </Environment>
      <EntryPoint>
         <NetFxEntryPoint assemblyName="<name-of-assembly-containing-entrypoint>" targetFrameworkVersion="<.net-framework-version>"/>
         <ProgramEntryPoint commandLine="<application>" setReadyOnProcessStart="[true|false]" "/>
      </EntryPoint>
    </Runtime>
    <Startup priority="<for-internal-use-only>”>
      <Task commandLine="" executionContext="[limited|elevated]" taskType="[simple|foreground|background]">
        <Environment>
         <Variable name="<variable-name>" value="<variable-value>">
            <RoleInstanceValue xpath="<xpath-to-role-environment-settings>"/>
          </Variable>          
        </Environment>
      </Task>
    </Startup>
    <Contents>
      <Content destination="<destination-folder-name>" >
        <SourceDirectory path="<local-source-directory>" />
      </Content>
    </Contents>
  </WorkerRole>
</ServiceDefinition>

O elemento WorkerRole descreve uma função que é útil para desenvolvimento generalizado e pode executar processamento em segundo plano para uma função Web. Um serviço pode conter zero ou mais funções de trabalho.

A tabela a seguir descreve os atributos do elemento WorkerRole.

 

Atributo Tipo Descrição

name

string

Obrigatória. O nome para a função de trabalho. O nome da função deve ser exclusivo.

enableNativeCodeExecution

boolean

Opcional. O valor padrão é true; são habilitadas a execução de código nativa e a confiança total por padrão. Defina este atributo como false para desabilitar a execução nativa de código para a função de trabalho e use a confiança parcial do Azure em vez disso.

vmsize

string

Opcional. Defina este valor para alterar o tamanho da máquina virtual que está dividida para esta função. O valor padrão é Small. Para obter uma lista de tamanhos de máquinas virtuais possíveis e seus atributos, consulte Tamanhos de Máquina Virtual e Serviços de Nuvem para Azure.

O elemento ConfigurationSettings descreve a coleção de parâmetros de configuração para uma função de trabalho. Este elemento é pai do elemento Setting.

O elemento Setting descreve um par de nome e valor que especifica um parâmetro de configuração para uma instância de uma função.

A tabela a seguir descreve os atributos do elemento Setting.

 

Atributo Tipo Descrição

name

string

Obrigatória. Um nome exclusivo para o parâmetro de configuração.

Os parâmetros de configuração para uma função são pares de nome e valor que são declarados no arquivo de definição de serviço e são definidos no arquivo de configuração de serviço.

O elemento LocalResources descreve a coleção de recursos de armazenamento locais para uma função de trabalho. Este elemento é pai do elemento LocalStorage.

O elemento LocalStorage identifica um recurso de armazenamento local que fornece espaço de sistema de arquivos para o serviço em tempo de execução. Uma função pode definir zero ou mais recursos de armazenamento local.

noteObservação
O elemento LocalStorage pode ser exibido como filho do elemento WorkerRole para que tenha compatibilidade com as versões anteriores do SDK do Azure.

A tabela a seguir descreve os atributos do elemento LocalStorage.

 

Atributo Tipo Descrição

name

string

Obrigatória. Um nome exclusivo para o repositório local.

cleanOnRoleRecycle

boolean

Opcional. Indica se o repositório local deve ser limpo quando a função é reiniciada. O valor padrão é true.

sizeInMb

int

Opcional. A quantidade desejada de espaço de armazenamento a ser alocada para o repositório local, em MB. Se não estiver especificado, o espaço de armazenamento padrão alocado será 100 MB. A quantidade mínima de espaço de armazenamento que pode ser alocado é 1 MB.

O tamanho máximo dos recursos locais depende do tamanho da máquina virtual. Para obter mais informações, consulte Tamanhos de Máquina Virtual e Serviços de Nuvem para Azure.

O nome do diretório alocado ao recurso de armazenamento local corresponde ao valor fornecido para o atributo do nome. Para obter mais informações sobre como acessar um recurso de armazenamento local usando o código que é executado dentro de uma instância de função, consulte Configuração de recursos de armazenamento local.

O elemento Endpoints descreve a coleção de pontos de extremidade de entrada (externo), interno e de instância para uma função. Este é o elemento pai dos elementos InputEndpoint, InternalEndpoint e InstanceInputEndpoint.

Os pontos de extremidade internos e de entrada são alocados separadamente. Um serviço pode ter um total de 25 pontos de extremidade de entrada, interno e de entrada de instância que podem ser alocados entre as 25 funções permitidas em um serviço. Por exemplo, se houver 5 funções, será possível alocar 5 pontos de extremidade de entrada por função ou 25 pontos de extremidade de entrada para uma única função, ou 1 ponto de extremidade de entrada cada para 25 funções.

noteObservação
Cada função implantada requer uma instância por função. O provisionamento padrão para uma assinatura é limitado a 20 núcleos, sendo, portanto, limitado a 20 instâncias de uma função. Se o aplicativo precisar de mais instâncias do que é fornecido pelo provisionamento padrão, consulte o artigo sobre cobrança, gerenciamento de assinatura e suporte para cotas para obter mais informações de como aumentar a cota.

O elemento InputEndpoint descreve um ponto de extremidade externo para uma função de trabalho.

Você pode definir vários pontos de extremidade que são uma combinação de pontos de extremidade de HTTP, HTTPS, UDP e TCP. Você pode especificar qualquer número de porta que escolher para um ponto de extremidade de entrada, mas os números de porta especificados para cada função no serviço devem ser exclusivos. Por exemplo, se você especificar que uma função usa a porta 80 para HTTP e a porta 443 para HTTPS, você poderá especificar que uma segunda função usa a porta 8080 para HTTP e a porta 8043 para HTTPS.

A tabela a seguir descreve os atributos do elemento InputEndpoint.

 

Atributo Tipo Descrição

name

string

Obrigatória. Um nome exclusivo para o ponto de extremidade externo.

protocol

string

Obrigatória. O protocolo de transporte para o ponto de extremidade externo. Para uma função de trabalho, os possíveis valores são HTTP, HTTPS, UDP ou TCP.

port

int

Obrigatória. A porta para o ponto de extremidade externo. Você pode especificar qualquer número de porta, mas os números de porta especificados para cada função no serviço devem ser exclusivos.

Os valores possíveis variam entre 1 e 65535, incluso (versão 1.7 ou superior do SDK Azure).

certificate

string

Exigido para um ponto de extremidade de HTTPS. O nome de um certificado definido por um elemento Certificate.

localPort

int

Opcional. Especifica uma porta usada para conexões internas no ponto de extremidade. O atributo localPort mapeia a porta externa no ponto de extremidade para uma porta interna em uma função. Isso é útil em cenários onde uma função deve se comunicar com um componente interno em uma porta diferente daquela que está exposta externamente.

Se não estiver especificado, o valor de localPort será o mesmo que o atributo port. Defina o valor de localPort como "*" para atribuir automaticamente uma porta não alocada que pode ser descoberta usando a API de tempo de execução.

Os valores possíveis variam entre 1 e 65535, incluso (versão 1.7 ou superior do SDK Azure).

O atributo localPort só está disponível com o Azure SDK versão 1,3 ou superior.

ignoreRoleInstanceStatus

boolean

Opcional. Quando o valor deste atributo é definido como true, o status de um serviço é ignorado e o ponto de extremidade não será removido pelo balanceador de carga. Definir este valor como true é útil para depurar instâncias ocupadas de um serviço. O valor padrão é false.

noteObservação
Um ponto de extremidade ainda poderá receber tráfego mesmo quando a função não estiver em um estado Pronto.

loadBalancerProbe

string

Opcional. O nome de investigação de balanceador de caro associada ao ponto de extremidade de entrada. Para obter mais informações, consulte Esquema LoadBalancerProbe.

O elemento InternalEndpoint descreve um ponto de extremidade interno para uma função de trabalho. Um ponto de extremidade interno só está disponível para outras instâncias de função executadas dentro do serviço; não está disponível para clientes fora do serviço. Uma função de trabalho pode ter até cinco pontos de extremidade internos HTTP, UDP ou TCP.

A tabela a seguir descreve os atributos do elemento InternalEndpoint.

 

Atributo Tipo Descrição

name

string

Obrigatória. Um nome exclusivo para o ponto de extremidade interno.

protocol

string

Obrigatória. O protocolo de transporte para o ponto de extremidade interno. Os valores possíveis são HTTP, TCP, UDP ou ANY.

Um valor de ANY especifica que qualquer protocolo, qualquer porta é permitido.

port

int

Opcional. A porta usada para conexões internas com balanceamento de carga no ponto de extremidade. Um ponto de extremidade com balanceamento de carga usa duas portas. A porta usada para o endereço IP público e a porta usada no endereço IP privado. Geralmente elas são definidos como a mesma, mas você pode escolher usar portas diferentes.

Os valores possíveis variam entre 1 e 65535, incluso (versão 1.7 ou superior do SDK Azure).

O atributo Port só está disponível com o Azure SDK versão 1,3 ou superior.

O elemento InstanceInputEndpoint descreve um ponto de extremidade de entrada de instância para uma função de trabalho. Um ponto de extremidade de entrada da instância é associado a uma instância de função específica usando a transmissão de porta no balanceador de carga. Cada ponto de extremidade de entrada da instância é mapeado para uma porta específica de um intervalo de portas possíveis. Este elemento é pai do elemento AllocatePublicPortFrom.

O elemento InstanceInputEndpoint só está disponível com o Azure SDK versão 1,7 ou superior.

A tabela a seguir descreve os atributos do elemento InstanceInputEndpoint.

 

Atributo Tipo Descrição

name

string

Obrigatória. Um nome exclusivo para o ponto de extremidade.

localPort

int

Obrigatória. Especifica a porta interna que todas as instâncias de função escutarão para receber o tráfego de entrada encaminhado do balanceador de carga. Os valores possíveis variam entre 1 e 65535.

protocol

string

Obrigatória. O protocolo de transporte para o ponto de extremidade interno. Os valores possíveis são udp ou tcp. Use tcp para tráfego baseado em http/https.

O elemento AllocatePublicPortFrom descreve o intervalo da porta pública que pode ser usado por clientes externos para acessar cada ponto de extremidade de entrada da instância. O número da porta público (VIP) é atribuído desse intervalo e atribuído a cada ponto de extremidade individual de instância de função durante a implantação e atualização do locatário. Este elemento é pai do elemento FixedPortRange.

O elemento AllocatePublicPortFrom só está disponível com o Azure SDK versão 1,7 ou superior.

O elemento FixedPort especifica a porta para o ponto de extremidade interna, que permite conexões de balanceamento de carga no ponto de extremidade.

O elemento FixedPort só está disponível com o Azure SDK versão 1,3 ou superior.

A tabela a seguir descreve os atributos do elemento FixedPort.

 

Atributo Tipo Descrição

port

int

Obrigatória. A porta para o ponto de extremidade interno. Isto tem o mesmo efeito que definir o FixedPortRange mínimo e máximo como a mesma porta.

Os valores possíveis variam entre 1 e 65535, incluso (versão 1.7 ou superior do SDK Azure).

O elemento FixedPortRange especifica o intervalo de portas atribuídas ao ponto de extremidade interno ou ao ponto de extremidade de entrada da instância, e define a porta usada para conexões de balanceamento de carga no ponto de extremidade.

noteObservação
O elemento FixedPortRange funciona de maneira diferente dependendo do elemento no qual reside. Quando o elemento FixedPortRange está no elemento InternalEndpoint, ele abre todas as portas no balanceador de carga dentro do intervalo de atributos e para todas as máquinas virtuais em que a função é executada. Quando o elemento FixedPortRange está no elemento InstanceInputEndpoint, ele abre apenas uma porte dentro do intervalo dos atributos e em cada máquina virtual executando a função.

O elemento FixedPortRange só está disponível com o Azure SDK versão 1,3 ou superior.

A tabela a seguir descreve os atributos do elemento FixedPortRange.

 

Atributo Tipo Descrição

min

int

Obrigatória. A porta mínima no intervalo. Os valores possíveis variam entre 1 e 65535, incluso (versão 1.7 ou superior do SDK Azure).

max

string

Obrigatória. A porta máxima no intervalo. Os valores possíveis variam entre 1 e 65535, incluso (versão 1.7 ou superior do SDK Azure).

O elemento Certificates descreve a coleção de certificados para uma função de trabalho. Este elemento é pai do elemento Certificate. Uma função pode ter inúmeros certificados associados. Para obter mais informações sobre como usar o elemento Certificates, consulte Associar um certificado a um serviço.

O elemento Certificate descreve um certificado que está associado a uma função de trabalho.

A tabela a seguir descreve os atributos do elemento Certificate.

 

Atributo Tipo Descrição

name

string

Obrigatória. Um nome para este certificado, que é usado para referir-se a ele quando estiver associado a um elemento de HTTPS InputEndpoint.

storeLocation

string

Obrigatória. O local do repositório de certificados onde este certificado pode ser localizado no computador local. Os valores possíveis são CurrentUser e LocalMachine.

storeName

string

Obrigatória. O nome do repositório de certificados onde este certificado reside no computador local. Os possíveis valores incluem os nomes de repositório interno My, Root, CA, Trust, Disallowed, TrustedPeople, TrustedPublisher, AuthRoot, AddressBook ou qualquer nome de repositório personalizado. Se um nome de repositório personalizado for especificado, o repositório será criado automaticamente.

permissionLevel

string

Opcional. Especifica as permissões de acesso dadas aos processos de função. Se você somente desejar que os processos elevados acessem a chave privada, especifique a permissão elevated. A permissão limitedOrElevated permite que todos os processos de função acessem a chave privada. Os valores possíveis são limitedOrElevated ou elevated. O valor padrão é limitedOrElevated.

O elemento Imports descreve uma coleção de módulos de importação para uma função de trabalho que adiciona componentes ao sistema operacional convidado. Este elemento é pai do elemento Import. Este elemento é opcional e uma função pode ter somente um bloqueio em tempo de execução.

O elemento Imports só está disponível com o SDK do Azure versão 1,3 ou superior.

O elemento Import especifica um módulo a ser adicionado ao sistema operacional convidado.

O elemento Import só está disponível com o SDK do Azure versão 1,3 ou superior.

A tabela a seguir descreve os atributos do elemento Import.

 

Atributo Tipo Descrição

moduleName

string

Obrigatória. O nome do módulo para importar. Os módulos de importação válidos são:

  • RemoteAccess

  • RemoteForwarder

  • Diagnostics

  • Connect

Os módulos RemoteAccess e RemoteForwarder permitem que você configure sua instância de função para conexões de área de trabalho remota. Para obter mais informações, consulte Set Up a Remote Desktop Connection for a Role.

O módulo Diagnostics permite coletar dados de diagnóstico para uma instância de função. Para obter mais informações, consulte Initialize the Azure Diagnostic Monitor.

O módulo Connect permite configurar conexões protegidas por IPsec entre computadores ou máquinas virtuais na rede da sua organização, além de funções executadas no Azure. Para obter mais informações, consulte Configure Azure Connect.

O elemento Runtime descreve uma coleção de configurações de variável de ambiente para uma função de trabalho que controla o ambiente de tempo de execução do processo de host do Azure. Este elemento é pai do elemento Environment. Este elemento é opcional e uma função pode ter somente um bloqueio em tempo de execução.

O elemento Runtime só está disponível com o SDK do Azure versão 1,3 ou superior.

A tabela a seguir descreve os atributos do elemento Runtime:

 

Atributo Tipo Descrição

executionContext

string

Opcional. Especifica o contexto no qual o Processo de Função é iniciado. O contexto padrão é limited.

  • limited – O processo é iniciado sem privilégios de Administrador.

  • elevated – O processo é iniciado com privilégios de Administrador.

O elemento Environment descreve uma coleção de variáveis de ambiente para uma função de trabalho. Este elemento é pai do elemento Variable. Uma função pode ter inúmeros conjuntos de variáveis de ambiente.

O elemento Variable especifica uma variável de ambiente para definir no sistema operacional convidado.

O elemento Variable só está disponível com o SDK do Azure versão 1,3 ou superior.

A tabela a seguir descreve os atributos do elemento Variable:

 

Atributo Tipo Descrição

name

string

Obrigatória. O nome da variável de ambiente a ser definida.

value

string

Opcional. O valor a ser definido para a variável de ambiente. É necessário incluir um atributo ou um elemento RoleInstanceValue.

O elemento RoleInstanceValue especifica o xPath do qual recuperar o valor da variável.

A tabela a seguir descreve os atributos do elemento RoleInstanceValue.

 

Atributo Tipo Descrição

xpath

string

Opcional. Caminho do local das configurações de implantação da instância. Para obter mais informações, consulte Valores de xPath no Azure.

É necessário incluir um atributo ou um elemento RoleInstanceValue.

O elemento EntryPoint especifica o ponto de entrada de uma função. Este elemento é pai dos elementos NetFxEntryPoint. Esses elementos permitem especificar um aplicativo que não o WaWorkerHost.exe padrão para atuar como o ponto de entrada da função.

O elemento EntryPoint só está disponível com o SDK do Azure versão 1.5 ou superior.

O elemento NetFxEntryPoint especifica o programa a ser executado para uma função.

noteObservação
O elemento NetFxEntryPoint só está disponível com o SDK do Azure versão 1.5 ou superior.

A tabela a seguir descreve os atributos do elemento NetFxEntryPoint.

 

Atributo Tipo Descrição

assemblyName

string

Obrigatória. O caminho e o nome do arquivo do assembly que contém o ponto de entrada. O caminho é relativo à pasta \%ROLEROOT%\Approot (não especifique \%ROLEROOT%\Approot em commandLine; ele é presumido). %ROLEROOT% é uma variável de ambiente mantida pelo Azure e representa o local da pasta raiz da função. A pasta \%ROLEROOT%\Approot representa a pasta do aplicativo da função.

targetFrameworkVersion

string

Obrigatória. A versão do .NET Framework na qual o assembly foi compilado. Por exemplo, targetFrameworkVersion="v4.0".

O elemento ProgramEntryPoint especifica o programa a ser executado para uma função. O elemento ProgramEntryPoint permite especificar um ponto de entrada de programa não baseado em um assembly do .NET.

noteObservação
O elemento ProgramEntryPoint só está disponível com o SDK do Azure versão 1.5 ou superior.

A tabela a seguir descreve os atributos do elemento ProgramEntryPoint.

 

Atributo Tipo Descrição

commandLine

string

Obrigatória. O caminho, o nome do arquivo e qualquer argumento de linha de comando do programa a ser executado. O caminho é relativo à pasta %ROLEROOT%\Approot (não especifique %ROLEROOT%\Approot em commandLine; ele é presumido). %ROLEROOT% é uma variável de ambiente mantida pelo Azure e representa o local da pasta raiz da função. A pasta %ROLEROOT%\Approot representa a pasta do aplicativo da função.

Se o programa for finalizado, a função é reciclada; assim, geralmente defina o programa para continuar a ser executado, em vez de ser um programa que apenas inicie e execute uma tarefa finita.

setReadyOnProcessStart

boolean

Obrigatória. Especifica se a instância de função aguarda até que o programa de linha de comando para sinalizá-la seja iniciado. Esse valor deve ser definido como true neste momento. A definição do valor como false é reservada para uso futuro.

O elemento Startup descreve uma coleção de tarefas que são executadas quando a função é iniciada. Este elemento pode ser pai do elemento Variable. Para obter mais informações sobre como usar as tarefas de inicialização de função, consulte Configuração de componentes IIS no Azure. Este elemento é opcional e uma função pode ter somente um bloqueio de inicialização.

A tabela a seguir descreve o atributo do elemento Startup.

 

Atributo Tipo Descrição

priority

int

Somente para uso interno.

O elemento Task especifica a tarefa de inicialização que ocorre quando a função inicia. As tarefas de inicialização podem ser usadas para executar tarefas que preparam a função para executar os componentes do software de instalação ou outros aplicativos. As tarefas são executadas na ordem de exibição no bloco de elemento Startup.

O elemento Task só está disponível com o SDK do Azure versão 1,3 ou superior.

A tabela a seguir descreve os atributos do elemento Task.

 

Atributo Tipo Descrição

commandLine

string

Obrigatória. Um script, como um arquivo CMD, que contém os comandos a serem executados. Os comandos de inicialização e os arquivos de lote devem ser salvos em formato ANSI. Os formatos de arquivo que definem uma marca de ordem de byte no início do arquivo não serão processados corretamente.

executionContext

string

Especifica o contexto no qual o script é executado.

  • limited [Padrão] – Executar com os mesmos privilégios que a função que está hospedando o processo.

  • elevated – Executar com privilégios de administrador.

taskType

string

Especifica o comportamento de execução do comando.

  • simple [Padrão] – O sistema aguarda a tarefa sair antes de qualquer outra tarefa ser iniciada.

  • background – O sistema não aguarda a tarefa sair.

  • foreground – Semelhante ao segundo plano, exceto que a função não é reiniciada até que todas as tarefas de primeiro plano saiam.

O elemento Contents descreve a coleção de conteúdo de uma função de trabalho. Este elemento é pai do elemento Content.

O elemento Contents só está disponível com o SDK do Azure versão 1.5 ou superior.

O elemento Content define o local de origem do conteúdo a ser copiado para a máquina virtual do Azure e o caminho de destino para o qual ele é copiado.

O elemento Content só está disponível com o SDK do Azure versão 1.5 ou superior.

A tabela a seguir descreve os atributos do elemento Content.

 

Atributo Tipo Descrição

destination

string

Obrigatória. Local na máquina virtual do Azure em que o conteúdo é colocado. Esse local é relativo à pasta %ROLEROOT%\Approot.

Este é o elemento pai do elemento SourceDirectory.

O elemento SourceDirectory define o diretório local do qual o conteúdo é copiado. Use esse elemento para especificar o conteúdo local a ser copiado para a máquina virtual do Azure.

O elemento SourceDirectory só está disponível com o SDK do Azure versão 1.5 ou superior.

A tabela a seguir descreve os atributos do elemento SourceDirectory.

 

Atributo Tipo Descrição

path

string

Obrigatória. Caminho relativo ou absoluto de um diretório local cujo conteúdo será copiado para a máquina virtual do Azure. Há suporte para a expansão de variáveis de ambiente no caminho de diretório.

Consulte também

A Microsoft está realizando uma pesquisa online para saber sua opinião sobre o site do MSDN. Se você optar por participar, a pesquisa online lhe será apresentada quando você sair do site do MSDN.

Deseja participar?
Mostrar:
© 2014 Microsoft