Arquitectura de soluciones de espacio aislado

En este tema se describe la arquitectura del sistema de solución de espacio aislado en SharePoint.

Última modificación: jueves, 14 de abril de 2011

Hace referencia a: SharePoint Foundation 2010

En este artículo
Información general
Sistema de empaquetado e instalación para soluciones de espacio aislado
Modelo de proceso para soluciones de espacio aislado
Ejecución de código y acceso a recursos en el proceso de trabajo de espacio aislado
Restricciones de uso de recursos en soluciones de espacio aislado
Sistema de representación de división de página
Escapar a las restricciones de espacio aislado
Marco de validación de la solución

Disponible en SharePoint Online

Se incluyen las descripciones del sistema de paquetes, el modelo de procesamiento, el sistema de representación de división de página, las restricciones de uso de recursos, las restricciones de acceso y ejecución del código, y el marco de validación de la solución. Se puede obtener información detallada sobre estos temas en otros temas del nodo de Soluciones de espacio aislado del SDK.

Información general

Una solución de espacio aislado, a diferencia de una solución de conjunto o granja de servidores, permite que los administradores de colecciones de sitios instalen soluciones personalizadas en Microsoft SharePoint Foundation sin la participación de un administrador de nivel superior. Sin embargo, esta libertad requiere que las soluciones de espacio aislado se limiten en lo que pueden implementar, en el código que pueden ejecutar y en los recursos a los que pueden obtener acceso.

Nota

El término "usuario" a veces se usa en lugar de "espacio aislado", especialmente en el modelo de objetos para el sistema de soluciones de espacio aislado. Por ejemplo, el espacio de nombres con las API principales del sistema es Microsoft.SharePoint.UserCode, y el servicio que controla la ejecución de soluciones de espacio aislado se denomina Host de código de usuario de SharePoint 2010 en el cuadro de diálogo Servicios de Windows en los servidores front-end web. (En la aplicación Administración Central, se denomina Servicio de código de espacio aislado de SharePoint Foundation .) Es el nombre que antes recibía lo que ahora se denomina "soluciones de espacio aislado".

Sistema de empaquetado e instalación para soluciones de espacio aislado

Al igual que una solución de granja de servidores, una solución de espacio aislado se empaqueta para su instalación en un archivo de paquete de solución (.wsp). En lugar de implementarse en el almacén de soluciones de la granja de servidores, un administrador de la colección de sitios implementa las soluciones de espacio aislado en la Galería de soluciones de una colección de sitios específica. La galería es una lista de SharePoint especial, por lo que se encuentra en la base de datos de contenido. La implementación de la solución en la galería se realiza a través de la interfaz de usuario de Acciones del sitio de la colección de sitios o mediante la Consola de administración de SharePoint. Para obtener más información sobre el proceso de instalación de las soluciones de espacio aislado, vea Instalación, desinstalación y actualización de soluciones de espacio aislado.

Existen límites relativos a los tipos de elementos que se pueden incluir en las soluciones de espacio aislado y a los lugares donde pueden implementarse. Lo más importante es que nada puede implementarse en el sistema de archivos de los servidores desde una solución de espacio aislado. Esta restricción tiene varias implicaciones:

  • No se pueden implementar páginas de aplicaciones, controles de usuario (archivos .ascx) ni archivos de recursos de localización (.resx) con una solución de espacio aislado. (Sin embargo, existen otras formas de localizar las soluciones de espacio aislado. Para obtener más información, vea Localización de soluciones de espacio aislado.)

  • Las imágenes, los archivos de script y las características de soluciones de espacio aislado se implementan en la base de datos de contenido, no en el sistema de archivos de los servidores front-end.

  • No es posible implementar definiciones de sitios en soluciones de espacio aislado. Pero sí pueden implementarse plantillas web, que son funcionalmente equivalentes. Para obtener más información, vea How to: Deploy a Web Template in a Sandboxed Solution.

  • Los ensamblados en las soluciones de espacio aislado también se implementan en la base de datos de contenido, incluso cuando durante su uso se almacenan temporalmente en la memoria caché del sistema de archivos del servidor que controla la solicitud. Para obtener más información, vea ¿Dónde se implementan los ensamblados en las soluciones de espacio aislado?.

