Quelles sont les caractéristiques les plus courantes pour éviter le codage dans mon application ASP.NET afin qu'elle puisse s'exécuter sous une confiance moyenne sur un hôte partagé?

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

Question

Quelles sont les choses que Medium Trust vous empêche de faire? Par exemple, j'ai déjà appris que la confiance moyenne vous empêche d'utiliser System.IO.Path.GetTempPath (). Quelles autres choses comme ça?

Était-ce utile?

La solution

Voici comment connaître et résoudre les problèmes de confiance.

1) Recherchez dans vos dossiers Windows \ Microsoft.NET \ Framework [VOTRE VERSION] \ CONFIG les fichiers suivants:

  • web.config (c'est le fichier de configuration racine)
  • web_mediumtrust.config
  • web_hightrust.config

2) Modifiez le paramètre web.config pour indiquer

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

3) Essayez votre application ASP.NET. Le mien a échoué avec une erreur de permission.

4) Diffusez web_mediumtrust.config et web_hightrust.config dans un outil de diff, tel que WinMerge.

5) Copiez les paramètres de haut en bas, un à la fois, et voyez comment ils affectent votre application. Dans mon cas, le message d'erreur faisait référence à ConfigurationPermission, il était donc facile à diagnostiquer.

Si vous pouvez identifier avec précision les lignes qui vous bloquent dans le fichier web_mediumtrust.config, vous pourrez peut-être le partager avec votre société d'hébergement et avoir ainsi une meilleure chance de résoudre le problème.

Plus de documentation ici:
http://msdn.microsoft.com/en-us/library/aa302425. aspx

@Oli, mon application IS est hébergée chez GoDaddy et j'ai dû effectuer quelques solutions de contournement dans le code lorsque j'ai commencé à utiliser Lucene.NET. J'ai dû modifier le code source de Lucene.NET pour ne pas utiliser GetTempPath ni System.IO.FileInfo.

Autres conseils

Qui peut être sûr? C’est pourquoi vous devez développer un niveau de confiance de niveau moyen dans votre configuration Web.

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

La plupart des hôtes partagés n'utilisent pas un véritable environnement de confiance, car il restreint certaines tâches trop importantes. D'autres limitent certains paramètres supplémentaires pour leurs propres raisons anales.

La meilleure chose à faire est de demander à votre hôte quels paramètres il utilise pour ASPNET. Demandez les spécifications du niveau de confiance qu'ils utilisent. Découvrez les limites de la mémoire. Une fois que vous avez ces détails, vous devriez pouvoir reproduire le scénario au niveau local.

S'ils ne vous le disent pas, configurez simplement votre application pour qu'elle s'exécute dans une confiance moyenne, mais cela ne fonctionnera pas nécessairement si elle utilise un niveau de confiance modifié.

Voici des informations sur la définition des niveaux de confiance dans IIS .

En général, le seul problème que j'ai rencontré est le suivant: si vous insérez des assemblages, veillez à autoriser les demandes partiellement approuvées (c'est une méta-balise Assembly), sinon vous ne pourrez pas les utiliser.

Voici un extrait de la page d'informations sur GoDaddy Medium Trust :

  

Applications fonctionnant sous un support   niveau de confiance n'a aucun accès au registre,   pas d'accès au journal des événements Windows,   et ne peut pas utiliser ReflectionPermission   (mais peut utiliser la réflexion). Tel   les applications ne peuvent communiquer qu'avec   une plage d'adresses réseau définie   et l'accès au système de fichiers est limité à   le répertoire virtuel de l'application   hiérarchie.

     

L'utilisation d'un niveau de confiance moyen empêche   applications d'accéder à partagé   les ressources système et élimine la   potentiel d'application   ingérence. Ajout de OleDbPermission   et OdbcPermission permet aux applications   d'utiliser ces fournisseurs de données pour accéder   bases de données. WebPermission est modifié   autoriser les http et https sortants   trafic.

Cela peut ne pas correspondre exactement à ce que vous devrez faire avec votre hôte (sauf si vous êtes avec GoDaddy), mais c'est un exemple typique.

Assurez-vous que toutes les bibliothèques / infrastructures tierces (on pense à Castle) sont construites (ou peuvent être construites) en confiance moyenne.

La bibliothèque system.runtime.serialization est complètement indisponible en confiance moyenne.

J'ai codé autour de cela pour la sérialisation / désérialisation JSON et j'ai découvert la méthode la plus difficile. Il a fallu une semaine à un associé pour confirmer que les restrictions relatives à la confiance moyenne étaient à blâmer. J'ai donc fini par changer de société d'hébergement.

En confiance moyenne, du moins chez mon hôte, les appels P / INVOKE ne sont pas disponibles, c'est-à-dire que l'utilisation de [DLLImport] pour appeler un composant COM ne fonctionnera pas.

-Edoode

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top