1

WCF サービスを現在のリソースに適応させることは可能ですか?たとえば、RAM が少ない場合に同時呼び出しをより低い nr に変更することはできますか?

よろしくお願いします

4

1 に答える 1

2

実際、.net 4 以降ではすでにそうなっています (こちらのブログ投稿を参照)。ただし、プロセッサの数だけが重要です。

  • MaxConcurrentSessions : デフォルトは 100 * ProcessorCount
  • MaxConcurrentCalls : デフォルトは 16 * ProcessorCount
  • MaxConcurrentInstances : デフォルトは上記の 2 つの合計で、前と同じパターンに従います。

HTTP はステートレス プロトコルであり、スケーラビリティのためにサーバー側でセッションを使用しないことをお勧めします。典型的なフロント エンド サーバーは、メモリではなく CPU を消費します (ScaleOut と ScaleUp)。

ただし、WCF の制限、別名 WCF スロットリングは単なる動作です。ServiceHost カスタム ServiceHostFactory を使用して、起動時にこの動作を追加/編集します。

ServiceThrottlingBehavior throttle = new ServiceThrottlingBehavior();
throttle.MaxConcurrentCalls = /*what you want*/;
throttle.MaxConcurrentSessions = /*what you want*/;
throttle.MaxConcurrentInstances = /*what you want*/; 

ServiceHost host = new ServiceHost(typeof(TestService));    
// if host has behaviors, remove them.
if (host.Description.Behaviors.Count != 0)
{
   host.Description.Behaviors.Clear();
}
// add dynamically created throttle behavior
host.Description.Behaviors.Add(throttle);

//open host
host.Open();

カスタムServiceHostFactoryを使用して同じことを実現できます。

<%@ ServiceHost Language="C#" Debug="true" Service="MyWebApplication.TestService"
                Factory="MyWebApplication.TestServiceHostFactory" %>
于 2013-06-11T14:20:20.240 に答える