• home
    • news & events
    • blog
  • über uns
    • projekte und referenzen
    • partner
    • produkte & technologien
    • offene jobs / stellen
    • veröffentlichungen
  • dienstleistungen & services
    • software design & architektur
    • software entwicklung
    • beratung / consulting
    • training, kurse und workshops
  • angebote
    • quick-starts
    • trainings und kurse
    • modulare sharepoint 2010 workshops
  • kontakt
"Wir sprechen SharePoint."
In Code und Klartext.
Seit über 100 Jahren.
Diesen Blog abonnieren
Subscribe in NewsGator Online Add to My AOL
Add to Google Reader or Homepage Add to netvibes

Aktuelle Posts

Ribbon Designer für SharePoint und Office365
Mapping Boolean Properties in a Custom Nintex Workflow Action
SharePoint Designer, Literals und das __designer:Preview Ärgernis
Spellcheck: Anpassen (Customizing) des Content Editors
Access Services - the Big Picture

Archiv

Mai 2012 (1)
April 2012 (5)
März 2012 (5)
Februar 2012 (7)
Januar 2012 (4)
Dezember 2011 (2)
November 2011 (10)
September 2011 (3)
August 2011 (7)
Juli 2011 (1)
Juni 2011 (3)
Mai 2011 (6)
April 2011 (5)
März 2011 (8)
Februar 2011 (8)
Januar 2011 (4)
Dezember 2010 (5)
November 2010 (7)
September 2010 (6)
August 2010 (2)
Juli 2010 (11)
Juni 2010 (13)
Mai 2010 (11)
April 2010 (4)
März 2010 (6)
Februar 2010 (2)
Januar 2010 (6)
Dezember 2009 (4)
November 2009 (13)
Oktober 2009 (17)
September 2009 (2)
Juli 2009 (2)
März 2009 (2)
Januar 2009 (1)

1stQuad ist Microsoft Certified Gold Partner und bietet SharePoint und .NET Produkt- und Projekt-Kompetenz, -Erfahrung und -Know-How für Entwicklung, Architektur, Beratung, Schulung, Training und Kurse in Schweiz sowie Deutschland und Östereich.
1stQuad ist MatchPoint Partner und bietet MatchPoint Produkt- und Projekt-Kompetenz, -Erfahrung und -Know-How für Entwicklung, Architektur, Beratung, Schulung, Training und Kurse in Schweiz sowie Deutschland und Östereich.
1stQuad ist Nintex Partner und bietet Nintext SharePoint Workflows Produkt- und Projekt-Kompetenz, -Erfahrung und -Know-How für Entwicklung, Architektur, Beratung, Schulung, Training und Kurse in Schweiz sowie Deutschland und Östereich.
1stQuad ist Balesio Gold Partner und bietet SharePoint FILEMinimizer Produkt- und Projekt-Kompetenz, -Erfahrung und -Know-How für Entwicklung, Architektur, Beratung, Schulung, Training und Kurse in Schweiz sowie Deutschland und Östereich.
1stQuad Solutions ist Kentico Certified Solution Partner und bietet Produkt- und Projekt-Kompetenz, -Erfahrung und -Know-How für Entwicklung, Architektur, Beratung, Schulung, Training und Kurse in Schweiz sowie Deutschland und Östereich.
© 2011 1stQuad Solutions
Alle Rechte vorbehalten
> Impressum
Wir bieten Microsoft SharePoint und .NET Projekt- und Produkt-Know-how, Kompetenz und Erfahrung für Entwicklung, Architektur, Beratung, Schulung, Training und Kurse in Zürich, Bern, Basel, Schweiz sowie Deutschland und Östereich.

Blog > April 2010

Sandboxed Solution Validator - Beispiel und Download

Sandboxed Solutions sind ein neuer Erweiterungs-Typ, mit dem mehr Funktionalität einfach in Microsoft SharePoint Server 2010 eingebracht werden können. Damit die als Sandboxed Solution installierten WSP-Dateien respektive deren Inhalte vor der Aktivierung noch individuelle geprüft werden können stellt Microsoft die Klasse SPSolutionValidator zur Verfügung. Dieser Beitrag zeigt anhand eines in der Praxis durchaus nütlichen Beispiels, wie man einen Solution Validator entwickelt.

