SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!

Post on 15-Aug-2015

16 views 1 download

Tags:

Transcript of SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!

Template designed by

SignalR To-The-Max

Stefano 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 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

dem

o 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

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 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

dem

o 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;

dem

o 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

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 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 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 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

dem

o 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.itdelfuria@gmail.com

Grazie