使用 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 跟蹤干擾服務跟蹤。