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\v3.0\Windows Communication Foundation) に配置します。
次の例では、すべての構成可能値の既定値を明示的に指定した SMSvcHost.exe.config のサンプルを示します。
<configuration>
<system.serviceModel.activation>
<net.tcp listenBacklog="10"
maxPendingAccepts="2"
maxPendingConnections="10"
receiveTimeout="00:00:10"
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>
</configuration>
SMSvcHost.exe.config を変更する場合
一般的に、SMSvcHost.exe.config ファイルの内容を変更する際には、このファイルに指定するすべての構成設定は、Net.TCP ポート共有サービスを使用するコンピュータのすべてのサービスに影響するため、注意が必要です。これには、Windows プロセス アクティブ化サービス (WAS) の TCP アクティベーション機能を使用する Windows Vista 上のアプリケーションも含まれます。
ただし、Net.TCP ポート共有サービスの既定の構成を変更する必要のある状況もあります。たとえば、maxPendingAccepts の既定値は、控え目に 2 に設定されています。ポート共有を使用する多数のサービスをホストするコンピュータでは、この値を大きくし、最大のスループットを実現する必要があります。
SMSvcHost.exe.config には、ポート共有サービスを使用する可能性のあるプロセス ID に関する情報も含まれています。プロセスが、共有 TCP ポートを使用するためにポート共有サービスに接続すると、そのプロセスのプロセス ID が、ポート共有サービスの使用が許可されている ID のリストに照合されます。これらの ID は、SMSvcHost.exe.config ファイルの <allowAccounts> セクションにセキュリティ識別子 (SID) として指定されています。既定では、ポート共有サービスへのアクセス許可は、システム アカウント (LocalService、LocalSystem、NetworkService) や管理者グループのメンバに与えられます。ポート共有サービスに接続するために別の ID (ユーザー ID など) でプロセスが実行されることを許可しているアプリケーションでは、適切な SID を SMSvcHost.exe.config に明示的に追加する必要があります (これらの変更は SMSvc.exe プロセスが再起動されるまで適用されません)。
メモ : |
---|
ユーザー アカウント コントロール (UAC) が有効化されている Windows Vista システムでは、アカウントが管理者グループのメンバであっても、ローカル ユーザーには昇格されたアクセス許可が必要です。このようなユーザーが昇格なしでもポート共有サービスを使用できるようにするには、ユーザーの SID (またはそのユーザーがメンバとなっているグループの SID) を SMSvcHost.exe.config の <allowAccounts> セクションに明示的に追加する必要があります。 |