Este artículo proviene de un motor de traducción automática.

Recinto de SharePoint

Desarrollar, implementar y supervisión Sandboxed Solutions en SharePoint 2010

Paul Stubbs

SharePoint es una plataforma de desarrollo variado con una gran comunidad activamente desarrollar soluciones. Sin embargo, el desafío, siempre ha sido el equilibrio entre la creación de soluciones y implementarlas de forma que puede confiar no dañar o perjudicar el conjunto de servidores de SharePoint. Los administradores del conjunto son responsables del mantenimiento de la salud y la integridad de la granja de SharePoint y, a menudo, esto significa colocar procesos complicados, mucho tiempo en su lugar para probar y validar soluciones implementadas para el conjunto de servidores. Esta necesidad es contador para el modelo de aplicaciones rápida utilizado para crear soluciones de SharePoint y lo complica la implementación de soluciones third-party. Una nueva característica de SharePoint 2010, denominado recinto de soluciones, muchos de estos problemas, lo que permite a los administradores del conjunto de servidores sensación de que el conjunto de servidores de SharePoint es seguro, dando la autoridad para administrar las aplicaciones de su colección de sitios, los administradores de la colección de sitios y proporcionar a los desarrolladores la flexibilidad de crear soluciones que conocen se van a implementar de forma rápida y segura de direcciones.

En este artículo, describiré cómo recinto soluciones en 2010 SharePoint proporcionan un marco de trabajo para la implementación segura y rápida de soluciones. Aprenderá cómo pueden supervisar los administradores del conjunto de soluciones y cómo los administradores de la colección de sitios instalar y administrar soluciones y características. También verá cómo desarrollar un elemento Web recinto. Let’s iniciar con una comprensión de cómo se implementan las soluciones en el recinto de seguridad.

Implementar soluciones sandboxed

La estructura de una solución de recinto de seguridad es muy similar a una solución de conjunto de servidores, que generalmente se ejecuta con permisos full-trust. Las diferencias principales reside en cómo se implementa una solución de recinto de seguridad y en el proceso que aloja la solución (que determina si una solución es una solución recinto o una solución de conjunto de servidores). Esto significa que la misma solución de recinto de seguridad puede ejecutar con plena confianza cuando se implemente en el nivel del conjunto de servidores y con confianza parcial cuando se implemente en el nivel de la colección de sitios.

Una solución de SharePoint es un paquete que se pueden implementar que puede contener características y los ensamblados. El paquete de solución es un archivo .cab con una extensión .wsp. Las plantillas de proyecto de Visual Studio 2010 SharePoint crean .wsp archivos de paquete. Una solución podría contener un número de características de SharePoint, y estas características proporcionan funcionalidad, como elementos Web, definiciones de lista, módulos y receptores de eventos.

Ahora los administradores de la colección de sitios tienen autoridad para cargar, activar, eliminar y administran soluciones recinto mediante la nueva galería de soluciones, que es un repositorio de recinto de soluciones. La galería también permite que un administrador de la colección de sitios supervisar el uso de la solución en una cuota de recurso. (Verá cómo detalladamente más adelante en el artículo.) La Galería de soluciones es simplemente una estándar lista de SharePoint que almacena el archivo .wsp. Se encuentra bajo la carpeta _catalogs en _catalogs y soluciones. La galería se agrega a la colección de sitios cuando actualiza desde una colección de sitios de SharePoint 2007. Abra la Galería de soluciones, se muestra en de figura 1, por primera haciendo clic en configuración del sitio en el menú Acciones del sitio. A continuación, en la página Configuración del sitio, haga clic en soluciones bajo la sección galerías.


Figura 1 de Galería de soluciones de SharePoint

Implementar una solución de recinto de seguridad a la colección de sitios es tan sencillo como cargar el archivo .wsp a la galería y activarlo. Haciendo clic en el botón Cargar solución le ofrece la opción de cargar un archivo .wsp único o varios archivos. Cuando se abre el formulario de documento de carga, busque la ubicación del archivo .wsp o archivos que desea implementar.

