2011-10-05 90 views
0

我正在使用C#处理两种类型的应用程序。一个是Web服务,一个是MVC3应用程序。请求互斥记录

我对两者都有同样的问题。我正在尝试创建一个方法,在请求时返回分布式节点的记录。

并发问题导致这种情况是危险的。一旦进程“A”请求记录工作。如果进程“B”在数据库检查记录“A”之前请求一个,它们可能会得到相同的记录,这对该系统不利。

在web服务我有一个被称为“GetRecordToProcess”一个Web方法。在控制器中也有相应的MVC3 ActionResult,它可以完成同样的任务。

注意Web服务和MVC行动不需要是相互排斥的海誓山盟。他们实际上在两张不同的表格上工作,但我碰巧在两个单独的项目中遇到了同样的问题。

我有这样一个工作版本与互斥,但进程正在运行我的CPU达到近60%,当我打电话Mutex.WaitOne这是baaaad。任何建议轻松的方式来做到这一点?这似乎很明显,这将是一个普通的分布式计算要求,我只是不知道通用的解决方案。

回答

0

后端需要负责解决并发问题。例如,您可以创建一个CheckOut表,用于跟踪哪些人有当前签出的记录。

增强您的Web服务以使其GetRecordToRead()返回记录的只读版本,TryGetRecordToWrite()会尝试检出记录(通过向CheckOut表中添加新的结帐记录),并且它成功返回可记录版本的记录

+0

问题是,如果它不成功。这些是同步调用。我可以告诉客户端重试,但似乎可能有更优雅的方式,我可以说GetRecordToWrite并总是期望记录 – brandon

+0

如果您第一次调用像TryCheckoutRecord()方法,这是可能的。如果该调用成功,您可以随意调用GetRecordToWrite(),并始终期待结果 – cordialgerm