Compartir a través de


Configuración del servicio de uso compartido de puertos Net.TCP

Los servicios autohospedados que usan el transporte Net.TCP pueden controlar varias opciones de configuración avanzadas, como ListenBacklog y MaxPendingAccepts, que rigen el comportamiento del socket TCP subyacente que se usa para la comunicación de red. Sin embargo, esta configuración para cada socket solo se aplica en el nivel de enlace si el enlace de transporte ha deshabilitado el uso compartido de puertos, que está habilitado de forma predeterminada.

Cuando un enlace net.tcp habilita el uso compartido de puertos (mediante la configuración portSharingEnabled =true en el elemento de enlace de transporte), permite implícitamente que un proceso externo (es decir, el SMSvcHost.exe, que hospeda el servicio de uso compartido de puertos Net.TCP) administre el socket TCP en su nombre. Por ejemplo, al utilizar TCP, especifique:

<tcpTransport portSharingEnabled="true"  />  

Cuando se configura de esta manera, cualquier configuración de socket especificada en el elemento de enlace de transporte del servicio se omite en favor de la configuración de socket especificada por SMSvcHost.exe.

Para configurar el SMSvcHost.exe, cree un archivo de configuración XML denominado SmSvcHost.exe.config y colóquelo en el mismo directorio físico que el ejecutable SMSvcHost.exe (por ejemplo, C:\Windows\Microsoft.NET\Framework\v4.5).

En el ejemplo siguiente se muestra un ejemplo SMSvcHost.exe.config, con la configuración predeterminada para todos los valores configurables indicados explícitamente.

<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>  

Cuándo modificar SMSvcHost.exe.config

En general, se debe tener cuidado al modificar el contenido del archivo de SMSvcHost.exe.config, ya que los valores de configuración especificados en este archivo afectan a todos los servicios de un equipo que utiliza el servicio de uso compartido de puertos Net.TCP. Esto incluye las aplicaciones de Windows Vista que usan las características de activación TCP del Servicio de activación de procesos (WAS) de Windows.

Sin embargo, a veces es posible que deba cambiar la configuración predeterminada del servicio de uso compartido de puertos Net.TCP. Por ejemplo, el valor predeterminado para maxPendingAccepts es 4 * número de procesadores. Los servidores que hospedan un gran número de servicios que utilizan el uso compartido de puertos pueden aumentar este valor para lograr el máximo rendimiento. El valor predeterminado para maxPendingConnections es 100. También debe considerar la posibilidad de aumentar este valor si hay varios clientes simultáneos que llaman al servicio y el servicio quita las conexiones de cliente.

SMSvcHost.exe.config también contiene información sobre las identidades de proceso que pueden hacer uso del servicio de compartición de puertos. Cuando un proceso se conecta al servicio de compartición de puertos para hacer uso de un puerto TCP compartido, la identidad del proceso de conexión se compara con una lista de identidades a las que se les permite hacer uso del servicio de compartición de puertos. Estas identidades se especifican como identificadores de seguridad (SID) en la <sección allowAccounts> del archivo SMSvcHost.exe.config. De forma predeterminada, el permiso para usar el servicio de uso compartido de puertos se concede a las cuentas del sistema (LocalService, LocalSystem y NetworkService), así como a los miembros del grupo Administradores. Las aplicaciones que permiten que un proceso que se ejecuta como otra identidad (por ejemplo, una identidad de usuario) se conecte al servicio de uso compartido de puertos deben agregar explícitamente el SID adecuado al SMSvcHost.exe.config (estos cambios no se aplican hasta que se reinicia el proceso SMSvc.exe).

Nota:

En los sistemas Windows Vista con el Control de cuentas de usuario (UAC) habilitado, los usuarios locales requieren permisos elevados incluso si su cuenta es miembro del grupo Administradores. Para permitir que estos usuarios utilicen el servicio de uso compartido de puertos sin elevación, el SID del usuario (o el SID de un grupo del que el usuario es miembro) debe agregarse explícitamente a la <sección allowAccounts> de SMSvcHost.exe.config.

Advertencia

El archivo de SMSvcHost.exe.config predeterminado especifica una costumbre etwProviderId para evitar que el seguimiento de SMSvcHost.exe interfiera con los seguimientos de servicio.

Consulte también