Vedremo come impiegare SignalR al massimo per realizzare una infrastruttura che serva a semplificare la creazione di HubHost da poter usare sia in modo tradizionale sia à-la WCF Service da sfruttare anche al di fuori dell'ambiente web per la comunicazione tra processi, approfondendo inoltre anche i meccanismi della Pipeline dell ErrorHandling per implementare Listener e Logger. Aggireremo inoltre una limitazione dell HubClient creandone una versione strong-typed completamente event-based.
2. Slide con sponsor che arriva a
qualche giorno dalla conferenza
sponsor
3. CTO @ StoaSoftware
Senior Software Design Architect
Sistemi di automazione industriale
EduDotNet.IT
Community di utenti educational (scuole))
Docente Laboratorio di Informatica
Varie ed eventuali
Autore di testi tecnici e scolastici
Archeologia informatica (ELEA 9003, primo calcolatore a transistors al mondo funzionante !!!)
chi sono
5. Semplifica il processo di aggiunta di funzionalità di
comunicazione real-time (web e non solo) alle applicazioni
Consente di creare applicazioni che richiedono frequenti
aggiornamenti da parte di un server
Gestisce le connessioni in modo automatico e consente di
inviare “messaggi” a tutti i client (broadcast) oppure a client
specifici
SignalR http://www.asp.net/signalr
6. Supporta funzionalità “push” dove il server può invocare codice
lato client utilizzando Remote Procedure Calls (RPC)
Le applicazioni possono scalare fino a migliaia di client
utilizzando Service Bus, SQL Server o Redis
È open-source (a da poco lo è anche WCF)
SignalR http://www.asp.net/signalr
8. Due modelli di comunicazione tra clients e server: Persistent Connections and Hubs
Una Connection rappresenta un endpoint per inviare messaggi a client singoli, gruppi
oppure a tutti
• Da allo sviluppatore l’accesso diretto al protocollo di basso livello
• Familiare ai sviluppatori che utilizzano API come WCF
Un Hub è una pipeline a più alto livello realizzata “sopra” le Connection API che consente
ai client ed ai server di invocare reciprocamente dei metodi
• Gestisce la distribuzione di messaggi al di fuori della macchina consentendo ai client di chiamare i metodi nel
server e viceversa con estrema facilità
• Familiare agli sviluppatori che utilizza(va)no .NET Remoting
• Consente di passare parametri tipizzati ai metodi e supporta il binding
SignalR http://www.asp.net/signalr
15. HubPipelineModule
Classe base che semplifica
l’implementazione dell’interfaccia
IHubPipelineModules.
Un modulo può intercettare gli eventi a
vari livelli (connessione, disconnessione,
invocazione di metodi remoti lato client e
server, autorizzazione, unione a gruppi,
etc)
Ogni modulo può essere attivato, e
combinato con altri moduli
Error-Handling e Logging
17. AuthorizeAttribute
Si applica agli Hub ed ai suoi
metodi per autorizzare le
connessioni e l’invocazione
degli stessi.
Authorization
_hubConnection.Headers.Add("AuthenticationCredential", "delfo");
var credentials = request.Headers["AuthenticationCredential"];
var methodName = hubIncomingInvokerContext.MethodDescriptor.Name;
19. Host
• Implementazione nativa dalla versione 2.0+ (solo per .net 4.5+)
• È possibile invocare i metodi dall’interno e dall’esterno dell’Hub
• Ereditarietà delle interfacce dalla versione 2.2
Client
• Nessuna implementazione nativa
• SignalRNetClientProxyMapper (Nuget package)
Strong-Typed Server & Client
20. Host
• Host riceve le richieste dai Clients
• Host invoca i metodi del Client
Client
• Client invoca i metodi dell’Host
• Clients riceve le notifiche dall’Host
• UI riceve le notifiche dal Client
Strong-Typed Server & Client
26. Avvia l’Host (con i parametri di configurazione) restituendo una istanza in grado di
invocare i metodi lato client
La configurazione consente di
impostare:
• i parametri di comunicazione (timeout)
• i moduli della pipeline
• il traceing
StartUp & Configuration
var hub = HubStartup.Start(config) as SendHubHost;
27. Unity è un dependency injection container
SendHubHost (singleton ContainerControlledLifetimeManager)
oggetto che consente di invocare i metodi dell’hub come se fossimo un
client
HubHost (per istanza TransientLifetimeManager)
Viene creato un oggetto per ogni client connesso
IoC con Unity
29. Grazie a tutti per la partecipazione
Riceverete il link per il download a slide e demo via email nei
prossimi giorni
Per contattarmi
delfo@edudotnet.it
delfuria@gmail.com
Grazie