0

アプリケーションの特定のイベントで外部 Web サービスを呼び出す必要があります。アプリケーションを変更して、その外部 Web サービスの依存関係を作成したくありません。したがって、何らかの外部コンポーネントを使用してこれを行う方法を考える必要があります。

考えられるアプローチの 1 つは、アプリケーションでいくつかのイベントが発生したときにいっぱいになるデータベース ビューを作成することです。次に、そのビューに CLR 関数を呼び出すトリガーを設定します。その CLR 関数で、外部 Web サービスを呼び出します。これにより、優れた「リアルタイム」統合が得られます。しかし、このアプローチには欠点があります。主要な 1 つは、CLR からの Web サービスの呼び出しは、CLR がなんらかの応答を受け取るまでメイン SQL スレッド (?!) をブロックするため、良い考えではないように思われることです。

これまでのところ、このプロパティを設定するとパフォーマンスの問題が解決することがわかりました。

System.Net.ServicePointManager.DefaultConnectionLimit = 9999

詳細については、こちらを参照してください

さて、私のニーズ (つまり、アプリケーションから外部 Web サービスへの呼び出しなしで、リアルタイムまたは少なくともリアルタイムに近い統合) を知っているので、それを行うためのより良い方法はありますか?

私が考えることができるもう 1 つのアプローチは、外部 Web サービスへの呼び出しをトリガーする必要がある DB の変更を定期的にチェックするサービスを用意することです。このサービスがそのような変更を検出すると、Web サービスを呼び出してデータを転送します。もちろん、これは真のリアルタイム統合ではありません。パフォーマンスの問題を除けば、リアルタイムの統合が保証され、アプリケーションにまったく影響を与えないため、トリガーと CLR を使用する方がはるかに好きです。

4

1 に答える 1

2

Web サービスの呼び出しをデータベースに移動するという設計に同意できるかどうかはわかりません。ただし、アプリケーションを変更したくない理由があると確信しています。

試すことができるいくつかのオプションがあります -

1) データベースと Web サービス呼び出しを行う CLR の代わりに、メッセージ キューを使用します。NServiceBusは、イベントの発生をメッセージとして渡すのに適しています。これにより、この呼び出しがトリガーされます。

2) SQL サーバーを使用してイベントを保存することに行き詰まっている場合は、SQL サーバー サービス ブローカーを参照してください。

于 2013-01-24T09:04:37.683 に答える