使用抽象模型实现客户端到服务器端的信号推送

Signalr client to server push using abstract model

本文关键字:服务器端 信号 客户端 抽象 模型 实现      更新时间:2023-09-26

我已经设法从双方使用Signalr建立通信。当从服务器向客户端发送消息时,我使用抽象模型,并且在客户端只有一个方法。

我想知道是否有一种可能的方法可以从另一边做类似的事情-从客户端到服务器,因为到目前为止我还不能做到这一点。

我的意思是:

服务器端:

public class MyHub : Hub
{
     public void HandleNotification(BaseNotification notification)
     {
         if(notification is NewItemNotification) {
                ....
         } else if (notification is UpdatedItemNotification) {
                ....
         } else if (notification is DeletedItemNotification) {
                ....
         }
     }
}

在下面的例子中,我得到一个空的BaseNotification对象

我认为这与Json如何。. Net库(SignalR内部使用)工作。

当数据以Json格式到达服务器时,SignalR将接受该字符串并将其转换为BaseNotification对象。在Json中定义的所有不存在于BaseNotification类型的属性将被驳回。换句话说:在BaseNotification中不存在的性质不会被反序列化。所以你的BaseNotification不能被强制转换成不同的类型,除非两种类型的属性名是相等的。

我可以想到两种不同的解决方案:

a)在单个对象Notification中包含所有通知属性,为类型(即:Enum NotificationType)添加一个:

public void HandleNotification(Notification notification)
{
    switch (notification.Type)
    {
        case NotificationType.NewItem:
            ...
        case NotificationType.UpdatedItem:
            ...        
        case NotificationType.DeletedItem:
            ...
}
b)为每种通知类型创建不同的句柄方法:
public void HandleNewNotification(NewItemNotification notification) {}
public void HandleUpdatedNotification(UpdatedItemNotification notification) {}
public void HandleDeletedNotification(DeletedItemNotification notification) {}