0

我需要在我的应用程序中的某些事件上调用外部 Web 服务。我不想修改我的应用程序并对该外部 Web 服务建立任何依赖关系。所以,我需要想办法用某种外部组件来做到这一点。

一种可能的方法是我制作数据库视图,当我的应用程序中的某些事件发生时,它会被填满。然后我将在该视图上设置触发器,该触发器将调用 CLR 函数。在该 CLR 函数中,我将调用外部 Web 服务。通过这样做,我将获得很好的“实时”集成。但是,这种方法有缺点。主要问题是从 CLR 调用 Web 服务似乎不是一个好主意,因为它会阻塞主 SQL 线程(?!),直到 CLR 收到一些答案。

到目前为止,我只发现设置此属性将有助于解决性能问题:

System.Net.ServicePointManager.DefaultConnectionLimit = 9999

有关它的更多信息,您可以在此处找到。

现在,既然您知道我的需求(即实时或至少接近实时的集成,而无需从我的应用程序到外部 Web 服务的任何调用),是否有更好的方法来做到这一点?

我能想到的另一种方法是让一些服务定期检查我的数据库中需要触发对外部 Web 服务的调用的更改。一旦此服务检测到此类更改,它将调用 Web 服务并传输数据。这当然不是真正的实时集成。我必须承认,除了性能问题之外,我更喜欢触发器和 CLR,因为它保证了实时集成并且对我的应用程序没有任何影响。

4

1 回答 1

2

我不确定我是否同意将 Web 服务调用移动到数据库的设计。但是,我确信您不想更改应用程序是有原因的。

您可以尝试以下几个选项 -

1) 使用消息队列代替数据库和 CLR 进行 Web 服务调用。NServiceBus是将事件发生作为消息传递的不错选择,可以触发此调用

2)如果您坚持使用 SQL 服务器存储事件,请查看SQL 服务器服务代理

于 2013-01-24T09:04:37.683 回答