使用抽象模型实现客户端到服务器端的信号推送
本文关键字:服务器端 信号 客户端 抽象 模型 实现 | 更新日期: 2023-09-27 18:01:23
我已经设法从双方使用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) {}