0

I have a client-server web application - the client is HTML/JS and the server is ASP.Net. web application hosted by Azure Web Role
In this application the client can save a document on the server by calling a web service method on the server side.
After calling the saving method, the client might save the document again while the server processes his previous save request. In this case I want the newly initiated saving to be queued until the previous saving operation is completed.
If I had a single web role instance, it would be easy for me to implement this by thread synchronization, but since the client request might be handled by different web role instances, the synchronization is problematic.
My question is - how can I implement such synchronization mechanism, or is there a better way to get the same result, that I'm not aware of.

Thanks.

4

2 回答 2

1

我会考虑组合存储或服务总线队列来排队处理文档的请求,并使用 BLOB 租约将工作标记为正在进行中。

排队很重要,因为如果之前对正在进行的同一作业有请求,则请求可能会延迟处理。

BLOB Leasing 是一种在存储中放置集中锁的方法。开始处理请求后,您可以在其上放置一个带有租约的 blob,并在完成后释放租约。在开始之前,对相同工作的请求将首先检查租约是否可用。否则,他们只能等待。此处有关租约的更多信息:http: //blog.smarx.com/posts/leasing-windows-azure-blobs-using-the-storage-client-library

于 2013-07-12T15:17:19.707 回答
0

您是否考虑过在您的角色上使用Windows Azure 缓存- Co-Located?

这是一个共享缓存层,可以在您的角色上使用多余的内存(或者,如果您的 Web 角色已经接近容量,则拥有自己的工作角色)来创建一个键/值存储,同一部署中的任何角色都可以访问该存储。

您可以使用缓存来存储指示当前正在处理文档的值并阻止它,直到文档完成上传。由于它是一个共享缓存层,因此值将在您的实例中保持不变(尽管在升级部署期间缓存不会保持不变)。

这是一篇很好的介绍性文章,介绍了在 Azure 中使用缓存以及配置示例和示例代码。

于 2013-07-12T13:59:57.060 回答