Del furia signalr-to-the-max

Preview:

Citation preview

Template designed by

SignalR To-The-MaxStefano Del Furiadelfo@edudotnet.itwww.edudotnet.it

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

delfo@edudotnet.itdelfuria@gmail.com

Grazie