• about reply
Solidsoft Reply Logo
Menu
  • ABOUT
  • SERVICES
  • BLOG
  • about Reply
Solidsoft Reply Logo

Search

Focus On

Blog

Gestire i cicli di vita dell’oggetto con Owin and Unity

Autore: Nathan Cooper

FOCUS ON: Blog,

Owin è il nuovo open source standard per sviluppare e ospitare applicazioni web ed ha apportato sensibili miglioramenti allo sviluppo web sia in termini di flessibilità che di produttività dello sviluppatore. Svincola le applicazioni ASP.NET da IIS, consentendo che i siti siano ospitatati su vari server. Inoltre permette di raggruppare e concatenare il middleware in una pipeline, in modo che il codice dell’infrastruttura possa essere scomposto in moduli separati e riutilizzabili. Grazie a Owin, ora è molto più semplice assemblare una web app che soddisfi le esigenze specifiche di un cliente e sia eseguibile nell’ambiente scelto.

Unity consente di collegare i cicli di vita dell’oggetto a una singola request, utilizzando ‘PerRequestLifetimeManager’ nella registrazione dei tipi:

Managing object lifetimes with Owin and Unity

Tuttavia, è necessario un codice cleanup separato. Normalmente lo sviluppatore registrerebbe il Modulo Http ‘UnityPerRequestHttpModule’. Questa opzione non è più possibile con Owin. I Moduli Http sono un tool di IIS (Internet Information Services), che è il dettaglio specifico della piattaforma da cui l’applicazione è stata svincolata.

L’opzione più semplice è quella di omettere il cleanup. Ho creato un sito web semplice esemplificativo (disponibile all’indirizzo https://github.com/NathanLBCooper/OwinPerRequestUnityMiddleware). Lo screenshot mostra il sito in esecuzione con l’uso sprovveduto di PerRequestLifetimeManager, senza il modulo http o il codice di cleanup. Il numero sulla colonna a destra indica quanti oggetti sono in attesa di eliminazione.

Managing object lifetimes with Owin and Unity

Qui c’è un grosso problema. Mentre il garbage collector alla fine si occuperà di questi 40 oggetti, al momento sono tutti inutilizzati. L’oggetto dietro le quinte qui è estremamente semplice, ma questa falla potrebbe causare seri problemi in un’applicazione reale. Fortunatamente c’è una soluzione semplice, ossia sfruttare il potente middleware di Owin.

La prima cosa che occorre fare è scrivere la procedura di cleanup. Ecco alcune linee di codice semplici per estrarre dal container gli oggetti per-request ed eliminarli:

Managing object lifetimes with Owin and Unity

La procedura di cleanup deve entrare nella pipeline di Owin, in modo da essere eseguita dopo ogni request. Sotto è riportato un diagramma che mostra cosa succede quando viene invocato il middleware. Forma una catena di esecuzione, la request viene inviata all’applicazione e viene restituita la response.

Managing object lifetimes with Owin and Unity

Il codice cleanup deve intervenire dopo che la request è stata trattata, dato che la response si propaga. Qui è riportata un’implementazione di quanto detto:

Managing object lifetimes with Owin and Unity

Il middleware ora è completo. Per poterlo utilizzare nell’applicazione, dobbiamo registrarlo nella Owin Startup class. Prima di fare questo, è meglio che scriviamo un metodo di estensione che richiamiamo per registrare il middleware. Penso che sia utile tenere traccia del middleware registrato aggiungendo una key a IAppBuilder.Properties, che sarà una responsabilità di questo metodo.

Managing object lifetimes with Owin and Unity

Ora, ecco come richiamare questo metodo dalla Startup class:

Managing object lifetimes with Owin and Unity

Ecco fatto. Il middleware è a posto e ora gli oggetti sono stati eliminati correttamente. L’applicazione web esemplificativa ora mostrerà un oggetto non ancora eliminato, che è esattamente il numero necessario per gestire la request. L’applicazione può continuare ad utilizzare sia Unity che Owin, senza spiacevoli perdite di risorse.

Managing object lifetimes with Owin and Unity

Il middleware è anche disponibile come pacchetto NuGet al link: https://www.nuget.org/packages/RequestLifetimeMiddleware/ together with instructions for installation.

Tutto il codice sorgente è disponibile al link: https://github.com/NathanLBCooper/OwinPerRequestUnityMiddleware.

RELATED CONTENTS

23.02.2015

Blog

Rendere più sicuro Azure SQL - Parte 1

Recentemente è stata introdotta una serie di nuove e più efficaci misure di sicurezza per controllare e monitorare l’accesso ai database SQL di Azure. Queste includono Auditing, Dynamic Data Maskin, Row-level Security e Transparent Data Encryption. In questa prima parte darò la mia valutazione sulle prime due e sulla probabilità che io le utilizzi.

09.02.2015

Blog

Report personalizzati d’uso per colmare il gap di Azure SQL nell’ambiente SSMS

I tool di gestione dei database, come SQL Server Management Studio (SSMS) sono prodotti maturi per l’uso quotidiano da parte dei professionisti dei database in tutto il mondo. Questo mi porta a domandarmi perché Microsoft si sia preoccupata di produrre il suo portale di gestione del database SQL di Azure basato su Silverlight.

12.02.2015

Blog

Il cloud PaaS può rappresentare una scommessa più sicura del cloud IaaS per SQL in Azure?

Quello che fondamentalmente ho bisogno di realizzare nel campo della HADR è un sistema di database che sia, quanto più possibile, sempre disponibile (‘online and accessibile’), completo (‘no data loss’) e accurato (‘no data corruption’). Considerato l’intento di questa discussione, ignorerò le strategie di backup, partendo dall’assunto che esistono principalmente per riportare dei database allo stato precedentemente conosciuto.

 
 
 ​
 
Reply ©​ 2023​ - ​Dati Societari -
 Privacy Impostazioni Cookie​
  • About Reply​​
  • Investors​​​
  • Newsroom​​​
  • Segui Reply su​
  • ​About Solidsoft Reply
  • ​Privacy & Cookies Policy
  • Informativa (Cliente)
  • Informativa (Fornitore)