¿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?

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

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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top