C# 用signer替换REST端点有什么缺点吗?

C# 用signer替换REST端点有什么缺点吗?,c#,rest,signalr,C#,Rest,Signalr,我正在构建一个相当简单的单页应用程序。它基本上是一个项目列表,其中每个项目都有一些详细信息、一个活动日志、一个当前状态以及一些按钮,用于触发服务器上的操作,从而在工作流中提升状态 它最初是使用MVC和REST/WebAPI编写的,但我一直在努力让并发用户保持最新。例如,如果用户A添加了一个项目,我们希望用户B屏幕上的列表现在更新以包含它 为了解决这个问题,我研究了信号器,它工作得很好。但我有个问题 添加项(使用POST)时,回调会在请求的客户端上添加该项。这很好 然后,我在服务器上触发了一个信

我正在构建一个相当简单的单页应用程序。它基本上是一个项目列表,其中每个项目都有一些详细信息、一个活动日志、一个当前状态以及一些按钮,用于触发服务器上的操作,从而在工作流中提升状态

它最初是使用MVC和REST/WebAPI编写的,但我一直在努力让并发用户保持最新。例如,如果用户A添加了一个项目,我们希望用户B屏幕上的列表现在更新以包含它

为了解决这个问题,我研究了信号器,它工作得很好。但我有个问题

  • 添加项(使用POST)时,回调会在请求的客户端上添加该项。这很好
  • 然后,我在服务器上触发了一个信号器广播,告诉所有客户端关于新项目的信息。这很好,除了本地客户,他现在有两个项目
我正在考虑在客户端过滤重复的id,或者用POST发送连接id,然后广播到除请求者之外的所有客户端,但这似乎有点不必要的复杂

相反,我只是这样做

public class UpdateHub : Hub
{
    public void AddNewItem(NewItem item)
    {
        // and some server-side stuff, persist in the data store, etc
        item.trackingID = new Guid();
        item.addLogEntry("new item");
        // ...
        dataStore.addItem(item);

        // send message type and data payload
        Clients.All.broadcastMessage("add", item);
    }
}
把剩下的东西全部扔掉似乎简单多了,那么我是否遗漏了重要的东西?


对于少数使用IE11+的用户来说,它将在内部网上运行,我想我们确实会丢失一些常见的错误处理HTTP响应代码的语义,但我认为在这种情况下这不是什么大问题。

为了解决重复问题,您可以尝试使用客户端。Hub类中的其他客户端,或AllExcept(id)如果您不在中心类中

     Clients.Others.broadcastMessage("add", item);

在您的情况下,使用SignalR不应该有任何缺点。

如果我扔掉我所做的其余部分,这是可行的:)但在我的原始场景中,它不起作用,除非我发送我提到的id。很高兴听到一个纯粹的信号器方法应该能起作用。我可能会避免使用客户端。其他客户端,因为在服务器验证请求之前,我不想更新调用方。我认为您在本地存储客户端保存了一个项数组。为什么不在客户端执行ifExits检查,因此您的项上已经有trackingId。简单解决方案删除添加项时(使用POST),回调会在请求的客户端上添加该项。这很好。只需添加带有信号器的项。