2016-08-07 64 views
1

Ich habe es geschafft, die Kommunikation mit Signalr von beiden Seiten einzurichten. Beim Senden einer Nachricht vom Server zum Client verwende ich ein abstraktes Modell und habe nur eine Methode am Client.Signal Client zu Server Push mit abstrakten Modell

Ich wollte wissen, ob es einen möglichen Weg gibt, dies von der anderen Seite zu tun - von Client zu Server, weil ich das bisher nicht zum Laufen kriege.

Meine Bedeutung ist:

Server-Seite:

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

Im folgenden Beispiel erhalte ich ein leeres BaseNotification Objekt

Antwort

0

Ich denke, dies zu verwandt ist, wie Json.Net Bibliothek (intern verwendet von SignalR) funktioniert.

Wenn Daten im Json-Format zum Server gelangen, nimmt SignalR diese Zeichenfolge und konvertiert sie in BaseNotification Objekt. Alle in JSON definierten Eigenschaften, die in BaseNotification nicht vorhanden sind, werden verworfen. Mit anderen Worten: Eigenschaften, die in BaseNotification nicht vorhanden sind, werden nicht deserialisiert. So kann Ihr BaseNotification nicht in einen anderen Typ umgewandelt werden, es sei denn, die Eigenschaftsnamen in beiden Typen sind gleich.

kann ich denke an zwei verschiedene Lösungen für Ihren Fall:

a) Fügen Sie alle Benachrichtigungs Eigenschaften in einem einzigen Objekt Notification, das Hinzufügen einer weiteren für den Typ (zB: Enum NotificationType):

public void HandleNotification(Notification notification) 
{ 
    switch (notification.Type) 
    { 
     case NotificationType.NewItem: 
      ... 
     case NotificationType.UpdatedItem: 
      ...   
     case NotificationType.DeletedItem: 
      ... 
} 

b) Erstellen Sie für jede Meldungsart eine andere Handle-Methode:

public void HandleNewNotification(NewItemNotification notification) {} 
public void HandleUpdatedNotification(UpdatedItemNotification notification) {} 
public void HandleDeletedNotification(DeletedItemNotification notification) {}