0

アプリケーション間のミドルウェアとして機能する WCF サービスがあります。WCF は複数のクライアント (システム A など) から複数の呼び出しを受け取ります。それぞれの呼び出しは、別のシステム (システム B など) への呼び出しになります。

システム B への呼び出しを毎回 1 回発生させることは可能ですか? 呼び出しを麻痺させる代わりに?

4

1 に答える 1

3

システム B がどのスレッドで呼び出されたかを気にせず、同時に複数のスレッドから呼び出されないようにしたい場合 (おそらく、システム B がグローバル変数またはグローバル状態に依存していることを知っているため)、次のようにします。単純なミューテックス ロックを使用して、すべてのスレッドを整列させ、システム B の単一ファイルを通過させることができます。このようなもの:

public class MyClass
{
  private static object _lockObj = new Object();

  public void MyFunction()
  {
    lock(_lockObj)  
    {
      system_B_call(etc);
    }
  }
}

重要: 「スロットル」するすべての関数は、同じロック オブジェクト インスタンスを使用する必要があります。

システム B が呼び出されるスレッドに敏感な場合 (WinForms や WCF を含む多くの UI フレームワークでは、メインの UI スレッドで UI の変更を行う必要があります)、呼び出しを特定のスレッドにマーシャリングする必要があります。これを行うにはいくつかの方法がありますが、そのうちの 1 つはSynchronizationContextとその Post メソッドまたは Send メソッドを使用することです。

于 2013-04-12T19:40:04.783 に答える