Download - Del furia signalr-to-the-max
Template designed by
SignalR To-The-MaxStefano Del [email protected]
Slide con sponsor che arriva a qualche giorno dalla conferenza
sponsor
CTO @ StoaSoftwareSenior Software Design Architect Sistemi di automazione industriale
EduDotNet.ITCommunity di utenti educational (scuole))Docente Laboratorio di Informatica
Varie ed eventualiAutore di testi tecnici e scolasticiArcheologia 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 applicazioniConsente di creare applicazioni che richiedono frequenti aggiornamenti da parte di un serverGestisce 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 HubsUna 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
dem
o SignalR Chat
TraceingError-handlingLoggingAuthenticationStrong-typed Server e Client (Interfaces & DTO)IoC …
Problematiche
Patterns of Enterprise Application Architecture (Martin Fowler)• http://martinfowler.com/books/eaa.htmlProgramming wcf services books (Juval Lowy)• http://www.oreilly.com/pub/au/741SignalR Blog (Damien Bod)• https://damienbod.wordpress.com/category/signalr/)
Spunti di interesse
TextWriterTraceListenerInvia 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>……
dem
o SignalR DemoTraceing
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
dem
o SignalR DemoLogging & Error-Handling
AuthorizeAttributeSi 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;
dem
o SignalR DemoAuthorization
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
HubHostHubHostBase<IHubSendClientBase>, IClientSendHubBaseSendHubBase<HubHost,IHubSendClientBase>,IClientSendHubBase• Host invoca i metodi del Client (IHubSendClientBase)• Host riceve le richieste dai Clients (IClientSendHubBase)
HubClientHubClientBase<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
dem
o SignalR DemoStrong-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 diimpostare:
• i parametri di comunicazione (timeout)
• i moduli della pipeline
• il traceing
StartUp & Configuration
var hub = HubStartup.Start(config) as SendHubHost;
Unity è un dependency injection containerSendHubHost (singleton ContainerControlledLifetimeManager)oggetto che consente di invocare i metodi dell’hub come se fossimo un clientHubHost (per istanza TransientLifetimeManager)Viene creato un oggetto per ogni client connesso
IoC con Unity
dem
o SignalR DemoStartUp, Configuration & IoC
Grazie a tutti per la partecipazioneRiceverete il link per il download a slide e demo via email nei prossimi giorniPer contattarmi
[email protected]@gmail.com
Grazie