Veröffentlicht am 02.04.2010 07:41:48 von Michael Hofer mit 0 Kommentar(en)

Sandboxed Solutions lassen sich, sofern sie nach den vorgegebenen Regeln entwickelt wurden, sehr einfach in einer Microsoft SharePoint Server 2010 Site Collection durch einen Site Collection Administrator installieren und aktivieren. Dabei sind keine Farm-Administratoren, kein STSADM und auch keine Power-Shell Scripts nötig. Ich möchte in diesem Beitrag aber nicht auf die Natur der Sandboxed Solutions eingehen (dies werde ich am nächtsten Mittwoch, 7.4.2010 anlässlich der TechDays in Basel machen), sondern mich auf die Möglichkeit konzentrieren, Sandboxed Solutions aus (Farm-)Administratoren-Sicht zu validieren.

Stellen wir uns folgendes Szenario vor: In einer grossen Firma können Site Collection Administratoren Sandboxed Solutions auf Ihren Team- oder Projekt-Sites installieren um damit die out-of-the-box Funktionalität und damit auch der Geschäftsnutzen von SharePoint 2010 zu erhöhen. Die IT-Abteilung hat dazu zwar ihren Segen erteilt, möchte aber, dass die installierten Sandboxed Solutions vorgängig bei der IT eingereicht werden, so dass sie reviewed, registriert und allenfalls auch anderen zur Verfügung gestellt werden können. Nach der Prüfung signiert die IT-Abeitlung das Sandboxed-Solution SharePoint Projekt mit der IT-Signatur. Oder noch einfacher: Eine Firma möchte nur Sandboxed Solutions installiert haben, welche mit ganz bestimmten Signaturen versehen sind - z.B. nur soclhe von internen Entwicklungsteams.

Dieses Szenario ist ein gutes Beispiel für den Einsatz von Sandboxed Solutions Validatoren, welche durch die Klasse SPSoludionValidator implementiert werden können. Wir erstellen deshalb ein neues (leeres) SharePoint-Projekt in Visual Studio 2010 und fügen ihm eine Klasse hinzu:

[Guid("8C5A5EF6-2FAB-49e9-B98F-B1D6992077D3")]
public class PublicKeyTokenSolutionValidator : SPSolutionValidator
{
    public const string InternalName = "PublicKeyTokenSolutionValidator";
   
    public PublicKeyTokenSolutionValidator() { }

    public PublicKeyTokenSolutionValidator(SPUserCodeService sandboxService) :
        base(InternalName, sandboxService)
    {
        Signature = 100; // Change this number if newer version with changed code is deployed!
    }
}


Wichtig ist, dass wir das GUID-Attributt hinzufügen sowie dass wir einen Konstruktor ohne Parameter für die Serialisierung verwenden. Zudem müssen wir den überladenen Konstruktor der Bais-Klasse implementieren. Die Angabe einer Signatur ist hier ebenfalls zu empfehlen: Wir der Code des Validators einmal geändert oder erweitert können wir über die Signatur diese Veränderung dem SPSolutionManager mitteilen.

SPSolutionValidator hat im Wesentlichen 2 für die Validation interessante Methoden:

public override void ValidateSolution(SPSolutionValidationProperties properties)

public override void ValidateAssembly(SPSolutionValidationProperties properties, SPSolutionFile assembly)


Wichtig zu wissen ist hier, dass die beiden Methoden nacheinander (in der angegebenen Reihenfolge) aufgerufen werden. Dies ist deshalb wichtig, weil in den ValidationProperties die Eigenschaft Valid als false in die erste Methode kommt. Wird die Eigenschaft nicht explizit auf Valid=true gestellt, bricht der SPSolutionValidatorManager ab und es wird eine Fehlermeldung angezeigt. Dies kann sehr verwirrend sein: Ich habe zuerst nur die 2. Methode überschrieben - diese wurde aber nie aufgerufen und es kam immer eine Fehlermeldung! Ich musste explizit die erste Methode ebenfalls überschreiben um Valid=true einzustellen!

