Net.TCP トランスポートを使用するセルフホステッド サービスでは、ネットワーク通信に使用される基になる TCP ソケットの動作を制御する ListenBacklog
や MaxPendingAccepts
など、いくつかの詳細設定を制御できます。 ただし、各ソケットのこれらの設定は、トランスポート バインディングでポート共有が無効になっている場合 (既定では有効になっています) にのみ、バインディング レベルで適用されます。
net.tcp バインディングがポート共有を有効にすると (トランスポート・バインディング要素に portSharingEnabled =true
を設定することによって)、外部プロセス (つまり、Net.TCP ポート共有サービスをホストする SMSvcHost.exe) が Net.tcp 代わりに 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 プロセス アクティブ化サービス (WAS) の TCP アクティブ化機能を使用する Windows Vista 上のアプリケーションが含まれます。
ただし、Net.TCP ポート共有サービスのデフォルト設定を変更する必要がある場合があります。 たとえば、 maxPendingAccepts
のデフォルト値は 4 * プロセッサの数です。 ポート共有を使用する多数のサービスをホストするサーバーでは、最大スループットを実現するために、この値を増やすことができます。
maxPendingConnections
のデフォルト値は 100 です。 この値を増やすことも検討する必要があります。また、複数の同時クライアントがサービスを呼び出していて、サービスがクライアント接続を切断している場合にも、この値を増やすことを検討する必要があります。
SMSvcHost.exe.config には、ポート共有サービスを使用する可能性のあるプロセス ID に関する情報も含まれています。 プロセスがポート共有サービスに接続して共有 TCP ポートを利用する場合、接続しているプロセスのプロセス ID は、ポート共有サービスの使用が許可されている ID のリストと照合されます。 これらの ID は、SMSvcHost.exe.config ファイルの <allowAccounts> セクションでセキュリティ識別子 (SID) として指定されます。 デフォルトでは、ポート共有サービスを使用する権限は、システムアカウント (LocalService、LocalSystem、NetworkService) と Administrators グループのメンバーに付与されます。 別の ID (ユーザー ID など) として実行されているプロセスがポート共有サービスに接続できるようにするアプリケーションは、適切な SID を SMSvcHost.exe.config に明示的に追加する必要があります (これらの変更は、SMSvc.exe プロセスが再起動されるまで適用されません)。
注
ユーザー アカウント制御 (UAC) が有効になっている Windows Vista システムでは、ローカル ユーザーのアカウントが Administrators グループのメンバーであっても、昇格されたアクセス許可が必要です。 これらのユーザーが昇格せずにポート共有サービスを利用できるようにするには、ユーザーの SID (またはユーザーがメンバーであるグループの SID) を SMSvcHost.exe.configの <allowAccounts> セクションに明示的に追加する必要があります。
Warnung
デフォルトの SMSvcHost.exe.config ファイルでは、SMSvcHost.exe トレースがサービストレースに干渉しないように、カスタム etwProviderId
が指定されています。