A continuación, se le preguntará si desea activar la solución. Al activar una solución, las características de ámbito de la colección-sitio se activan automáticamente también, pero debe ir a cada sitio para activar las características del ámbito de sitio desde la página Administrar características del sitio. La Galería de soluciones muestra el nombre de la solución y fecha de modificación, así como su estado activado y los recursos consumidos por la solución. Puede eliminar una solución desde la Galería de sólo una vez que ha desactivado. Si desea copiar una solución de una colección de sitio a otro, guarde el archivo .wsp en el disco y cargarla en otra galería de soluciones.

También puede utilizar nuevas características de solución y la característica de actualización de infraestructura en 2010 de SharePoint para actualizar soluciones recinto. Para actualizar una solución, deberá crear un archivo .wsp que tiene un nuevo nombre de archivo pero el mismo identificador de solución. La forma más sencilla de hacerlo es abrir el proyecto en Visual Studio y realice los cambios, tras lo cual puede cambiar el nombre del paquete con el Diseñador de paquete. Haga doble clic en el nodo de paquete en su solución para abrir el Diseñador de paquete y, a continuación, cambie el nombre del paquete. Ahora puedes cargar el paquete de solución recinto como lo haría con un nuevo paquete. SharePoint detecta que está instalado un paquete con el mismo ID de la solución y le solicita que actualice. Después de actualizar, verá que la nueva versión se activa y desactiva la versión antigua, como se muestra en figura 2. Si examina el elemento Web instalado por la solución, puede ver la nueva versión en ejecución.


Figura 2 Upgraded soluciones sandboxed

Creación de un elemento Web Sandboxed

Una solución recinto parece y se comporta como una solución de conjunto de servidores, pero ensamblado la solución recinto debe estar marcado para permitir a que los llamadores de confianza parcial. La propiedad Sandboxed Solution está configurada en la ventana Propiedades del proyecto. Recuerde que una solución recinto puede implementarse como una solución de plena confianza y obtener las capacidades expandidas que vienen con que se ejecutan en confianza completa porque no hay nada en el archivo de solución .wsp especifica como una solución recinto o una solución de conjunto de servidores. Esto lo determina cómo se implementa la solución.

Uno de los tipos de soluciones de recinto de seguridad más comunes son elementos Web. En esta sección, describiré cómo crear una solución recinto con un elemento Web y mencione algunos los problemas que se debe tener en cuenta. En primer lugar, hay dos tipos de elementos Web en Visual Studio, visual de elementos de Web y elementos Web estándar. Un elemento Web visual contiene un control .ascx que puede utilizar para diseñar visualmente la apariencia del elemento Web. Desgraciadamente, no se puede utilizar visual elementos Web en el recinto de seguridad porque soluciones recinto no pueden implementar los archivos para el front-end Web, que es donde los archivos .ascx deben implementarse. Esto significa que debe crear un elemento Web estándar.

Comience seleccionando proyecto vacío en el cuadro de diálogo nuevo proyecto bajo el nodo de SharePoint para C# o Visual Basic. Cuando se crea una solución de SharePoint, el Asistente de proyecto le preguntará si desea crear una solución de recinto de seguridad, que es el valor predeterminado o una solución de plena confianza. (Vea figura 3.) Esta opción se aplica a las soluciones de SharePoint que se pueden implementar a la Galería de soluciones. Haga clic en Finalizar después de comprobar la ruta de acceso a la colección de sitios.


Figura 3 de cuadro de diálogo de Asistente de nuevo proyecto de SharePoint

Para agregar un elemento Web a la solución, elija Agregar nuevo elemento desde el menú principal de proyecto y, a continuación, seleccione el elemento de plantilla de proyecto de elemento Web de la lista. En este punto, tiene un elemento Web recinto totalmente funcional que puede implementar.

