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 MaxPendingAccepts, que regem o comportamento do soquete TCP subjacente usado para comunicação de rede. No entanto, essas configurações para cada soquete só se aplicam no nível de associação se a associação de transporte tiver desabilitado o compartilhamento de porta, que está habilitado por padrão.

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

<tcpTransport portSharingEnabled="true"  />  

Quando configuradas dessa forma, todas as configurações de soquete especificadas no elemento de associação de transporte do serviço são ignoradas em favor das configurações de soquete especificadas pelo 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 SMSvcHost.exe executável (por exemplo, C:\Windows\Microsoft.NET\Framework\v4.5).

O exemplo a seguir ilustra uma SMSvcHost.exe.config de exemplo, 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 tomar cuidado ao modificar o conteúdo do arquivo SMSvcHost.exe.config, pois todas as configurações especificadas neste arquivo afetam todos os serviços em um computador que use o Serviço de Compartilhamento de Porta Net.TCP. Isso inclui aplicativos no Windows Vista que usam os recursos de Ativação TCP do WAS (Serviço de Ativação de Processo do Windows).

No entanto, às vezes, talvez seja necessário 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 removendo conexões de cliente.

O SMSvcHost.exe.config também contém informações sobre as identidades do processo que podem usar o 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 uma lista de identidades que têm permissão para usar o serviço de compartilhamento de porta. Essas identidades são especificadas como SIDs (identificadores de segurança) 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 a contas do sistema (LocalService, LocalSystem e NetworkService), bem como membros do grupo Administradores. Os aplicativos que permitem que um processo em execução 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 SMSvc.exe seja reiniciado).

Observação

Em sistemas Windows Vista com 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 seja membro) deve ser adicionado explicitamente à seção <allowAccounts> do SMSvcHost.exe.config.

Aviso

O arquivo SMSvcHost.exe.config padrão especifica um etwProviderId personalizado para impedir que o rastreamento do SMSvcHost.exe interfira nos rastreamentos de serviço.

Confira também