Upload
dotnetcampus
View
16
Download
1
Tags:
Embed Size (px)
Citation preview
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
[email protected]@gmail.com
Grazie