Durante el desarrollo de una solución de recinto de seguridad, Visual Studio automáticamente implementa y activa la solución en la Galería de solución cuando presiona F5. Si examina la Galería de soluciones, puede ver la solución que acaba de crear y distribuir. En de figura 4, la solución tiene el nombre predeterminado SharePointProject1.


Figura 4 de proyecto SharePoint implementadas en la Galería de soluciones por Visual Studio

Como ocurre con otros tipos de proyectos de Visual Studio, puede establecer un punto de interrupción en el código de una solución recinto. Sin embargo, Visual Studio no reconoce un punto de interrupción en este momento porque no se ha agregado el elemento Web a una página. Verá un círculo rojo vacío en el margen izquierdo de la línea de código que tiene el punto de interrupción, como se muestra en la figura 5, de que indica que el ensamblado que contiene el elemento Web no se ha cargado en el proceso asociado. Al agregar el elemento Web a una página, Visual Studio detecta que el ensamblado se ha cargado y se detendrá en el punto de interrupción. Aunque todavía no ha agregado cualquier código real para el proyecto, puede ver que todo está en su lugar y funciona correctamente.


Figura 5 de depuración soluciones de SharePoint en Visual Studio

Conocer un poco acerca de cómo se implementa el recinto de seguridad de SharePoint puede ayudarle comprender cómo depurar soluciones recinto. Puede que esté familiarizado con la depuración de las soluciones de plena confianza, que se ejecutan bajo el proceso de trabajo de IIS utilizado por SharePoint llamada w3wp.exe. Las soluciones de recinto de seguridad no se ejecutan bajo este proceso. Se ejecutan bajo el proceso de trabajo recinto llamado SPUCWorkerProcess.exe, que puede ver en figura 6. Cuando presiona F5, Visual Studio adjunta automáticamente el depurador a este proceso. Si está depurando una solución que ya se ha implementado, deberá asociar a este proceso manualmente.


Figura 6 de adjuntar a SPUCWorkerProcess Depurar soluciones sandboxed

Ahora let’s mirar un par de ejemplos de cómo se ejecuta código en una solución recinto. El primero es un ejemplo de código que funciona en el recinto de seguridad. Agregue el código siguiente al método CreateChildControls en su elemento Web, justo después del método base.CreateChildControls. Puede ver que puede tener acceso a la colección SPLists para devolver el número de objetos SPList en el sitio. Las listas y bibliotecas en soluciones recinto suelen funcionan igual que en las soluciones de plena confianza. Está limitado sólo a la colección de sitios actual.

protected override void CreateChildControls()
    {
      base.CreateChildControls();

      Label ListCount = new Label();
      ListCount.Text = 
        String.Format("There are {0} Lists",
        SPContext.Current.Web.Lists.Count);
      Controls.Add(ListCount);
    }

Otro ejemplo, que está bloqueado en el recinto de seguridad, está trabajando con SPSecurity. Corte y pegue el código siguiente en el elemento Web y se implementa en el recinto de seguridad:

protected override void CreateChildControls()
    {
      base.CreateChildControls();

      SPSecurity.RunWithElevatedPrivileges(
      delegate
        {
          Label ListCount = new Label();
          ListCount.Text =
            String.Format("There are {0} Lists",
            SPContext.Current.Web.Lists.Count);
          Controls.Add(ListCount);
        });
    }

No recibirá una excepción hasta que se ejecuta el código en el proceso de recinto de seguridad. La excepción arrojada es “ no se pudo cargar el tipo 'CodeToRunElevated' del ensamblado ' Microsoft.SharePoint, Version = 14.900.0.0, Culture = neutral, PublicKeyToken = 71e9bce111e9429c '. ” Esta excepción no es una excepción de seguridad pero una excepción de tipo que faltan y se produce porque la clase SPSecurity no forma parte de la API de SharePoint recinto. Puede que se pregunte cómo puede haber una excepción en tiempo de ejecución de tipo falta si Visual Studio compila la solución sin excepciones. Visual Studio compila contra la versión completa de la API de SharePoint, pero en tiempo de ejecución, SharePoint se intercambian fuera de la API completa para la API de recinto y esta API es lo que se ejecuta el código contra. Visual Studio le ayuda a escribir código válido mediante el filtrado de IntelliSense para cuando se crea una solución recinto. Puede ver en figura 7 que la clase SPSecurity no aparece en la lista. Sin embargo, si cortar y pegar código desde una solución de plena confianza, ese código no funcione en el recinto de seguridad y Visual Studio no tiene ningún medio para validar esto.


