我有一个客户端 - 服务器Web应用程序 - 客户端是HTML / JS,服务器是ASP.Net。由 Azure Web角色托管的Web应用程序
在此应用程序中,客户端可以通过调用服务器端的Web服务方法将文档保存在服务器上
调用保存方法后,客户端可能会在服务器处理其先前的保存请求时再次保存文档。在这种情况下,我希望新启动的保存排队,直到上一次保存操作完成
如果我有一个Web角色实例,我很容易通过线程同步来实现它,但由于客户端请求可能由不同的Web角色实例处理,因此同步是有问题的。
我的问题是 - 如何实现这样的同步机制,或者是否有更好的方法来获得相同的结果,我不知道。
感谢。
答案 0 :(得分:1)
我会考虑组合存储或服务总线队列来排队处理文档的请求,并使用BLOB租约将工作标记为正在进行中。
排队很重要,因为如果之前有相同作业的请求,则处理过程中的请求可能会延迟。
BLOB租赁是一种将集中锁定置于存储中的方法。一旦开始处理请求,就可以在其上放置一个带有租约的blob,并在完成后释放租约。在开始之前,对同一工作的请求将首先检查租约是否可用。否则,他们可以等待。有关租约的更多信息:http://blog.smarx.com/posts/leasing-windows-azure-blobs-using-the-storage-client-library
答案 1 :(得分:0)
您是否考虑过使用Windows Azure Cache - 共同担任角色?
这是一个共享缓存层,可以在您的角色上使用多余的内存(或者如果您的Web角色已经接近容量,则拥有自己的工作者角色)来创建一个键/值存储,可以由任何角色访问相同的部署。
您可以使用缓存来存储指示当前正在处理文档的值,并在文档上传完成之前将其阻止。由于它是共享缓存层,因此值将在您的实例中保留(尽管缓存在升级部署期间不会保留)。
以下是using Caching in Azure的一篇很好的介绍性文章,其中包含配置示例和示例代码。