¿Cuáles son las cosas más comunes y típicas para EVITAR la codificación en mi aplicación ASP.NET para que se ejecute en Medium Trust en un host compartido?
-
07-07-2019 - |
Pregunta
¿Cuáles son las cosas que Medium Trust le impide hacer? Por ejemplo, ya he aprendido que Medium Trust le impide usar System.IO.Path.GetTempPath (). ¿Qué otras cosas como esa?
Solución
Aquí le mostramos cómo aprender y resolver problemas de confianza.
1) Busque en sus carpetas Windows \ Microsoft.NET \ Framework [SU VERSIÓN] \ CONFIG para los archivos:
- web.config (este es el archivo de configuración raíz)
- web_mediumtrust.config
- web_hightrust.config
2) Cambie web.config para decir
<trust level="Medium" originUrl="" />
3) Pruebe su aplicación ASP.NET. El mío falló con un error de permiso.
4) Diferencia web_mediumtrust.config y web_hightrust.config en una herramienta diff, como WinMerge.
5) Copie la configuración de alta a media de una en una y vea cómo afectan a su aplicación. En mi caso, el mensaje de error hacía referencia a ConfigurationPermission, por lo que fue fácil de diagnosticar.
Si puede precisar las líneas precisas en el archivo web_mediumtrust.config que lo están bloqueando, entonces tal vez pueda compartirlo con su empresa de alojamiento y tener una mejor oportunidad de resolverlo.
Más documentación aquí:
http://msdn.microsoft.com/en-us/library/aa302425. aspx
@Oli, mi aplicación ES alojada en GoDaddy y tuve que hacer algunas soluciones en el código cuando comencé a usar Lucene.NET. Tuve que modificar el código fuente de Lucene.NET para no usar GetTempPath y System.IO.FileInfo.
Otros consejos
¿Quién puede estar seguro? Es por eso que debe desarrollar con un nivel de confianza de medio establecido en su web.config.
<trust level="Full|High|Medium|Low|Minimal" />
La mayoría de los hosts compartidos no usan un verdadero entorno de confianza media porque restringe algunas cosas que son demasiado vitales. Otros restringen algunas configuraciones adicionales por sus propios motivos anales.
Lo mejor que puede hacer es preguntarle a su host qué configuraciones utilizan para ASPNET. Solicite las especificaciones del nivel de confianza que están utilizando. Descubre los límites de la memoria. Una vez que tenga esos detalles, debería poder replicar el escenario a nivel local.
Si no te lo dicen, solo configura tu aplicación para que se ejecute con una confianza media, pero (obviamente) no necesariamente funcionará si están usando un nivel de confianza modificado.
Aquí está información sobre cómo establecer niveles de confianza en IIS .
En general, el único problema con el que me he encontrado es: si está empujando ensamblajes, asegúrese de permitir solicitudes parcialmente confiables (es una metaetiqueta de ensamblaje), de lo contrario no podrá usarlas.
Aquí hay un extracto de página de información de GoDaddy's Medium Trust :
Aplicaciones que operan bajo un medio el nivel de confianza no tiene acceso al registro, sin acceso al registro de eventos de Windows, y no puede usar ReflectionPermission (pero puede usar Reflection). Tal las aplicaciones solo pueden comunicarse con un rango definido de direcciones de red y el acceso al sistema de archivos está limitado a el directorio virtual de la aplicación jerarquía.
El uso de un nivel de confianza medio evita aplicaciones de acceso compartido recursos del sistema y elimina el potencial de aplicación interferencia. Agregar OleDbPermission y OdbcPermission permite aplicaciones utilizar esos proveedores de datos para acceder bases de datos Se modifica el permiso web para permitir http y https salientes tráfico.
Es posible que eso no se corresponda exactamente con lo que tendrá que solucionar con su host (a menos que esté con GoDaddy), pero es un ejemplo típico.
Asegúrese de que las bibliotecas / frameworks de terceros (Castle me viene a la mente) se compilan (o se pueden construir) con una confianza media.
La biblioteca system.runtime.serialization no está disponible en la confianza media.
Codifiqué esto para la serialización / deserialización de json y descubrí por las malas. Tardó una semana en conseguir que un asociado confirmara que las restricciones de confianza media eran las culpables. Terminé cambiando de empresas de hosting como resultado.
En confianza media, al menos en mi host, las llamadas P / INVOKE no están disponibles, es decir, usar [DLLImport]
para llamar a un componente COM no va a funcionar.
-Edoode