Para obtener información más completa de lo que puede implementarse en una solución de espacio aislado, vea Qué se puede implementar en una solución de espacio aislado.

Una solución de espacio aislado tampoco puede obtener acceso a nada fuera de la colección de sitios en la que se implementa. Esto implica que las características implementadas en las soluciones de espacio aislado solo puedan tener como ámbito un sitio web o una colección de sitios.

Modelo de proceso para soluciones de espacio aislado

SharePoint es una aplicación de ASP.NET y como cualquier aplicación de ASP.NET, cuando un servidor front-end web recibe una solicitud HTTP, un controlador especial, HTTP.SYS, detecta la solicitud y la enruta al grupo de aplicaciones que controla las solicitudes para el sitio web de IIS de destino y, por tanto, la aplicación web de SharePoint de destino. Cada grupo de aplicaciones tiene un proceso de trabajo de IIS (w3wp.exe) en el que se ejecuta la canalización de solicitud para cada solicitud. (Para obtener más información sobre los grupos de aplicaciones y los procesos de trabajo de IIS 7.0, vea la introducción a la arquitectura de IIS 7). En un servidor de SharePoint, el proceso de trabajo de IIS se ejecuta en la cuenta del grupo de aplicaciones. Normalmente se trata de la cuenta de la granja de servidores y, por tanto, el proceso tiene permisos de lectura y escritura en los recursos de SharePoint. En una granja de varios servidores, la cuenta de la granja de servidores normalmente es un usuario de dominio. Se trata de la misma cuenta que obtiene acceso a las bases de datos de contenido. El temporizador de extensiones de SharePoint 2010 se ejecuta en el contexto de la misma cuenta.

Las soluciones de granja de servidores se ejecutan en el proceso de trabajo de IIS como cualquier aplicación de ASP.NET. Sin embargo, las soluciones de espacio aislado se ejecutan en un entorno de ejecución especialmente restringido. Esto es necesario para impedir el acceso no autorizado o que el bajo rendimiento de código ralentice o bloquee el grupo de aplicaciones. En consecuencia, SharePoint impone restricciones sobre lo que puede hacer el código en una solución de espacio aislado. Como parte fundamental de la implementación de este sistema, las soluciones de espacio aislado deben ejecutarse en un proceso de trabajo de espacio aislado especial (SPUCWorkerProcess.exe).

Cuando una solicitud intenta obtener acceso a una solución de espacio aislado, un administrador de ejecución de SharePoint que se ejecuta en el proceso de trabajo de IIS encuentra un proceso de trabajo de espacio aislado (o inicia uno si no está en ejecución) en el cual se ejecutará el código de la solución de espacio aislado. En principio, se puede iniciar este proceso de trabajo de espacio aislado en cualquier servidor de la granja que ejecute el Servicio de código de espacio aislado de de SharePoint Foundation (SPUCHostService.exe). En el cuadro de diálogo Servicios de Windows, esto se conoce como el servicio de Host de código de usuario de SharePoint 2010.

