C# Web 服务互斥

发布于 2024-12-01 18:39:15 字数 630 浏览 0 评论 0原文

我有两种类型的节点。一个是协调器,另一个是工作节点。

他们通过 SOAP 进行通信。

所有工作节点向协调器发送请求以获取互斥的数据库记录。

我希望协调器将安全记录的 ID 返回给每个工作人员,这样就没有工作人员需要处理相同的记录。

我知道如何使用互斥体对 C# 中的线程执行类似的操作,但我想知道同步 Web 服务调用的最佳实践。

编辑:这就是我遇到的问题

public class Coordinator: System.Web.Services.WebService
{
    [WebMethod]
    //Returns a mutually record to worker nodes
    public int RequestRecordID()
    {
        //i want to lock here
        int id = repository.getFirst(el => el.locked==false);
        repository.getByID(id).locked = true;
        repository.save();
        //unlock here
        return id;
    }
}

elI have two types of nodes. One is a coordinator and another is a worker node.

They communicate through SOAP.

All worker nodes send requests to the coordinator for a mutually exclusive database record.

I want the coordinator to return the ID of a safe record to each worker so no worker has the same record to process.

I know how to do something similar with threads in C# using mutex, but I wanted to know the best practice for synchronous web service calls.

EDIT: heres the problem I have

public class Coordinator: System.Web.Services.WebService
{
    [WebMethod]
    //Returns a mutually record to worker nodes
    public int RequestRecordID()
    {
        //i want to lock here
        int id = repository.getFirst(el => el.locked==false);
        repository.getByID(id).locked = true;
        repository.save();
        //unlock here
        return id;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

耀眼的星火 2024-12-08 18:39:15

我在数据库级别解决了类似的问题:

  1. 每个工作人员分配一个唯一的标识符
  2. 当向协调器请求记录时,为
  3. ,工作人员将传输其标识符数据库例程是一个通过获取应用程序锁启动的存储过程( SQL Server)
  4. 然后我会寻找一个“空闲”记录,然后用工作人员标识符“标记它”,这样我们就知道它已被锁定以及由谁
  5. 将记录返回给工作人员

I had a similar type of issue that I resolved at the database level:

  1. assign each worker a unique identifier
  2. when asking for a record from the coordinator the workers would transmit their identifier
  3. the DB routine was a stored procedure that started by acquiring an application lock (SQL Server)
  4. I would then look for a "free" record, then "stamp it" with the worker identifier so we know it's locked and by whom
  5. return the record to the worker
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文