2016-08-07 8 views
1

私は、両側からSignalrを使用して通信を設定することができました。サーバーからクライアントにメッセージを送信するとき、私は抽象モデルを使用し、クライアントでは1つのメソッドしか持っていません。抽象モデルを使用したSignalrクライアントからサーバープッシュ

これまでのところ、私はこれを動作させることができないため、クライアント側からサーバー側に、このようにsimiliaryを行う可能性のある方法があるかどうかを知りたかったのです。

私の意味は次のとおりです。

サーバー側:次の例では

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オブジェクトに変換します。 BaseNotificationタイプに存在しないJsonで定義されたすべてのプロパティは破棄されます。つまり、BaseNotificationに存在しないプロパティは逆シリアル化されません。したがって、両方の型のプロパティ名が等しい場合を除いて、BaseNotificationを別の型にキャストすることはできません。私はあなたのケースのための2つの異なる解決策を考えることができ

:列挙型NotificationType):

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

a)はタイプ(すなわちのための1つ以上を追加して、単一のオブジェクトNotification内のすべての通知のプロパティを含めます

b)通知タイプごとに異なるハンドルメソッドを作成します。

public void HandleNewNotification(NewItemNotification notification) {} 
public void HandleUpdatedNotification(UpdatedItemNotification notification) {} 
public void HandleDeletedNotification(DeletedItemNotification notification) {} 
関連する問題