アプリケーションの特定のイベントで外部 Web サービスを呼び出す必要があります。アプリケーションを変更して、その外部 Web サービスの依存関係を作成したくありません。したがって、何らかの外部コンポーネントを使用してこれを行う方法を考える必要があります。
考えられるアプローチの 1 つは、アプリケーションでいくつかのイベントが発生したときにいっぱいになるデータベース ビューを作成することです。次に、そのビューに CLR 関数を呼び出すトリガーを設定します。その CLR 関数で、外部 Web サービスを呼び出します。これにより、優れた「リアルタイム」統合が得られます。しかし、このアプローチには欠点があります。主要な 1 つは、CLR からの Web サービスの呼び出しは、CLR がなんらかの応答を受け取るまでメイン SQL スレッド (?!) をブロックするため、良い考えではないように思われることです。
これまでのところ、このプロパティを設定するとパフォーマンスの問題が解決することがわかりました。
System.Net.ServicePointManager.DefaultConnectionLimit = 9999
詳細については、こちらを参照してください。
さて、私のニーズ (つまり、アプリケーションから外部 Web サービスへの呼び出しなしで、リアルタイムまたは少なくともリアルタイムに近い統合) を知っているので、それを行うためのより良い方法はありますか?
私が考えることができるもう 1 つのアプローチは、外部 Web サービスへの呼び出しをトリガーする必要がある DB の変更を定期的にチェックするサービスを用意することです。このサービスがそのような変更を検出すると、Web サービスを呼び出してデータを転送します。もちろん、これは真のリアルタイム統合ではありません。パフォーマンスの問題を除けば、リアルタイムの統合が保証され、アプリケーションにまったく影響を与えないため、トリガーと CLR を使用する方がはるかに好きです。