アプリケーション間のミドルウェアとして機能する WCF サービスがあります。WCF は複数のクライアント (システム A など) から複数の呼び出しを受け取ります。それぞれの呼び出しは、別のシステム (システム B など) への呼び出しになります。
システム B への呼び出しを毎回 1 回発生させることは可能ですか? 呼び出しを麻痺させる代わりに?
アプリケーション間のミドルウェアとして機能する WCF サービスがあります。WCF は複数のクライアント (システム A など) から複数の呼び出しを受け取ります。それぞれの呼び出しは、別のシステム (システム B など) への呼び出しになります。
システム B への呼び出しを毎回 1 回発生させることは可能ですか? 呼び出しを麻痺させる代わりに?
システム 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 メソッドを使用することです。