2013-05-31 11 views
42

Ho iniziato a sviluppare una nuova app MVC con Entity Framework code-first e Unity per l'integrazione delle dipendenze. Ho usato EF5 e Unity perché pensavo che dovessero funzionare in Medium Trust. Tuttavia, quando ho lanciato il tag <trust level="Medium" /> nel mio web.config, ho iniziato a ricevere le eccezioni di Reflection Permission.Sta cercando di sviluppare per Medium Trust una causa persa?

Sembra sempre che ogni volta che vado oltre l'utilizzo di cose built-in come la roba ADO.net System.Data.SqlClient mi imbatto sempre in problemi in Medium Trust. Auto-Mapper: fallire. NHibernate: fallire. MySQL: fallire. Codice EF5 prima: fallire. IOC: fallire.

Sto solo inseguendo un sogno di pipa? È possibile ottenere un'applicazione Web ben architettata e verificabile utilizzando la tecnologia moderna che verrà eseguita in Medium Trust?

Nell'era delle VM/Server virtuali/Cloud Computing (e anche di alcuni host condivisi che imposteranno i pool di applicazioni su Full Trust), qualcuno ha riscontrato che lo sviluppo di Medium Trust vale lo sforzo?

risposta

66

La posizione ufficiale della squadra ASP.NET è che Medium Trust è obsoleto. Ciò significa che un paio di cose:

  • Stiamo risolvendo automaticamente tutti i bug Medium Trust-correlati segnalati come "non risolverà".
  • Abbiamo fornito indicazioni agli hosters che dovevano migrare lontano da Medium Trust e utilizzare invece un corretto isolamento a livello di sistema operativo (http://support.microsoft.com/kb/2698981).
  • Stiamo rimuovendo il supporto di Medium Trust dai framework che sviluppiamo (MVC, WebAPI, SignalR e così via). In futuro, le applicazioni basate su questi framework richiederanno la piena affidabilità.

Qui, il termine "Trust medio" in alto si riferisce a tutte le configurazioni di Trust non completo in ASP.NET, incluso l'uso dei livelli di fiducia predefiniti (Minimo, Basso, Medio, Alto) o qualsiasi livello di fiducia personalizzato.

Modifica 26 maggio 2015: .NET Framework nel suo insieme ha dichiarato il trust parziale e si consiglia ai clienti di non fare affidamento su di esso come limite di sicurezza. From MSDN:

Code Access Security in .NET Framework non deve essere utilizzato come un confine di sicurezza con codice parzialmente attendibile, in particolare il codice di origine sconosciuta. Si sconsiglia di caricare ed eseguire il codice di origini sconosciute senza mettere misure di sicurezza alternative nel posto .

+0

Ottime informazioni. Grazie! – Sam

+0

Puoi aggiungere un link a un articolo che afferma questa posizione ufficiale? – Steven

+1

Steven: http://support.microsoft.com/kb/2698981 è l'articolo principale. Ci sono una manciata di altre, come http://www.asp.net/aspnet/overview/web-development-best-practices/what-not-to-do-in-aspnet,-and- che-to- do-invece # medie. – Levi

8

In generale tutto che ha bisogno di riflessione in modo profondo non può essere eseguito su Medium Trust

Nel tuo caso:

Automapper: l'uso di riflessione per scoprire corrispondenza proprietà e flusso di memoria per clonare loro (c'è un versione intorno a quella effettivamente funziona in media fiducia con qualche limitazione)

NHIbernate: utilizzare la riflessione emettere per consentire il caricamento lazy perché il caricamento lazy in NH è implementato dai proxy (per evitare questo è possibile disabilitare il caricamento pigro o utilizzare un NHibernate ProxyGenerator è un'utilità che aiuta a pre-creare Proxy)

Nhibernate ProxyGenerator

EF: In realtà non ho trovato grandi problemi con EF e Medium Trust .... è di non serializzare oggetto con associazioni o collezioni

CIO: CIO è la killer application di riflessione :) si può provare autofac che lavora su Medium trust

AutoFac

In generale Medium trust è un grande limite ... ma tutto dipende da che tipo di progetto che si sta lavorando . Si consideri inoltre di utilizzare una certa fiducia completa hosting come Arvixe

Spero che questo aiuti

+1

Grazie per la risposta. In EF5, è possibile aggirare i problemi di MT facendo in modo che i getter e i setter pubblici su tutte le proprietà vengano mantenuti nel database. Il problema è che ci sono alcune proprietà che non vuoi che gli utenti siano in grado di impostare. Presumibilmente questo è stato risolto in EF6. Unity sembra funzionare anche in Medium Trust. Immagino che alla fine mi chiedo se lo sviluppo per Medium Trust valga la pena? C'è qualcuno che guadagna soldi sviluppando app web che funzionano su hosting condiviso? Se i clienti utilizzano hosting a basso costo, quali sono le possibilità che effettueranno il pony per la tua app? – Sam

+0

Un po 'fuori dal comune ma Unity (fornitore IoC) funziona anche in media fiducia. –

Problemi correlati