我需要在应用程序中的某些事件上调用外部web服务。我不想修改我的应用程序,也不想依赖该外部web服务。因此,我需要想出一种方法来使用某种外部组件来实现这一点。
一种可能的方法是创建数据库视图,当应用程序中的某些事件发生时,该视图将被填满。然后我将在该视图上设置触发器,该触发器将调用CLR函数。在CLR函数中,我将调用外部web服务。通过这样做,我将获得“实时”集成,这是很好的。但是,这种方法也有缺点。主要的一点是,从CLR调用web服务似乎不是一个好主意,因为它会阻塞主SQL线程(?!)直到CLR收到一些应答。
到目前为止,我只发现设置此属性将有助于解决性能问题:
System.Net.ServicePointManager.DefaultConnectionLimit = 9999
关于它的更多信息,你可以找到here。
现在,既然您知道我的需求(即实时或至少是接近实时的集成,而不需要我的应用程序对外部web服务的任何调用),有没有更好的方法来实现它?
我能想到的另一种方法是让一些服务定期检查我的数据库中需要触发对外部web服务的调用的更改。一旦此服务检测到此类更改,它将调用web服务并传输数据。当然,这不是真正的实时集成。我必须承认,除了性能问题,我更喜欢触发器和CLR,因为它保证了实时集成,并且对我的应用程序没有任何影响。
发布于 2013-01-24 17:04:38
我不确定我是否会同意将web服务调用转移到数据库的设计。但是,我相信您不想更改应用程序是有原因的。
这里有几个你可以尝试的选项-
1)使用消息队列而不是数据库和进行web服务调用的CLR。对于将事件作为消息传递,NServiceBus是一个很好的选择,它可以触发此调用
2)如果您坚持使用SQL server来存储事件,请查看SQL server Service broker。
https://stackoverflow.com/questions/14497364
复制相似问题