El servidor que ejecuta el Servicio de código de espacio aislado de SharePoint Foundation puede ser, aunque no obligatoriamente, el servidor front-end web en el que se ejecuta el proceso de trabajo de IIS. En la aplicación Administración Central se puede configurar el servidor que se usará: los administradores pueden elegir que cada proceso de espacio aislado se ejecute en "modo local", lo que significa que cada solicitud para una solución de espacio aislado se procesa en el mismo servidor front-end web en el que se ejecuta el proceso de trabajo de IIS; o pueden elegir que el administrador de ejecución inicie cada proceso de espacio aislado en "modo remoto", a veces denominado "modo de afinidad". En este último modo, el administrador de ejecución buscará un servidor que ejecute el Servicio de código de espacio aislado de SharePoint Foundation y que ya haya creado un dominio de aplicación dentro de su proceso SPUCWorkerProcess.exe para la misma solución de espacio aislado. (Este sería el caso si esa misma solución de espacio aislado hubiese sido solicitada antes, posiblemente por otro usuario en otra colección de sitios). Si hay un dominio de aplicación coincidente, se enviará la solicitud a ese mismo dominio de aplicación para el control. Si ninguno de los servidores que ejecutan el Servicio de código de espacio aislado de SharePoint Foundation tiene un dominio de aplicación para la solución de espacio aislado, el administrador de ejecución asignará la solicitud al servidor menos ocupado. A continuación, el servidor creará el dominio de aplicación necesario y procesará la solicitud para la solución de espacio aislado. Independientemente de si se usa el modo local o de afinidad, el dominio de aplicación en el proceso de trabajo de espacio aislado permanece activo después de que se procese la solicitud y se vuelve a usar si hay otra solicitud para la misma solución de espacio aislado.

Todas las soluciones de espacio aislado controladas por un servidor se ejecutan en el mismo proceso de trabajo de espacio aislado. Cada solución de espacio aislado obtiene su propio dominio de aplicación dentro del proceso común. El Servicio de código de espacio aislado de SharePoint Foundation se ejecuta en la cuenta de la granja de servidores.

Ejecución de código y acceso a recursos en el proceso de trabajo de espacio aislado

Todo el código que se ejecuta en este proceso de trabajo de espacio aislado está sujeto a restricciones de ejecución y acceso. Existen dos sistemas de restricciones: uno se aplica solo a las llamadas que el código de las soluciones de espacio aislado realiza al ensamblado principal de SharePoint Foundation, Microsoft.SharePoint.dll. El otro se aplica a todas las otras llamadas, incluidas las llamadas a otros ensamblados de SharePoint y a ensamblados de .NET Framework. En este tema, el primer sistema se denomina Restricciones del modelo de objetos del servidor y el segundo sistema se denomina Restricciones generales. (También existen algunas restricciones resultantes del sistema de representación de división de página usado en las soluciones de espacio aislado. Para obtener más información, vea la sección Sistema de representación de división de página a continuación.)

Nota

Los dos sistemas se excluyen mutuamente: las restricciones generales no se aplican a las llamadas realizadas al ensamblado de Microsoft.SharePoint.dll.

Las restricciones generales se imponen a través de dos mecanismos:

  1. Una directiva CAS altamente restrictiva limita significativamente lo que el código puede hacer en el proceso de trabajo de espacio aislado. Esta directiva se define en el archivo wss_usercode.config en %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\CONFIG y se hace referencia a ella en el archivo web.config en %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\UserCode. (No se admite el cambio de este archivo). Las restricciones impuestas por la directiva CAS son las siguientes:

    Nota

    La directiva CAS hace una excepción con los ensamblados de Microsoft Office con nombre seguro. Se les concede plena confianza.

    Para obtener más información acerca de esta directiva CAS y sus implicaciones, vea Restricciones en las soluciones de espacio aislado.

  2. En segundo lugar, el proceso de trabajo de espacio aislado tiene un token de seguridad con pocos privilegios.

    • El token le niega al proceso el derecho de lectura o escritura en el sistema de archivos.

    • El token le niega al proceso el derecho de llamar a la red. Por lo tanto, solo se puede obtener acceso a los recursos disponibles en el servidor que ejecuta el proceso de trabajo de espacio aislado. Por ejemplo, no se puede obtener acceso a una base de datos externa.

    • El token le niega al proceso el derecho de escritura en el Registro.

    • El token le niega el derecho de llamar a cualquier ensamblado que no esté en la memoria caché de ensamblado general, aunque tenga el atributo AllowPartiallyTrustedCallersAttribute y sea de otro modo válido para ser llamado desde el proceso de trabajo de espacio aislado.

