这是轮询数据库的正确方法吗?

时间:2010-07-23 11:57:20

标签: c# .net sql wcf azure

我正在为Azure创建一个WCF服务(CALLER)。服务(CALLER)调用另一个第三方服务(EXTN)的异步方法。第三方服务调用我在Azure上托管的另一个WCF服务(LISTNER)的回调方法。 CALLER在数据库中输入状态= PENDING的服务详细信息。

在回调服务(LISTNER)中,我将数据库中的请求状态更新为COMPLETED / FAILED。

但我希望在SQL Azure数据库中更新状态时通知CALLER。

我正在考虑创建一个工作线程,它将定期轮询数据库以检查状态更新并通知CALLER。

这种方法还有其他更好/更有效的替代方案吗?

3 个答案:

答案 0 :(得分:1)

您正在寻找的功能已在AppFabric service bus中实施。

答案 1 :(得分:0)

不是真的。通过使用集成的SQL消息队列(通过触发器更新队列),还有另一种方法(不确定它是否适用于azure),然后您的线程可以连续轮询(有一种方法可以让etnry读取WAIT)队列,所以你发一个,它等待),但除此之外......

...不,不是来自数据库级别。

我有一个类似的应用程序,我通过ntification触发器来处理它OUTSIDE数据库(即通知从业务逻辑发送,值变化)。

答案 2 :(得分:0)

另一种选择是使用队列并对来自侦听器的通知消息进行调用者轮询。通过让呼叫者订阅从监听器发送的事件通知,可以使用服务总线。在您的方案中,虽然它不提供比队列更多的功能 - 如果您位于防火墙之后,服务总线也会使用轮询。

队列可能是发送通知的最有效方式 - 这就是为什么它们首先被创建的原因。 Service Bus用于通过提供比简单消息传递更多的功能来创建不同服务之间的半永久连接。这使它变得不那么灵活,需要更多的编程。其计费模式(每SB连接的费用)也反映了这一点。您不应该使用大量的SB连接。