0

マルチスレッドのシングルトン パターンを実装するクラス (ZogCheckPublisher) があります。このクラスは、Windows サービスによってホストされる WCF サービスの公開されたメソッド (PrintZogChecks) 内で使用されます。

public class ProcessKicker : IProcessKicker
{
   public void PrintZogChecks(ZogCheckType checkType)
   {    
       ZogCheckPublisher.Instance.ProcessCheckOrCoupon(checkType);
   }
}

ZogCheckPublisher は、現在印刷中の「checkType」を追跡し、現在アクティブな印刷要求と重複する要求を拒否します。ServiceBehaviors と使用する適切な動作を理解しようとしています。これは適切だと思います:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]

マルチスレッド化されたサービスの 1 つのインスタンス。私が物事を正しく理解しているなら?

4

1 に答える 1

2

あなたの理解は正しいです。

サービスの動作は、サービスの単一のマルチスレッド インスタンスを実装します。

[ServiceBehaviorAttribute(Name = "Test", InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple]

シングルトン サービスでは、構成された同時実行モードだけが、保留中の呼び出しの同時実行を制御します。したがって、サービス インスタンスが ConcurrencyMode.Multiple で構成されている場合、同じクライアントからの呼び出しの同時処理が許可されます。呼び出しは、サービス インスタンスによって、チャネルから外れるのと同じ速さで (スロットル制限まで) 実行されます。もちろん、ステートフルな非同期サービス インスタンスの場合は常にそうであるように、サービス インスタンスへのアクセスを同期しないと、状態が破損する危険があります。

次のリンクでは、同時実行管理に関する追加のガイダンスを提供してい
ます

よろしく、

于 2013-10-17T19:10:42.063 に答える