誰かが、コードを介して、セッションベースのWCFサービスでmaxConcurrentSessionsの現在の設定を取得する方法について考えていますか?
サービス構成ファイルにmaxConcurrentSessionsが設定されていない場合でも、この値を取得したいのですが、その場合はデフォルト値を取得したいと思います。
基本的に、現在の環境でのmaxConcurrentSessionsのデフォルト値が何であるかを疑いなく証明しようとしています。
ありがとう!
トリックは、構成ファイルで throttlingBehavior 属性の一部を設定し、maxConcurrentSessions を除外することです。
<serviceThrottling maxConcurrentCalls="100" maxConcurrentInstances="100"/>
次に、サーバー上で:
ServiceHost host = new ServiceHost(typeof(MyService));
string msg = "Service Behaviors:" + Environment.NewLine;
foreach (IServiceBehavior behavior in host.Description.Behaviors)
{
msg += behavior.ToString() + Environment.NewLine;
if (behavior is ServiceThrottlingBehavior)
{
ServiceThrottlingBehavior serviceThrottlingBehavior = (ServiceThrottlingBehavior)behavior;
msg += " maxConcurrentSessions = " + serviceThrottlingBehavior.MaxConcurrentSessions.ToString() + Environment.NewLine;
}
}
EventLog.WriteEntry("My Log Source", msg, EventLogEntryType.Information);
これは私に800を与えます。これは、WCF 4.0以降のデフォルトは100 * nbのプロセッサであるというドキュメントをサポートしています。
この記事は役立つかもしれません...下部にスロットル値の読み取りに関するセクションがあります。
サーバー側で行う必要があります(たとえば、サービスメソッドの1つ内で)。また、サンプルでは、最初のChannelDispatcherを取得しています。特定のシナリオでは、実行している内容に応じて1つ以上(不明)になる可能性があります。これは、考慮する必要のある条件である可能性があります。
HTH、ネイサン