Figura 7 de filtrado de IntelliSense ayuda a usted crear soluciones sandboxed válidos

Trabajar en el recinto

Ha visto cómo implementar y crear soluciones con recinto de seguridad. Ahora let’s explorar ¿qué puede hacer en el recinto de seguridad.

Recinto soluciones tienen acceso a un gran subconjunto de funcionalidad en el espacio de nombres Microsoft.SharePoint. Básicamente, todas las clases debajo SPSite están disponibles. Esto significa que SPSite, SPWeb, SPList y SPListItem están disponibles. En una solución de recinto de seguridad, puede crear elementos Web, definiciones de lista y las instancias, tipos de contenido y campos, módulos, flujos de trabajo declarativos y receptores de eventos. La API de recinto de seguridad completa se documenta en el SDK de SharePoint.

En general, el proceso de recinto de seguridad impide el acceso a datos fuera de la colección de sitios donde se ha implementado la solución. Por ejemplo, esto significa que no puede tener acceso a Internet para hacer llamadas a servicios Web, no puede tener acceso a una unidad de disco duro para leer o escribir archivos y no se puede código de acceso que no está marcado para permitir a que los llamadores de confianza parcial. No se puede implementar también los archivos de disco o agregar ensamblados a la GAC en una solución de recinto de seguridad y funcionalidad relacionadas con la seguridad, tales como ejecutar RunWithElevatedPriviledges y otros métodos SPSecurity, no se permite.

Pero lo que puede hacer es de lectura y escritura a las listas y bibliotecas dentro de la misma colección de sitios. El recinto de seguridad proporciona suficiente funcionalidad para generar la mayoría de las aplicaciones que se requieren un nivel de sitio. A veces, sin embargo, quizás desee habilitar soluciones de recinto de seguridad llegar a fuera del recinto de seguridad para realizar una operación de confianza, como llamar a un servicio Web o tener acceso a una base de datos. La mejor manera de llegar a fuera del recinto de seguridad de es mediante los servicios de conectividad Business (BCS) para crear un tipo de contenido externo. Puede leer y escribir en el origen de datos de la solución recinto. Otra forma más avanzada, para alcanzar fuera del recinto de seguridad es crear una clase que se ejecuta en un proceso de plena confianza fuera del proceso de trabajo de recinto de seguridad para llamadas de proxy. Esta clase de proxy se implementa como una solución de conjunto de servidores y se puede llamar desde la solución recinto. Aunque es fuera del ámbito de este artículo para describir cómo crear a un proxy de plena confianza, debe tener en cuenta la funcionalidad.

Soluciones de supervisión

Los administradores del conjunto tienen la responsabilidad para mantener el conjunto de servidores de SharePoint en buen estado y segura y que ahora tienen las herramientas para supervisar y establecer cuotas en soluciones de recinto de seguridad. SharePoint proporciona a los administradores del conjunto de servidores con una interfaz de usuario en la administración central para asignar las cuotas de recurso a cada colección de sitios. Puede tener acceso a las cuotas de la página Administración Central en la sección Administración de aplicaciones. A continuación, haga clic en Configurar cuotas y bloqueos en la sección de colecciones de sitios. También puede desplazarse directamente a la página en /_admin/sitequota.aspx en su sitio de administración central.