Tenga en cuenta que estas restricciones no se aplican a las llamadas realizadas a las API en el ensamblado Microsoft.SharePoint.dll. Por lo que, por ejemplo, una llamada a GetLocalizedString puede leer en archivos de recursos del sistema de archivos y las llamadas a objetos SPList pueden leer y escribir en la base de datos de contenido independientemente del servidor en que se encuentre. (Sin embargo, no se puede implementar un archivo en el disco en una solución de espacio aislado, por lo que .resx tendría que instalarse por separado como una solución de granja de servidores).

La restricción principal en el sistema Restricciones del modelo de objetos del servidor es que solo se puede llamar a un subconjunto de las API en el ensamblado Microsoft.SharePoint.dll desde una solución de espacio aislado. Una llamada a cualquier API prohibida produce una excepción (que se detecta y notifica al usuario como un error).

Estas son algunas de las restricciones de acceso en el modelo de objetos de SharePoint:

  • La clase SPWebApplication no está disponible. Entre otras cosas, esto significa que una solución de espacio aislado no tiene acceso fuera de su colección de sitios de hospedaje.

  • Prácticamente todas las clases del espacio de nombres Microsoft.SharePoint.WebControls no están disponibles, lo que significa que principalmente se pueden usar los controles ASP.NET en las soluciones de espacio aislado.

Para obtener una lista completa de las clases Microsoft.SharePoint.dll que están disponibles para las soluciones de espacio aislado, vea API de Microsoft.SharePoint.dll disponibles en soluciones de espacio aislado.

La implementación de esta restricción se lleva a cabo por un par de versiones especialmente restringidas del ensamblado Microsoft.SharePoint.dll, denominadas correcciones de compatibilidad (shim), que se encuentran en %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\UserCode\assemblies. Estas versiones se diferencian del ensamblado estándar Microsoft.SharePoint.dll principalmente en que contienen solo un subconjunto de las clases y miembros en la versión estándar.

El proceso de trabajo de espacio aislado carga uno de los dos ensamblados de correcciones de compatibilidad (shim). El otro se carga en un proceso de proxy especial (SPUCWorkerProcessProxy.exe) que se ejecuta con plena confianza y que además está administrado por el Servicio de código de espacio aislado de SharePoint Foundation. El ensamblado estándar Microsoft.SharePoint.dll también se carga en este proceso de proxy.

El trabajo principal de los dos ensamblados de de correcciones de compatibilidad (shim) es filtrar las clases y los miembros de SharePoint prohibidos. Cuando se realiza una llamada a Microsoft.SharePoint.dll desde cualquier código en el proceso de trabajo de espacio aislado, se redirige a la versión de correcciones de compatibilidad (shim) del ensamblado. Si la API a la que se llama no se encuentra en el ensamblado de correcciones de compatibilidad (shim), se produce una excepción (que se detecta y notifica al usuario como un error).

Cuando la solución de espacio aislado llama a una API aprobada que está dentro de los ensamblados de correcciones de compatibilidad (shim), el primer ensamblado de correcciones de compatibilidad (shim) pasa al segundo en el proceso de proxy de plena confianza que, a su vez, pasa al ensamblado estándar Microsoft.SharePoint.dll. Los resultados devueltos se pasan al código de llamada original. Esta interacción entre procesos es posible por medio de .NET Remoting. Un proceso de trabajo de espacio aislado y un proceso de proxy de plena confianza siempre se inician de forma conjunta y se emparejan entre sí. Si se bloquea uno de ellos, el otro se detiene también.

Hay una restricción secundaria en el sistema Restricciones del modelo de objetos del servidor que también es exigida por los ensamblados de correcciones de compatibilidad (shim). Se puede llamar a algunas API de SharePoint desde soluciones de espacio aislado, pero solo con las restricciones especiales en los parámetros pasados. Son los ensamblados de correcciones de compatibilidad (shim) los que imponen estas restricciones de entrada y garantizan que se produzca una excepción cuando hay una infracción. El único caso de esto en SharePoint Foundation 2010 son los constructores SPSite(String) y SPSite(Guid). Están disponibles para soluciones de espacio aislado, pero solo se les pueden pasar las direcciones URL o GUID que hacen referencia a la colección de sitios en la que se instala la solución de espacio aislado.

