Signalr 客户端使用抽象模型向服务器推送

Signalr client to server push using abstract model

我已经设法使用双方的 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,为类型添加一个(即:枚举 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) {}