La página bloqueos y cuotas, que se muestra en de figura 8, le permite seleccionar la colección de sitios para trabajar con. En la sección información de cuota del sitio, puede establecer las propiedades de cuota de usuario Solutions recursos. Puede habilitar el límite máximo diario y establecer la cantidad de puntos para permitir. El valor predeterminado es 300 puntos. Puntos se calculan basándose en un número de factores, que explicaré en breve. También puede habilitar una alerta por correo electrónico para cuando llegue a un determinado número de puntos, que se establece en 100 de forma predeterminada. La página también indica el uso actual del día y el promedio de uso durante los últimos 14 días. Estos dos elementos proporcionan los mismos valores que puede supervisar un administrador de la colección de sitios en la parte superior de la Galería de soluciones.


Figura 8 de administradores del conjunto de servidores controlan las cuotas de recursos

Los administradores del conjunto de servidores también pueden ajustar las cuotas de recursos de solución mediante Windows PowerShell. Por ejemplo, PowerShell facilita en gran medida recorrer en iteración cada colección de sitios y restablecer los valores a sus valores predeterminados. Mediante el comando Get-SPSite y canalizar a una instrucción foreach cambian todos los valores con una sola línea de código. Para ejecutar este código, abra una ventana de consola de administración de SharePoint 2010 desde el menú Inicio y escriba los comandos siguientes:

Get-SPSite | foreach-object {$_.Quota.UserCodeMaximumLevel = 300}
Get-SPSite | foreach-object {$_.Quota.UserCodeWarningLevel = 100}

Si desea ver sólo qué son los valores de cuota actual, puede ejecutar el siguiente comando de PowerShell:

Get-SPSite | foreach-object {$_.Quota}

Este comando genera las propiedades de cuota para cada colección de sitios en el conjunto de servidores. PowerShell formatos de salida de las propiedades de cuota de la colección de sitios como una lista simple, como éste:

QuotaID                   : 0
StorageMaximumLevel         : 0
InvitedUserMaximumLevel     : 0
StorageWarningLevel         : 0
UserCodeWarningLevel        : 100
UserCodeMaximumLevel        : 300
UpgradedPersistedProperties :

UserCodeWarningLevel y UserCodeMaximumLevel son las propiedades de dos cuota que controlan el recinto de soluciones. Verá los términos “ código de usuario ” y “ usuario soluciones ” para hacer referencia a código recinto y soluciones en algunas de las páginas de administración y en el modelo de objetos de SharePoint. Estas propiedades le permiten ajustar el número de puntos asignado a cada colección de sitios. También puede ajustar el algoritmo que se utiliza para calcular lo que merece un punto. Puntos se calculan en función de diversas métricas y estas métricas están diseñadas para supervisar el uso de recursos del servidor para reflejar con precisión el estado del servidor es true. SharePoint contiene 14 métricas que contribuyen a los puntos de cuota.

  1. AbnormalProcessTerminationCount
  2. CPUExecutionTime
  3. CriticalExceptionCount
  4. InvocationCount
  5. PercentProcessorTime
  6. ProcessCPUCycles
  7. ProcessHandleCount
  8. ProcessIOBytes
  9. ProcessThreadCount
  10. ProcessVirtualBytes
  11. SharePointDatabaseQueryCount
  12. SharePointDatabaseQueryTime
  13. UnhandledExceptionCount
  14. UnresponsiveprocessCount

Cada métrica, llamado un ResourceMeasure, contiene una propiedad ResourcesPerPoint. El valor de ResourcesPerPoint se divide por los recursos consumidos para calcular los puntos que se utiliza para dicha categoría. Por ejemplo, AbnormalProcessTerminationCount tiene un valor de ResourcesPerPoint de 1. Cada vez que una solución recinto termina de forma anormal, se agrega 1 punto. Si desea aumentar la penalización para una solución recinto que termina, se puede establecer ResourcesPerPoint a otro valor, como 2. Si le no preocupa esta métrica se puede utilizar 0. Otros ResourceMeasures no podrían tener una correspondencia uno a uno con un evento. La métrica de CPUExecutionTime impide que una solución recinto consume demasiados ciclos de CPU. El valor de ResourcesPerPoint predeterminado es 3.600 para CPUExecutionTime.