Nota

Debido a que el segundo ensamblado de correcciones de compatibilidad (shim) y el ensamblado estándar Microsoft.SharePoint.dll se ejecutan en un proceso de plena confianza, no se aplican las Restricciones generales. Dichas restricciones están en el proceso de trabajo de espacio aislado.

Nota importanteImportante

La fase de implementación de una solución de espacio aislado propiamente dicha se ejecuta en un proceso de trabajo de espacio aislado y está sujeta a las mismas restricciones de ejecución. Por ejemplo, no se puede implementar un archivo en el disco al implementar una solución de espacio aislado. Ésta es la razón principal por la que no puede incluirse un control de usuario (archivo ASCX) en una solución de espacio aislado.

La figura 1 muestra cómo se controla una solicitud HTTP cuando tiene acceso a una solución de espacio aislado.

Figura 1: Modelo de procesamiento de solicitudes para soluciones de espacio aislado

Modelo de procesamiento de solicitudes en soluciones de espacio aislado

Los archivos SPUCHostService.exe, SPUCWorkerProcess.exe y SPUCWorkerProcessProxy.exe se encuentran en %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\UserCode.

Restricciones de uso de recursos en soluciones de espacio aislado

Las soluciones de espacio aislado también están sujetas a tres tipos de restricciones de uso de recursos que pueden clasificarse por (1) el tipo de entidad a la que se aplica la restricción y (2) el tipo de entidad en la que se impone la penalización por superar la restricción.

  • Por solicitud con la solicitud penalizada: hay un límite máximo de cuánto puede tardar una solución de espacio aislado en completarse. De forma predeterminada, es de 30 segundos. Si una solución de espacio aislado supera el límite, se termina la solicitud (pero no el proceso de trabajo de espacio aislado). (Este límite es configurable, pero solo a través del código personalizado en el modelo de objetos. Las partes relevantes del modelo de objetos no están disponibles para soluciones de espacio aislado, por lo que ninguna solución de espacio aislado puede cambiar el límite.)

  • Por solicitud con el proceso penalizado: hay un conjunto de 15 límites de recursos adicionales que se aplican a las solicitudes. Si una solicitud supera uno de ellos, el proceso (y todas las soluciones de espacio aislado que se estén ejecutando en él) se termina.

  • Por día o por colección de sitios con la colección de sitios penalizada: cada colección de sitios está sujeta a un máximo configurable de "puntos de recursos" diarios. Estos puntos se acumulan según un algoritmo que tiene en cuenta el uso de recursos en las 15 categorías de recursos de las soluciones de espacio aislado que se instalaron en la colección de sitios. Cuando una colección de sitios supera el máximo permitido de puntos, todas las soluciones de espacio aislado en la colección de sitios se terminan, y no se puede ejecutar nada más durante el resto del día.

Para obtener información detallada acerca de las restricciones de recursos impuestas en las restricciones de espacio aislado, vea Límites de uso de recursos en las soluciones de espacio aislado.

Sistema de representación de división de página

Cuando un equipo cliente solicita una página de SharePoint que incluye un componente de una solución de espacio aislado, como un elemento web implementado en una solución de espacio aislado, SharePoint representa más de un objeto de página. Uno se representa en el proceso de trabajo de Microsoft ASP.NET (w3wp.exe) y los otros se representan en el proceso de trabajo de espacio aislado. Todos los componentes que no pertenecen al espacio aislado se representan en la página en el proceso de trabajo de ASP.NET, mientras que el primer componente de espacio aislado se representa en un objeto de página en el proceso de trabajo de espacio aislado. Cuando la página en el proceso de trabajo de espacio aislado se representa completamente, se combina con el objeto de página en el proceso de ASP.NET. Si hay más de un componente de espacio aislado en la página que solicitó el usuario, cada uno de ellos se representa por separado en su propio objeto de página en el proceso de trabajo de espacio aislado. Cada objeto de dicha página, a su vez, se combina con el objeto de página en el proceso de ASP.NET.

