Net.TCP ポート共有サービスを構成する
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 プロセス アクティブ化サービス (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) や管理者グループのメンバーに与えられます。 ポート共有サービスに接続するために別の ID (ユーザー ID など) でプロセスが実行されることを許可しているアプリケーションでは、適切な SID を SMSvcHost.exe.config に明示的に追加する必要があります (これらの変更は SMSvc.exe プロセスが再起動されるまで適用されません)。
Note
ユーザー アカウント コントロール (UAC) が有効化されている Windows Vista システムでは、アカウントが管理者グループのメンバーであっても、ローカル ユーザーには昇格されたアクセス許可が必要です。 このようなユーザーが昇格なしでもポート共有サービスを使用できるようにするには、ユーザーの SID (またはそのユーザーがメンバーとなっているグループの SID) を SMSvcHost.exe.config の <allowAccounts> セクションに明示的に追加する必要があります。
警告
既定の SMSvcHost.exe.config ファイルは、カスタムの etwProviderId
を指定することによって、SMSvcHost.exe のトレースの影響がサービス トレースに及ぶのを防ぎます。