我的数据库中有一个名为SEntries的表(参见下面的CREATE TABLE语句).它有一个主键,几个外键,没有什么特别之处.我的数据库中有许多类似于那个表,但由于某种原因,该表最终在EF代理类上有一个"Discriminator"列.
这是在C#中声明类的方式:
public class SEntry
{
public long SEntryId { get; set; }
public long OriginatorId { get; set; }
public DateTime DatePosted { get; set; }
public string Message { get; set; }
public byte DataEntrySource { get; set; }
public string SourceLink { get; set; }
public int SourceAppId { get; set; }
public int? LocationId { get; set; }
public long? ActivityId { get; set; }
public short OriginatorObjectTypeId { get; set; }
}
public class …Run Code Online (Sandbox Code Playgroud) 我正在努力将SignalR体验集成到Azure基础架构中.
基本上,用户会在网站上采取一些操作,触发Web服务器上的函数调用(通过SignalR).处理该请求可能需要一些时间,用户可以通过单击发送数十个或数百个请求.我正在创建一个Service Bus队列来将这些任务发送给WebJob/Worker来处理它们,一旦它们准备好,它们就会将它发送回另一个队列(响应队列).
也就是说,为了提供令人敬畏的用户体验,如果用户仍然处于与以前相同的页面上,并且如果处理已准备好,我希望它在这些任务完成时实时更新它们.如果用户固定在一个前端盒子上(由于SignalR WebSocket连接),这应该是微不足道的,但事实并非如此,因此不同的前端可能需要处理该响应消息并通过SignalR调用浏览器.
当我在第一个队列中发布消息时,我将包括SignalR ConnectionId.响应完成后,ConnectionId包含在响应消息中,这使我有机会进行呼叫.
HubContext.Clients.Client(connectionId).AddItemsResult(response);
Run Code Online (Sandbox Code Playgroud)
我的问题是关于服务总线主题 - 或另一种我不完全理解的解决方案.我需要通知每个WebServer处理每个响应,因为我无法确定哪个Web服务器实际上会将SignalR调用到客户端.
1)服务总线主题是正确的方法吗?
2)我需要动态地创建N个订阅(每个Web服务器一个),这似乎很奇怪.如果服务器死了又永远不会回来会怎么样?我有一个订阅,不再有订阅者?
基本上,我只是想创建一个简单的发布者 - 订阅者模式,我可以在他们上线时拥有N个动态订阅者(听众).