2016-08-07 1 views
1

Мне удалось настроить связь с помощью Signalr с обеих сторон. При отправке сообщения от сервера к клиенту я использую абстрактную модель и имею только один метод на клиенте.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 объект

ответ

0

Я думаю, что это связано с тем, как Json.Net библиотека (для внутреннего использования по SignalR) работает.

Когда данные попадают на сервер в формате Json, SignalR примет эту строку и преобразует ее в объект BaseNotification. Все свойства, определенные в Json, которые не существуют в BaseNotification, будут уволены. Другими словами: свойства, отсутствующие в BaseNotification, не будут десериализованы. Таким образом, ваш BaseNotification не может быть отличен для другого типа, если имена свойств в обоих типах не равны.

я могу думать о двух различных решений для Вашего случая:

а) Включить все свойства уведомления в одном объекте 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) {} 
Смежные вопросы