Настройка службы совместного использования портов Net.TCP

Резидентные службы, использующие транспорт Net.TCP, могут управлять несколькими дополнительными параметрами, такими как ListenBacklog и MaxPendingAccepts, которые, в свою очередь, управляют поведением базового сокета TCP, используемого для сетевого взаимодействия. Однако эти параметры для каждого сокета применяются только на уровне привязки, если в привязке транспорта отключено совместное использование портов (по умолчанию совместное использование включено).

Если привязка net.tcp включает поддержку общего использования портов (задавая значение portSharingEnabled =true для элемента привязки транспорта), она неявно разрешает внешнему процессу (а именно SMSvcHost.exe, в котором размещается служба совместного использования портов Net.TCP) управлять сокетом TCP от своего имени. Например, при использовании протокола TCP необходимо задать следующее.

<tcpTransport portSharingEnabled="true"  />  

Подобная настройка позволяет игнорировать любые параметры сокета, заданные в элементе привязки транспорта службы, и использовать параметры сокета, задаваемые SMSvcHost.exe.

Для настройки SMSvcHost.exe необходимо создать файл конфигурации XML с именем SmSvcHost.exe.config и разместить его в том же физическом каталоге, что и исполняемый файл SMSvcHost.exe (например, C:\Windows\Microsoft.NET\Framework\v4.5).

В следующем примере представлен образец файла SMSvcHost.exe.config с заданными явно параметрами по умолчанию для всех настраиваемых значений.

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

Определение необходимости изменения файла SMSvcHost.exe.config

В целом, при изменении содержимого файла SMSvcHost.exe.config необходимо соблюдать осторожность, так как любые параметры конфигурации, заданные в этом файле, влияют на работу всех служб на компьютере с поддержкой службы совместного использования портов Net.TCP. Сюда входят приложения в Windows Vista, использующие функции активации TCP службы активации процессов Windows (WAS).

Однако иногда возникает необходимость в изменении конфигурации службы совместного использования портов Net.TCP по умолчанию. Например, значение по умолчанию для maxPendingAccepts равняется количеству процессоров, помноженному на 4. Требуется увеличить это значение для серверов, на которых размещено много служб, совместно использующих порты, чтобы обеспечить максимальную пропускную способность. Значение по умолчанию для maxPendingConnections равно 100. Также следует рассмотреть возможность увеличения этого значения, если наблюдаются потери клиентских подключений вследствие множества одновременных вызовов службы со стороны клиентов.

Файл SMSvcHost.exe.config также содержит информацию об удостоверениях процессов, реализуемых с помощью службы совместного использования портов. При подключении процесса к службе совместного использования портов для работы с общим портом TCP удостоверение подключающегося процесса проверяется по списку удостоверений, которым разрешено работать со службой совместного использования портов. Эти удостоверения указываются как идентификаторы безопасности (SID) в <разделе allowAccounts> файла конфигурации SMSvcHost.exe.config. По умолчанию разрешение на работу со службой совместного использования портов предоставляется системным учетным записям (LocalService, LocalSystem и NetworkService), а также участникам группы "Администраторы". Приложения, которые разрешают выполняемому под другим удостоверением (например, удостоверением пользователя) процессу подключаться к службе совместного использования портов, должны явно добавить в файл SMSvcHost.exe.config соответствующие SID (эти изменения не применяются до перезапуска процесса SMSvc.exe).

Примечание.

В системах Windows Vista с включенной функцией управления учетными записями (UAC) локальные пользователи требуют повышенных разрешений, даже если их учетная запись входит в группу Администратор istrators. Чтобы разрешить этим пользователям использовать службу общего доступа к портам без повышения прав, идентификатор безопасности пользователя (или идентификатор безопасности группы, в которой пользователь является членом), должен быть явно добавлен в <раздел allowAccounts> SMSvcHost.exe.config.

Предупреждение

В файле SMSvcHost.exe.config по умолчанию задается пользовательское значение etwProviderId, чтобы трассировка SMSvcHost.exe не вмешивалась в работу трассировок служб.

См. также