何百もの同時要求を wcf サービスに送信できるアプリケーションがあります。サービスは、http フェデレーション バインディングを公開しています。
現在、単一のクライアントと TPL を使用して、複数のスレッドでリクエストを送信しています。また、system.net の最大接続数の設定を 1000 に変更して、Windows が wcf を最大 2 つの同時要求に制限しないようにしました。
認証トークンなどを取得しているため、最初のリクエストに時間がかかることがわかります。その後、リクエスト時間は通常大幅に短縮され始めますが、断続的にスパイクが発生し、サーバー ログとは相関しません。
これが高スループットの非常にスケーラブルなクライアントにアプローチする最良の方法であるかどうか疑問に思っています。
複数のスレッド間で Client プロキシを共有し、複数のスレッド間で ChannelFactory を共有してみました。すべてのスレッドは TPL を使用して実行されます。
バインディングが表示されます
<basicHttpBinding>
<binding name="Binding1" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:05:00" closeTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
<message clientCredentialType="UserName" algorithmSuite="Default"/>
</security>
</binding>
</basicHttpBinding>