我已经成功地从两侧使用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) {}