使用 Net.TCP 传输的自承载服务可以控制多个高级设置,例如 ListenBacklog
和 MaxPendingAccepts
,这些设置控制用于网络通信的基础 TCP 套接字的行为。 但是,如果传输绑定已禁用端口共享(默认情况下处于启用状态),则每个套接字的这些设置仅在绑定级别适用。
当 net.tcp 绑定启用端口共享(通过在传输绑定元素上进行设置 portSharingEnabled =true
)时,它隐式允许外部进程(即托管 Net.TCP 端口共享服务的 SMSvcHost.exe)代表其管理 TCP 套接字。 例如,使用 TCP 时,请指定:
<tcpTransport portSharingEnabled="true" />
以这种方式配置时,将忽略在服务的传输绑定元素上指定的任何套接字设置,而应使用 SMSvcHost.exe指定的套接字设置。
要配置 SMSvcHost.exe,请创建一个名为 SmSvcHost.exe.config 的 XML 配置文件,并将其放置在与 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 上使用 Windows 进程激活服务 (WAS) 的 TCP 激活功能的应用程序。
但是,有时您可能需要更改 Net.TCP 端口共享服务的默认配置。 例如,的 maxPendingAccepts
默认值为 4 * 处理器数。 托管大量使用端口共享的服务的服务器可能会增加此值以实现最大吞吐量。 的默认 maxPendingConnections
值为 100。 如果有多个并发客户端调用服务,并且服务正在断开客户端连接,则还应考虑增加此值。
SMSvcHost.exe.config 还包含有关可能使用 Port Sharing 服务的进程身份的信息。 当进程连接到端口共享服务以使用共享 TCP 端口时,将根据允许使用端口共享服务的身份列表检查连接进程的进程身份。 这些标识在 SMSvcHost.exe.config 文件的 allowAccounts> 部分中指定为安全标识符 (SID<)。 默认情况下,将向系统帐户(LocalService、LocalSystem 和 NetworkService)以及 Administrators 组的成员授予使用端口共享服务的权限。 允许以其他身份(例如,用户身份)运行的进程连接到端口共享服务的应用程序必须将相应的 SID 显式添加到 SMSvcHost.exe.config(在重新启动 SMSvc.exe 进程之前,不会应用这些更改)。
注释
在启用了用户帐户控制 (UAC) 的 Windows Vista 系统上,本地用户需要提升的权限,即使其帐户是 Administrators 组的成员也是如此。 要允许这些用户在不提升的情况下使用端口共享服务,必须将用户的 SID(或用户所属组的 SID)显式添加到 <SMSvcHost.exe.config的 allowAccounts> 部分。
警告
默认 SMSvcHost.exe.config 文件指定自定义 etwProviderId
,以防止 SMSvcHost.exe 跟踪干扰服务跟踪。