Otro valor es AbsoluteLimit, que se incrementa cada vez que obtiene de una solución de un punto. Si una solución supera el valor de AbsoluteLimit, se termina incluso si no se ha alcanzado el límite de uso diario. Superar el valor de AbsoluteLimit afecta a sólo la única solución, a diferencia del límite de uso diario. Estos dos niveles de cuotas, límite diario y límite absoluto, funcionan conjuntamente para proteger el estado del conjunto de servidores. Recomiendo encarecidamente que no modificar ResourceMeasures, pero como un desarrollador o administrador, debe comprender exactamente cómo funcionan estos mecanismos.

Aunque SharePoint no proporciona una página de administración para ajustar las métricas de cuota, puede ver y cambiar los valores utilizando el modelo de objetos de SharePoint o Windows PowerShell. La siguiente secuencia de comandos de PowerShell envía 14 todos los objetos de ResourceMeasure de una lista que contiene todas las propiedades para cada objeto ResourceMeasure. Figura 9 muestra el resultado de ejemplo de los dos valores AbnormalProcessTerminationCount y CPUExecutionTime.

[System.Reflection.Assembly]::Load("Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c")
$spusercodeservice = [Microsoft.SharePoint.Administration.SPUserCodeService]::Local
$spusercodeservice.ResourceMeasures

Figura 9 de salida de ejemplo para objetos de ResourceMeasure

MinimumThreshold         : 0
ResourcesPerPoint       : 1
AbsoluteLimit               : 1
Name                    : AbnormalProcessTerminationCount
TypeName                : Microsoft.SharePoint.Administration.SPResourceMeasure
DisplayName                 : AbnormalProcessTerminationCount
Id                  : 878646dd-2460-4e88-83cd-67e938fb069c
Status                  : Online
Parent                  : SPUserCodeService Name=SPUserCodeV4
Version                 : 2308
Properties               : {}
Farm                    : SPFarm Name=SharePoint_Config
UpgradedPersistedProperties     : {}

MinimumThreshold        : 0.1
ResourcesPerPoint       : 3600
AbsoluteLimit               : 60
Name                    : CPUExecutionTime
TypeName                : Microsoft.SharePoint.Administration.SPResourceMeasure
DisplayName              : CPUExecutionTime
Id                  : 418cbb0f-d191-4633-9177-7a4568d11d8d
Status                  : Online
Parent                  : SPUserCodeService Name=SPUserCodeV4
Version                 : 2265
Properties              : {}
Farm                    : SPFarm Name=SharePoint_Config
UpgradedPersistedProperties     : {}

También puede ajustar los valores mediante programación utilizando el modelo de objetos de SharePoint. Puede obtener una referencia al servicio de recinto de seguridad de la propiedad estática denominada a local en el objeto SPUserCodeService y recorrer en iteración la colección ResourceMeasures. Aquí se muestra un ejemplo:

SPUserCodeService userCodeService = 
            SPUserCodeService.Local;

      SPResourceMeasureCollection rmc =
        userCodeService.ResourceMeasures;

      foreach (SPResourceMeasure resourceMeasure in rmc)
      {
        Console.WriteLine(resourceMeasure.Name);
      }

Validando Solutions en el recinto

El marco de trabajo de recinto de seguridad de SharePoint proporciona una forma adicional para los administradores del conjunto supervisar y validar soluciones que se ejecutan en el recinto de seguridad. Los administradores del conjunto de servidores pueden implementar controles de validación de solución que se ejecutan cuando se carga una solución en una galería de soluciones. Por ejemplo, los administradores pueden crear controles de validación que permiten sólo el código firmado con un certificado determinado para ejecutar, o pueden crear un validador para permitir sólo los elementos Web. Otro buen uso de controles de validación es registro y el catálogo de soluciones del conjunto de servidores tal como se activan. Puede ver cómo esta herramienta sencilla pero eficaz ayuda a los administradores del conjunto de obtener un identificador en las soluciones que se ejecuta en el conjunto de servidores.

