0

InstanceContextMode = PerCall、ConcurrencyMode = Multiple、TCPを実行しているWCFサービスがあり、Selfhost(Windowsサービス)とIIS7/IIS8でホストされています。

スロットルはこれに設定されています:

<serviceThrottling maxConcurrentCalls="2000" maxConcurrentSessions="2147483647" maxConcurrentInstances="2000"/>

そして、バインディングは次のようになります:

<binding name="netTcpRegular" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="infinite" sendTimeout="01:00:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="1000" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="200" maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
          <reliableSession ordered="true" inactivityTimeout="infinite" enabled="false"/>
          <security mode="None">
            <transport clientCredentialType="None"/>
          </security>
        </binding>

私たちはサービスで状態を維持しているので、すべてのユーザーはすべての呼び出しでフェッチされる独自のオブジェクトを持っています。

問題は、これらの設定で何人の同時ユーザー(セッション)を持つことができ、どの設定がこれに影響を与えているかということです。

4

1 に答える 1

0

これは、1 つのクライアントが一度に行う同時呼び出しの数に依存します。つまり、5 つの異なるスレッドで 5 つの呼び出しを行う場合、maxconcurrentusers の値は、処理できるセッション数の 5 倍になります。InstanceContextMode = PerCall を使用していると、WCF が作成するインスタンスの数として maxConcurrentCalls と maxConcurrentInstances のどちらか低い方を取ることがわかります。

したがって、クライアントごとに一度に 1 つの呼び出ししかない場合、指定した値からのセッション数は 2000 です。

クライアントごとに 5 つの同時呼び出しを行う場合は、400 に設定する必要があります。

多くの場合、負荷テストでの試行錯誤が最善の方法です。

ここに良い例があります -- http://blogs.msdn.com/b/rickrain/archive/2009/06/26/wcf-instancing-concurrency-and-throttling-part-3.aspx

于 2012-11-07T08:33:19.380 に答える