Partilhar via


Configurando o serviço de compartilhamento de porta Net.TCP

Os serviços auto-hospedados que usam o transporte Net.TCP podem controlar várias configurações avançadas, como ListenBacklog e , que governam o comportamento do soquete MaxPendingAcceptsTCP subjacente usado para comunicação de rede. No entanto, essas configurações para cada soquete só se aplicam no nível de vinculação se a associação de transporte tiver desabilitado o compartilhamento de portas, que é habilitado por padrão.

Quando uma ligação net.tcp permite o compartilhamento de porta (definindo portSharingEnabled =true o elemento de vinculação de transporte), ela implicitamente permite que um processo externo (ou seja, o SMSvcHost.exe, que hospeda o Serviço de Compartilhamento de Porta Net.TCP) gerencie o soquete TCP em seu nome. Por exemplo, ao usar TCP, especifique:

<tcpTransport portSharingEnabled="true"  />  

Quando configurado dessa forma, todas as configurações de soquete especificadas no elemento de vinculação de transporte do serviço são ignoradas em favor das configurações de soquete especificadas por SMSvcHost.exe.

Para configurar o SMSvcHost.exe, crie um arquivo de configuração XML chamado SmSvcHost.exe.config e coloque-o no mesmo diretório físico que o executável SMSvcHost.exe (por exemplo, C:\Windows\Microsoft.NET\Framework\v4.5).

O exemplo a seguir ilustra um exemplo de SMSvcHost.exe.config, com as configurações padrão para todos os valores configuráveis declaradas explicitamente.

<configuration>  
   <system.serviceModel.activation>  
       <net.tcp listenBacklog="16" <!-- 16 * # of processors -->  
          maxPendingAccepts="4"<!-- 4 * # of processors -->  
          maxPendingConnections="100"  
          receiveTimeout="00:00:30" <!-- 30 seconds -->  
          teredoEnabled="false">  
          <allowAccounts>  
             <!-- LocalSystem account -->  
             <add securityIdentifier="S-1-5-18"/>  
             <!-- LocalService account -->  
             <add securityIdentifier="S-1-5-19"/>  
             <!-- Administrators account -->  
             <add securityIdentifier="S-1-5-20"/>  
             <!-- Network Service account -->  
             <add securityIdentifier="S-1-5-32-544" />  
             <!-- IIS_IUSRS account (Vista only) -->  
             <add securityIdentifier="S-1-5-32-568"/>  
           </allowAccounts>  
       </net.tcp>  
    </system.serviceModel.activation>
</configuration>  

Quando modificar o SMSvcHost.exe.config

Em geral, deve-se ter cuidado ao modificar o conteúdo do arquivo SMSvcHost.exe.config, porque quaisquer definições de configuração especificadas nesse arquivo afetam todos os serviços em um computador que usa o Serviço de Compartilhamento de Porta Net.TCP. Isso inclui aplicativos no Windows Vista que usam os recursos de ativação TCP do Serviço de Ativação de Processos do Windows (WAS).

No entanto, às vezes você pode precisar alterar a configuração padrão para o serviço de compartilhamento de porta Net.TCP. Por exemplo, o valor padrão para maxPendingAccepts é 4 * número de processadores. Os servidores que hospedam um grande número de serviços que usam o compartilhamento de porta podem aumentar esse valor para atingir a taxa de transferência máxima. O valor padrão para maxPendingConnections é 100. Você deve considerar aumentar esse valor também se houver vários clientes simultâneos chamando o serviço e o serviço estiver descartando conexões de cliente.

SMSvcHost.exe.config também contém informações sobre as identidades de processo que podem fazer uso do serviço de compartilhamento de porta. Quando um processo se conecta ao serviço de compartilhamento de porta para usar uma porta TCP compartilhada, a identidade do processo de conexão é verificada em relação a uma lista de identidades que têm permissão para usar o serviço de compartilhamento de porta. Essas identidades são especificadas como identificadores de segurança (SIDs) na <seção allowAccounts> do arquivo SMSvcHost.exe.config. Por padrão, a permissão para usar o serviço de compartilhamento de porta é concedida às contas do sistema (LocalService, LocalSystem e NetworkService), bem como aos membros do grupo Administradores. Os aplicativos que permitem que um processo executado como outra identidade (por exemplo, uma identidade de usuário) se conecte ao serviço de compartilhamento de porta devem adicionar explicitamente o SID apropriado ao SMSvcHost.exe.config (essas alterações não são aplicadas até que o processo de SMSvc.exe seja reiniciado).

Nota

Nos sistemas Windows Vista com o Controle de Conta de Usuário (UAC) habilitado, os usuários locais exigem permissões elevadas, mesmo que sua conta seja membro do grupo Administradores. Para permitir que esses usuários usem o serviço de compartilhamento de porta sem elevação, o SID do usuário (ou o SID de um grupo do qual o usuário é membro) deve ser explicitamente adicionado à <seção allowAccounts> do SMSvcHost.exe.config.

Aviso

O arquivo SMSvcHost.exe.config padrão especifica um personalizado etwProviderId para evitar que o rastreamento de SMSvcHost.exe interfira com os rastreamentos de serviço.

Consulte também