Cuando se activa una solución, se llama a cada control de validación de la solución. Si se actualiza el control de validación, soluciones se validan la próxima vez que se ejecutan. Crea un validador dentro del proyecto de característica de conjunto de servidores de SharePoint agregando una clase que deriva de SPSolutionValidator. La clase de control de validación debe tener un atributo de System.Runtime.InteropServices.Guid asignado a ella. Puede utilizar la herramienta Crear GUID desde el menú Herramientas de Visual Studio para crear un valor GUID. Este valor se utiliza como la propiedad ProviderID.

A continuación, agregue un constructor que toma una referencia a UserCodeService. Este constructor llama al constructor de clase base, pasando el UserCodeService y un nombre de cadena para el control de validación. En este constructor, debe asignar una “ propiedad para el control de validación de firma". El validador predeterminada que se incluye con Windows utiliza un valor de 1. Si está creando en el ejemplo, puede utilizar 1234. Se utiliza la propiedad de firma por SharePoint para determinar si el control de validación ha cambiado. En un validador de producción, debería este valor se un hash que contiene la información de versión del control de validación.

A continuación reemplazar los métodos ValidateSolution y ValidateAssembly. El método ValidateSolution se llama una vez para cada solución y ValidateAssembly se llama una vez para cada ensamblado en cada solución. El método ValidateSolution se pasa un objeto SPSolutionValidationProperties, que contiene un número de propiedades utilizados para validar la solución. La propiedad más importante es la propiedad Valid. Esta propiedad está establecida en false de forma predeterminada, por lo que se debe establecer en True o la solución se producirá un error de validación. También puede establecer el ValidationErrorMessage y el ValidationErrorUrl para enviar información acerca de por qué una solución se produce un error de validación, y puede utilizar la colección Files para obtener una referencia a todos los archivos en el paquete de solución. La instancia de ValidateAssembly también pasa una referencia a la SPSolutionValidatorProperties junto con un SPSolutionFile, que es una referencia al ensamblado en el paquete de solución. Figura 10 muestra un ejemplo de un validador de solución.

Figura 10 de un validador de soluciones

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint.UserCode;

namespace SandboxSolutionValidator
{
  [Guid("DAC77CB7-7511-4E7E-8427-B6A57C5F49F7")]
    class SandboxSolutionValidator:SPSolutionValidator
    {
    [Persisted]
    List<string> PutSomeStringsHere;

    private const string validatorName = "Sandboxed solution Validator";

    public SandboxSolutionValidator(
      SPUserCodeService userCodeService) :
      base(validatorName, userCodeService)
    {
      this.Signature = 1234;
    }

    public override void ValidateSolution(
      SPSolutionValidationProperties properties)
    {
      //System.Diagnostics.Debugger.Launch();
      base.ValidateSolution(properties);
       
      //Determine whether the solution is valid
      properties.Valid = true;

      //Iterate over each file in the solution
      foreach (SPSolutionFile file in 
                properties.Files) { }

      //Set the error message and Url if it’s not valid
      properties.ValidationErrorMessage =
        "The solution is not valid";
      properties.ValidationErrorUrl =
        "http://moss.Contoso.com/MyErrorPage.apx";
    }

    public override void ValidateAssembly(
      SPSolutionValidationProperties properties, 
      SPSolutionFile assembly)
    {
      //System.Diagnostics.Debugger.Launch();
      base.ValidateAssembly(properties, assembly);

      properties.Valid = true;
    }
    }
}

