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