Sto utilizzando SignalR nella versione 2.1.2. Ho notato che ci sono due classi di hub pubbliche da utilizzare, Hub
e Hub<T>
. Il primo ha una pagina MSDN che sembra essere superata e quest'ultima non ha alcuna pagina MSDN. Credo che la documentazione MSDN non sia aggiornata con l'ultima versione di SignalR da Nuget (che sto usando), perché le fonti decompilate con l'aiuto di ReSharper mostrano che entrambe le classi ereditano dalla classe base HubBase
. sezione Gerarchia di ereditarietà della pagina MSDN mostra la classe Hub
come eredita da Object
e attuazione IHub
e IDisposable
interfacce, tuttavia le fonti decompilati rivelano la suddetta classe HubBase
base, implementando l'interfaccia IHub
che a sua volta implementa IDisposable
.Come utilizzare hub generico in SignalR
La differenza tra la variante non generico e generico delle classi è che l'uno non generico proprietà Clients
restituisce IHubCallerConnectionContext<dynamic>
mentre i rendimenti variante generici digitati IHubCallerConnectionContext<T>
.
Mi piacerebbe che i miei client fossero digitati, quindi quando chiamo i metodi client dall'hub, avrei un supporto Intellisense adeguato e argomenti fortemente tipizzati. Quello con cui faccio fatica, però, è come far sapere all'Hub che il metodo del mio modello client deve essere effettivamente invocato nel browser.
Questo è il mio TestModel
classe:
public sealed class TestModel
{
public String Name { get; set; }
public void Notify() {}
public void NotifyComplex(TestModel model) {}
}
Con l'hub non generico, avevo appena chiamo .Notify()
o .Notify(new TestModel() { Name = "sth" })
sul dynamic
mente vincolata this.Context.Clients.Client(…)
o this.Context.Caller
, ma con la classe generica, quando chiamo questi metodi vuoti in modo simile, il browser non viene affatto informato.
Come si utilizza la classe hub generica come deve essere utilizzata?
questo potrebbe essere utile: http://stackoverflow.com/a/21763587/526704 – DLeh
Ho paura che la domanda non è correlato. Sono interessato a chiamare i metodi client dal server, non viceversa, che è ciò che l'OP di quella domanda sta facendo e i metodi che voglio chiamare usando RPC non sono generici, l'hub è, però, e lo è anche il suo clienti. Apprezzo il commento, però. –
non ero sicuro se sarebbe stato utile o no, ma ho pensato di fornire quello che ho trovato. scusa non ho altre utili intuizioni :( – DLeh