Debe agregar el control de validación de la solución a la colección SPUserCodeService SolutionValidators. Puede hacerlo mediante el uso de Windows PowerShell, pero es la forma recomendada implementar el control de validación mediante la característica conjunto de servidores. En la característica, utilice un receptor de la característica para agregar el control de validación a la colección. En el evento FeatureActivated (consulte de figura 11), obtener una referencia a SPUserCodeService del conjunto de servidores. Utilice el SPUserCodeService para crear una instancia de su control de validación y, a continuación, agregar la instancia a la colección de SolutionValidators del UserCodeService. Estas operaciones pueden ser un poco difíciles de depurar, pero puede agregar los comandos Debugger.Launch al código. Esto inicia una instancia de Visual Studio y asocia el código al proceso correcto. Asegúrese de que quitar estos comandos cuando haya terminado de desarrollar el control de validación.

Figura 11 de implementar un validador

public override void FeatureActivated(
        SPFeatureReceiverProperties properties)
    {
      //System.Diagnostics.Debugger.Launch();

      SPUserCodeService userCodeService =
            SPUserCodeService.Local;

      SPSolutionValidator validator = new SandboxSolutionValidator(userCodeService);

      userCodeService.SolutionValidators.Add(
            validator);
    }

Puede usar PowerShell para enumerar los controles de validación que están instalados en el conjunto de servidores, que es una forma rápida de los administradores comprobar qué controles de validación están instalados. La versión preliminar técnica de SharePoint 2010 se distribuye con un control de validación de la solución predeterminada. Este validador no hace nada distinto de conjunto de la propiedad válida en True. Escriba la siguiente secuencia de comandos de PowerShell para enumerar los validadores instalados. Puede ver el resultado en figura 12.

[System.Reflection.Assembly]::Load(
"Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c");
$spusercodeservice = [Microsoft.SharePoint.Administration.SPUserCodeService]::Local;
$spusercodeservice.solutionvalidators;


Figura 12 de instalado Validators de la solución

Ha visto un pequeño ejemplo de cómo crear, implementar y validar el código de recinto de seguridad en su conjunto de servidores. Este ejemplo debe permitirle crear código de validación enriquecido e interesantes que proporciona el conjunto de servidores con una gran flexibilidad y seguridad.

Recinto de seguridad es la predeterminada

Como mencioné anteriormente, el tipo de proyecto de SharePoint predeterminado en Visual Studio es una solución recinto. Esto debe ser el predeterminado en su cuenta también, que debe ser pensando acerca de cómo crear soluciones de SharePoint para ejecutar dentro del entorno de recinto de seguridad. Ha visto que las aplicaciones de recinto son muy capaces, puede hacer la mayoría de las tareas que necesita un usuario empresarial y ofrecen la posibilidad de dividir de manera segura cuando se necesita. La ventaja real es la velocidad a la que puede implementar sus soluciones a la empresa. Ya no necesite seguir un proceso de grueling de pruebas y validación para cada solución crear, aunque siempre se deben seguir las prácticas de buen software. Los administradores de la colección de sitios podrán controlar sus propias colecciones y ejecutar las soluciones derecha para su sitio. Estarán libres de las tareas de controlar los administradores del conjunto de servidores y administrar todas las solicitudes para solución instala y pueda centrarse en el estado general del conjunto de servidores con un conjunto de herramientas de supervisión enriquecido.

Al final, predecir que verá una expansión de soluciones de SharePoint. Verá un aumento del número de soluciones empresariales escrito e implementado y un enorme aumentar en la comunidad de SharePoint porque soluciones será más fácilmente disponibles y fácil de buscar, instalar y ejecutar.

Paul Stubbs es un evangelista técnico Microsoft para SharePoint y Office que se centra en la comunidad de desarrollo de trabajo de información para Office y SharePoint, Silverlight y Web 2.0 redes sociales. Ha escrito varios artículos para de MSDN Magazine y tres libros sobre el desarrollo de soluciones con Microsoft Office, SharePoint y Silverlight. También haya hablado en conferencias de Microsoft Tech-Ed y TechReady. Además, Paul ha trabajado como administrador de programas senior con Visual Studio Tools para Office equipo en Redmond, Washington. Leer su blog en blogs.msdn.com/pstubbs de.