Quali sono le cose più comuni e tipiche da EVITARE la codifica nella mia app ASP.NET affinché possa essere eseguita con attendibilità media su un host condiviso?

StackOverflow https://stackoverflow.com/questions/275444

Domanda

Quali sono le cose che Medium Trust ti impedisce di fare? Ad esempio, ho già appreso che Medium Trust ti impedisce di utilizzare System.IO.Path.GetTempPath (). Quali altre cose del genere?

È stato utile?

Soluzione

Ecco come conoscere e risolvere i problemi di fiducia.

1) Cerca le cartelle Windows \ Microsoft.NET \ Framework [LA TUA VERSIONE] \ CONFIG per i file:

  • web.config (questo è il file di configurazione di root)
  • web_mediumtrust.config
  • web_hightrust.config

2) Cambia web.config per dire

<trust level="Medium" originUrl="" />

3) Prova la tua app ASP.NET. Il mio non è riuscito con un errore di autorizzazione.

4) Diff web_mediumtrust.config e web_hightrust.config in uno strumento diff, come WinMerge.

5) Copia le impostazioni dall'alto al medio una alla volta e guarda come influiscono sulla tua app. Nel mio caso, il messaggio di errore si riferiva a ConfigurationPermission, quindi era facile da diagnosticare.

Se riesci a fissare le linee precise nel file web_mediumtrust.config che ti stanno bloccando, forse puoi condividerlo con la tua società di hosting e avere maggiori possibilità di risolvere le cose.

Più documentazione qui:
http://msdn.microsoft.com/en-us/library/aa302425. aspx

@Oli, la mia app È ospitata su GoDaddy e quando ho iniziato a usare Lucene.NET ho dovuto fare alcune soluzioni al codice. Ho dovuto modificare il codice sorgente Lucene.NET per non utilizzare GetTempPath e System.IO.FileInfo.

Altri suggerimenti

Chi può esserne sicuro? Ecco perché dovresti sviluppare con un livello di affidabilità di medio impostato nel tuo web.config.

 <trust level="Full|High|Medium|Low|Minimal" />

La maggior parte degli host condivisi non usa un vero ambiente di media fiducia perché limita alcune cose che sono semplicemente troppo vitali. Altri limitano alcune impostazioni extra per i propri motivi anali.

La cosa migliore che puoi fare è chiedere al tuo host quali impostazioni usano per ASPNET. Richiedi le specifiche del livello di affidabilità che stanno utilizzando. Scopri i limiti di memoria. Una volta ottenuti questi dettagli, dovresti essere in grado di replicare lo scenario a livello locale.

Se non te lo dicono, imposta l'app in modo che funzioni con un livello di attendibilità medio ma (ovviamente) non funzionerà necessariamente se utilizzano un livello di affidabilità modificato.

Ecco alcune informazioni su come impostare i livelli di affidabilità in IIS .

In generale, l'unico problema che ho riscontrato è: se stai spingendo assembly, assicurati di consentire richieste parzialmente attendibili (è un meta-tag Assembly) altrimenti non sarai in grado di usarle.

Ecco un estratto della pagina di informazioni sulla fiducia media di GoDaddy :

  

Applicazioni che funzionano con un supporto   il livello di attendibilità non ha accesso al registro,   nessun accesso al registro eventi di Windows,   e non può usare ReflectionPermission   (ma può usare Reflection). Come   le applicazioni possono comunicare solo con   un intervallo definito di indirizzi di rete   e l'accesso al file system è limitato a   la directory virtuale dell'applicazione   gerarchia.

     

L'uso di un livello di attendibilità medio impedisce   applicazioni dall'accesso condiviso   risorse di sistema ed elimina il   potenziale applicazione   interferenze. Aggiunta di OleDbPermission   e OdbcPermission consente le applicazioni   per utilizzare quei fornitori di dati per accedere   banche dati. WebPermission è stato modificato   per consentire http e https in uscita   traffico.

Potrebbe non corrispondere esattamente a ciò su cui dovrai lavorare con il tuo host (a meno che tu non sia con GoDaddy) ma è un tipico esempio.

Assicurati che tutte le librerie / framework di terze parti (Castle viene in mente) siano costruite (o possano essere costruite) con un livello di affidabilità medio.

La libreria system.runtime.serialization non è completamente disponibile con attendibilità media.

Ho scritto questo codice per la serializzazione / deserializzazione json e l'ho scoperto nel modo più duro. Ci è voluta una settimana per convincere un associato a confermare che la colpa era dovuta alle restrizioni di fiducia media. Ho finito per cambiare società di hosting di conseguenza.

In media fiducia, almeno sul mio host, le chiamate P / INVOKE non sono disponibili, vale a dire l'utilizzo di [DLLImport] per chiamare un componente COM non funzionerà.

-Edoode

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top