Net.TCP ポート共有サービスを構成する

Net.TCP トランスポートを使用する自己ホスト型サービスは、ListenBacklogMaxPendingAccepts など、いくつかの高度な設定を制御できます。これらは、ネットワーク通信で使用される、ベースである 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="100"
          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 プロセスが再起動されるまで適用されません)。

Aa702669.note(ja-jp,VS.100).gif注 :
ユーザー アカウント コントロール (UAC) が有効化されている Windows Vista システムでは、アカウントが管理者グループのメンバーであっても、ローカル ユーザーには昇格されたアクセス許可が必要です。このようなユーザーが昇格なしでもポート共有サービスを使用できるようにするには、ユーザーの SID (またはそのユーザーがメンバーとなっているグループの SID) を SMSvcHost.exe.config の <allowAccounts> セクションに明示的に追加する必要があります。

Aa702669.Warning(ja-jp,VS.100).gif 注意 :
既定の SMSvcHost.exe.config ファイルは、カスタムの etwProviderId を指定することによって、SMSvcHost.exe のトレースの影響がサービス トレースに及ぶのを防ぎます。

参照

その他のリソース

<net.tcp>