Nun aber weiter im Text: Wir möchten sicherstellen, dass die installierte Solution mit einer bestimmten Signatur versehen ist. Hierzu vergleichen wir das Public-Key Token des SPSolutionFile mit den von uns vorgegebenen. In diesem Beispiel ist dies einfache eine Konstante:

protected const string AcceptedPublicKeyToken = "421000e22d61e868";

public override void ValidateSolution(SPSolutionValidationProperties properties)
{
    properties.Valid = true; // Important!
}

public override void ValidateAssembly(SPSolutionValidationProperties properties, SPSolutionFile assembly)
{
    properties.Valid = true;

    if (assembly == null)
        return;

    Assembly solutionAssembly = Assembly.Load(assembly.OpenBinary().ToArray());
    if (!AcceptedPublicKeyToken.Equals(GetAssemblyPublicKeyToken(solutionAssembly), StringComparison.InvariantCultureIgnoreCase))
    {
        properties.Valid = false;
        properties.ValidationErrorMessage = "Assembly is not signed from an allowed authority. Please contact XYZ...";
        properties.ValidationErrorUrl = "/_layouts/TechDays.SandboxedSolutions.Validators/InvalidPublicKeyTokenSolution.aspx";
    }
}

private string GetAssemblyPublicKeyToken(Assembly assembly)
{
    Byte[] pktBytes = assembly.GetName().GetPublicKeyToken();
    return string.Concat(pktBytes.Select(pktByte => pktByte.ToString("x2")).ToArray());
}


In meinem Beispiel verweise ich auf eine Application-Page, welche die Fehlerseite anzeigt. Diese ist im Projekt, welches ich weiter unten zum Download bereitgestellt habe enthalten, für diesen Beitrag aber nicht weiter relevant.

Zuletzt müssen wir den fertigen SPSolutionValidator noch in der SharePoint Farm registrieren. Hierfür habe ich ein neues Farm-Scoped Feature in das SharePoint-Projekt eingefügt und einen Event-Receiver für das Feature hinzugefügt. Und so wird der SPSolutionValidator bei der Feature-Aktivierung und -Deaktivierung (de-)registriert:

[Guid("39869cfb-c812-45e1-be80-e723acf2d0a2")]
public class TechDaysSolutionValidatorsEventReceiver : SPFeatureReceiver
{
    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        SPUserCodeService sandboxService = SPUserCodeService.Local;
        SPSolutionValidator publicKeyTokenSolutionValidator = new PublicKeyTokenSolutionValidator(sandboxService);
        sandboxService.SolutionValidators.Add(publicKeyTokenSolutionValidator);
    }

    foreach (PublicKeyTokenSolutionValidator activePktValidator in

sandboxService.SolutionValidators.OfType<PublicKeyTokenSolutionValidator>())
    {
        sandboxService.SolutionValidators.Remove(activePktValidator.ProviderId);
    }
    sandboxService.Update();
}


Nun kann die SharePoint-Solution installiert werden und sobald das Farm-Scoped Feature aktiviert ist werden alle Sandboxed-Solutions zusätzliche auf die Signator der darin enthaltenen Assemblies überprpüft:

1stQuad-SharePoint-2010-Sandboxed-Solutions-SPSolutionValidator.png

Die vollständige SharePoint-Solution (mit Visual Studio 2010 RC1 erstellt) kann hier heruntergeladen werden. .Ich bedanke mich herzlich bei Tobias Zimmergren und seinem ausführlichen Beitrag mit Beispiel, welcher mit die Arbeit sehr erleichtert hat.

Microsoft SharePoint Server 2010 Sandboxed Solutions sind eine enorme Bereicherung! Auch wenn das riesige Potenzial solcher Lösungen sicherlich noch nicht ganz ausgeschüpft ist (z.B. im Bereich der Einschränkungen im Obejtkmodell, dem beschränkten Monitoring und der "erfinderischen" Berechnung der verbrauchten Ressourcen), so eröffnen Sandboxed Solutions Entwicklern, Administratoren und Benutzern gleichermässig völlig neue Perspektiven um Geschäftslösungen in SharePoint einzubringen.


Kommentar
Dieser Blog-Eintrag wurde noch nicht kommentiert.
Kommentar hinterlassen



 Security code
Zurück, Seite drucken