4

誰かが、コードを介して、セッションベースのWCFサービスでmaxConcurrentSessionsの現在の設定を取得する方法について考えていますか?

サービス構成ファイルにmaxConcurrentSessionsが設定されていない場合でも、この値を取得したいのですが、その場合はデフォルト値を取得したいと思います。

基本的に、現在の環境でのmaxConcurrentSessionsのデフォルト値が何であるかを疑いなく証明しようとしています。

ありがとう!

4

2 に答える 2

4

トリックは、構成ファイルで 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のプロセッサであるというドキュメントをサポートしています。

于 2013-03-19T20:31:10.877 に答える
1

この記事は役立つかもしれません...下部にスロットル値の読み取りに関するセクションがあります。

サーバー側で行う必要があります(たとえば、サービスメソッドの1つ内で)。また、サンプルでは、​​最初のChannelDispatcherを取得しています。特定のシナリオでは、実行している内容に応じて1つ以上(不明)になる可能性があります。これは、考慮する必要のある条件である可能性があります。

HTH、ネイサン

于 2013-03-19T19:06:07.507 に答える