Como efecto secundario, este sistema impone algunas restricciones adicionales relativas a lo que se puede hacer en una solución de espacio aislado. Para obtener más información sobre estas restricciones, vea Restricciones en las soluciones de espacio aislado.

Escapar a las restricciones de espacio aislado

Hay dos formas principales en las que una solución de espacio aislado podría escapar a las restricciones habituales. Lo más importante es usar el código del cliente para tener acceso a los recursos que no están disponibles desde el código del servidor en una solución de espacio aislado. Por ejemplo, una solución de espacio aislado puede incluir una página de sitio personalizado con JavaScript que realice llamadas al modelo de objetos cliente JavaScript de SharePoint. Además, una solución de espacio aislado puede incluir un elemento web que hospede una aplicación de Microsoft Silverlight. Esta última aplicación puede realizar llamadas al modelo de objetos cliente Silverlight de SharePoint. Ninguna de las restricciones en las soluciones de espacio aislado se aplica al código del cliente. No hay restricciones de ejecución de código, restricciones de acceso de recursos ni restricciones de uso de recursos. Para obtener más información, vea How to: Extend the Power of a Sandboxed Solution with the SharePoint Client Object Model.

La arquitectura de soluciones de espacio aislado también permite una técnica con la que una solución de espacio aislado puede llamar a operaciones personalizadas que se ejecutan con plena confianza. La técnica requiere desarrollar una solución de granja de servidores que incluya una o más clases que deriven de SPProxyOperation. Cada una define una operación que se ejecutará con plena confianza y que se puede llamar desde soluciones de espacio aislado por medio del método ExecuteRegisteredProxyOperation. En concreto, estas operaciones de proxy de plena confianza se ejecutan en el mismo proceso de proxy (SPUCWorkerProcessProxy.exe) en el que se ejecuta el ensamblado estándar Microsoft.SharePoint.dll. Las operaciones de proxy pueden devolver datos a la solución de espacio aislado.

La figura 2 muestra cómo se procesa una solicitud que tiene acceso a una solución de espacio aislado cuando la solución de espacio aislado realiza una llamada a un proxy de plena confianza.

Figura 2: Modelo de procesamiento de solicitudes cuando una solución de espacio aislado llama a un proxy de plena confianza

Modelo de proceso de proxy de espacio aislado y de plena confianza

La descripción anterior podría dar la impresión de que, con esta técnica, una granja de servidores y una solución de espacio aislado se desarrollan siempre conjuntamente por el mismo equipo de desarrollo. De hecho, la solución de granja de servidores que contiene las clases de operaciones de proxy se puede desarrollar especialmente para proporcionar determinadas operaciones a cualquier solución de espacio aislado que necesite esos servicios, incluidas las soluciones de espacio aislado desarrolladas por otros equipos. Por ejemplo, dado que una solución de espacio aislado no puede escribir en los registros ULS de SharePoint, sería muy útil disponer de una solución de granja de servidores que abriese las operaciones de registro de proxy para las soluciones de espacio aislado.

Para obtener más información acerca del desarrollo y las llamadas de operaciones de proxy de plena confianza, vea Sandboxed Solutions in Partnership with Full-Trust Proxies in SharePoint 2010 y otros temas en el mismo nodo.

Marco de validación de la solución

SharePoint ofrece un marco de validación de la solución que se puede usar para desarrollar validadores de soluciones personalizadas, como un validador que comprueba si una solución está firmada con un certificado específico. Los validadores en una colección de sitios se ejecutan cuando se activa una solución de espacio aislado. Se bloquea la activación de cualquier solución no válida. Si un validador se actualiza o se agrega un nuevo validador, entonces los validadores comprueban cada solución activada la próxima vez que se ejecuta. Se desactivan las soluciones no válidas. Para obtener más información acerca de cómo desarrollar validadores personalizados, vea Solution Validation System.