Template designed by
SignalR To-The-Max
Stefano Del Furia
delfo@edudotnet.it
www.edudotnet.it
Slide con sponsor che arriva a
qualche giorno dalla conferenza
sponsor
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
Panoramica su SignalR
«Problemi»
Case-Study
agenda
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
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
SignalR http://www.asp.net/signalr
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
SignalR http://www.asp.net/signalr
demo
SignalR Chat
Traceing
Error-handling
Logging
Authentication
Strong-typed Server e Client (Interfaces & DTO)
IoC …
Problematiche
Patterns of Enterprise Application Architecture (Martin Fowler)
• http://martinfowler.com/books/eaa.html
Programming wcf services books (Juval Lowy)
• http://www.oreilly.com/pub/au/741
SignalR Blog (Damien Bod)
• https://damienbod.wordpress.com/category/signalr/)
Spunti di interesse
TextWriterTraceListener
Invia il tracing o il debug ad un TextWriter
o ad un Stream (es. FileStream)
Traceing
<sharedListeners>
<add name="SignalR-Transports" type="SD.SignalR.HubHost.TraceListener, SD.SignalR" initializeData="LogAlways" />
</sharedListeners>
<system.diagnostics>
<switches>
<add name="SignalRSwitch" value="Verbose" />
<!--> valori possibili: Off, Error, Warning, Info, Verbose-->
</switches>
<sources>
<source name="SignalR.Transports.WebSocketTransport">
<listeners>
<add name="SignalR-Transports" />
</listeners>
</source>
……
demo
SignalR Demo
Traceing
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
demo
SignalR Demo
Logging & Error-Handling
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;
demo
SignalR Demo
Authorization
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
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
Strong-Typed Server & Client
HubHost
HubHostBase<IHubSendClientBase>, IClientSendHubBase
SendHubBase<HubHost,IHubSendClientBase>,IClientSendHubBase
• Host invoca i metodi del Client (IHubSendClientBase)
• Host riceve le richieste dai Clients (IClientSendHubBase)
HubClient
HubClientBase<IClientHub*>, IClientReceiveHubEventBase
• Client invoca i metodi dell’Host (IClientSendHubBase)
• Clients riceve le notifiche dall’Host (IClientReceiveHubProxyBase)
• UI riceve le notifiche dal Client (IClientReceiveHubEventBase)
*public interface IClientHub : IClientReceiveHubProxyBase, IClientSendHubBase
Strong-Typed Server & Client
Strong-Typed Server & Client
Strong-Typed Server & Client
demo
SignalR Demo
Strong-Type Host e Client
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;
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
demo
SignalR Demo
StartUp, Configuration & IoC
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

Del furia signalr-to-the-max

  • 1.
    Template designed by SignalRTo-The-Max Stefano Del Furia delfo@edudotnet.it www.edudotnet.it
  • 2.
    Slide con sponsorche arriva a qualche giorno dalla conferenza sponsor
  • 3.
    CTO @ StoaSoftware SeniorSoftware 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
  • 4.
  • 5.
    Semplifica il processodi 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
  • 7.
  • 8.
    Due modelli dicomunicazione 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
  • 9.
  • 10.
  • 11.
    Traceing Error-handling Logging Authentication Strong-typed Server eClient (Interfaces & DTO) IoC … Problematiche
  • 12.
    Patterns of EnterpriseApplication Architecture (Martin Fowler) • http://martinfowler.com/books/eaa.html Programming wcf services books (Juval Lowy) • http://www.oreilly.com/pub/au/741 SignalR Blog (Damien Bod) • https://damienbod.wordpress.com/category/signalr/) Spunti di interesse
  • 13.
    TextWriterTraceListener Invia il tracingo il debug ad un TextWriter o ad un Stream (es. FileStream) Traceing <sharedListeners> <add name="SignalR-Transports" type="SD.SignalR.HubHost.TraceListener, SD.SignalR" initializeData="LogAlways" /> </sharedListeners> <system.diagnostics> <switches> <add name="SignalRSwitch" value="Verbose" /> <!--> valori possibili: Off, Error, Warning, Info, Verbose--> </switches> <sources> <source name="SignalR.Transports.WebSocketTransport"> <listeners> <add name="SignalR-Transports" /> </listeners> </source> ……
  • 14.
  • 15.
    HubPipelineModule Classe base chesemplifica 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
  • 16.
  • 17.
    AuthorizeAttribute Si applica agliHub 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;
  • 18.
  • 19.
    Host • Implementazione nativadalla 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 ricevele 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
  • 21.
  • 22.
    HubHost HubHostBase<IHubSendClientBase>, IClientSendHubBase SendHubBase<HubHost,IHubSendClientBase>,IClientSendHubBase • Hostinvoca i metodi del Client (IHubSendClientBase) • Host riceve le richieste dai Clients (IClientSendHubBase) HubClient HubClientBase<IClientHub*>, IClientReceiveHubEventBase • Client invoca i metodi dell’Host (IClientSendHubBase) • Clients riceve le notifiche dall’Host (IClientReceiveHubProxyBase) • UI riceve le notifiche dal Client (IClientReceiveHubEventBase) *public interface IClientHub : IClientReceiveHubProxyBase, IClientSendHubBase Strong-Typed Server & Client
  • 23.
  • 24.
  • 25.
  • 26.
    Avvia l’Host (coni 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 è undependency 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
  • 28.
  • 29.
    Grazie a tuttiper 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