SharePoint special | december 2009 23 Sandboxed Solutions: maatwerk in SharePoint JUIST SHAREPOINT - BEHEERDERS PROFITEREN HIERVAN Robert Jaakke SharePoint Solutions is de magische term wanneer je spreekt over deploy- ment van Features, Site definitions, Assemblies of andere maatwerkoplossin- gen in SharePoint. SharePoint 2010 doet hier nog een schepje bovenop door het mogelijk te maken om als site administrator een SharePoint Solution uit te rollen binnen een Site Collection. De gemiddelde SharePoint-beheerder is zich misschien een rolberoerte geschrokken bij het lezen van de inleiding maar juist deze groep mensen gaat van Sandboxed Solutions profiteren. Door een Solution uit te rollen als een Sandboxed Solution zorg je er namelijk voor dat de Farm stabiel blijft ook als deze stinken- de User Code bevat. Sandboxed Solutions worden beheerd op Farm-niveau en krijgen een quotum toegewezen voor het aantal resources dat ze kunnen gebruiken. Zijn de resources op dan krijgt de gebruiker netjes een melding dat hij de volgende dag te- rug kan komen. Webparts die meer dan dertig seconden nodig hebben om hun taken uit te voeren worden automatisch gestopt. Een andere belangrijke eigenschap is dat Sandboxed Solutions in een geïsoleerd proces draaien, dit is om te voorkomen dat Sand- boxed Solutions de hele Farm neerhalen. Developers worden door de Sandbox dus gedwongen om goede code te schrijven en daar- om is volgens Microsoft de Sandboxed Solution de preferred so- lution. De User Code Service Om te beginnen moet eerst de User Code Service gestart worden op elke server binnen de Farm die Sandboxed Solutions moet gaan uitvoeren. Deze Service faciliteert het Sandbox Worker Process en kan gezien worden als een soort service host. De User- Code Service is een nieuwe service in SharePoint 2010 en is on- derhuids eigenlijk een Service Application (net als Search, Excel Services, Managed Metadata Service). Zoals misschien bekend zijn Service Application’s de nieuwe SSP. De architectuur van de Service Applications zorgt ervoor dat deze volledig schaalbaar is. Deze eigenschap heeft de User Code Ser- vice dus ook. De User Code service kan bijvoorbeeld draaien op alle web front-end servers maar het is ook mogelijk om dedicated servers op te nemen in de Farm voor optimale performance en stabiliteit. Dit laatste kom je in de praktijk alleen tegen bij hele grote SharePoint-omgevingen of in Shared Hosting omgevingen zoals bijvoorbeeld SharePoint Online. De User Code Service bestaat uit drie processen: User Code Service (SPUCHostService.exe) • Sandbox Worker Process (SPUCWorkerProcess.exe) • Sandbox Worker Process Proxy (SPUCWorkerProcessProxy. • exe)
5
Embed
Sandboxed Solutions: maatwerk in SharePointbiplatform.nl/magazines/Aveq/116607.pdf · Sandboxed Solutions: maatwerk in SharePoint JUIST SHAREPOINT-BEHEERDERS PROFITEREN HIERVAN Robert
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
SharePoint special | december 2009 23
Sandboxed Solutions: maatwerk in SharePointJUIST SHAREPOINT-BEHEERDERS PROFITEREN HIERVAN
Robert Jaakke
SharePoint Solutions is de magische term wanneer je spreekt over deploy-
ment van Features, Site definitions, Assemblies of andere maatwerkoplossin-
gen in SharePoint. SharePoint 2010 doet hier nog een schepje bovenop door
het mogelijk te maken om als site administrator een SharePoint Solution uit te
rollen binnen een Site Collection.
De gemiddelde SharePoint- beheerder is zich
misschien een rolberoerte geschrokken bij het lezen van de
in leiding maar juist deze groep mensen gaat van Sandboxed
Solutions profiteren.
Door een Solution uit te rollen als een Sandboxed Solution zorg
je er namelijk voor dat de Farm stabiel blijft ook als deze stinken-
de User Code bevat. Sandboxed Solutions worden beheerd op
Farm-niveau en krijgen een quotum toegewezen voor het aantal
resources dat ze kunnen gebruiken. Zijn de resources op dan
krijgt de gebruiker netjes een melding dat hij de volgende dag te-
rug kan komen. Webparts die meer dan dertig seconden nodig
hebben om hun taken uit te voeren worden automatisch gestopt.
Een andere belangrijke eigenschap is dat Sandboxed Solutions in
een geïsoleerd proces draaien, dit is om te voorkomen dat Sand-
boxed Solutions de hele Farm neerhalen. Developers worden door
de Sandbox dus gedwongen om goede code te schrijven en daar-
om is volgens Microsoft de Sandboxed Solution de preferred so-
lution.
De User Code ServiceOm te beginnen moet eerst de User Code Service gestart worden
op elke server binnen de Farm die Sandboxed Solutions moet
gaan uitvoeren. Deze Service faciliteert het Sandbox Worker
Process en kan gezien worden als een soort service host. De User-
Code Service is een nieuwe service in SharePoint 2010 en is on-
derhuids eigenlijk een Service Application (net als Search, Excel
Services, Managed Metadata Service).
Zoals misschien bekend zijn Service Application’s de nieuwe SSP.
De architectuur van de Service Applications zorgt ervoor dat deze
volledig schaalbaar is. Deze eigenschap heeft de User Code Ser-
vice dus ook. De User Code service kan bijvoorbeeld draaien op
alle web front-end servers maar het is ook mogelijk om dedicated
servers op te nemen in de Farm voor optimale performance en
stabiliteit. Dit laatste kom je in de praktijk alleen tegen bij hele
grote SharePoint-omgevingen of in Shared Hosting omgevingen
zoals bijvoorbeeld SharePoint Online.
De User Code Service bestaat uit drie processen:
User Code Service (SPUCHostService.exe)•
Sandbox Worker Process (SPUCWorkerProcess.exe)•
Sandbox Worker Process Proxy (SPUCWorkerProcessProxy.•
exe)
SharePoint
Integration
Content
Business-intelligence
Collaboration
Architecture
Web
E-forms
Kennispartij voor SharePointTraining & coaching op intranet / internet oplossingen
Meer info vind je op www.class-a.nl
24 SharePoint special | december 2009
De subset van Microsoft.SharePointHet Sandbox Worker Process is verantwoordelijk voor het uit-
voeren van de code in een Sandboxed Solution en zorgt er ook
voor dat alle code netjes binnen de grenzen blijft opereren. De
grenzen binnen het SPUCWorkerProcess.exe worden bepaald
door de beschikbare classes. Binnen het SPUCWorkerProcess.
exe heeft de developer de beschikking over een subset van de
Microsoft.SharePoint namespace. In namspaces zoals Microsoft.
SharePoint.Administration heeft de code van een Sandboxed
Solution natuurlijk niks te zoeken. Het doel van de Sandbox is
immers stabiliteit en de code van een Sandboxed Solution mag
dan niet zelf zijn quota aanpassen om toch net even die ‘dure’ ope-
ratie uit te kunnen voeren. Met deze subset van Microsoft.Share-
Point zullen de meeste developers goed uit de voeten kunnen bij
het ontwikkelen van hun maatwerk.
Hier volgt een opsomming van de beschikbare classes:
Microsoft.SharePoint behalve•
- SPSite constructor
- SPSecurity object
- SPWorkItem and SPWorkItemCollection objects
- SPAlertCollection.Add method
- SPAlertTemplateCollection.Add method
- SPUserSolution and SPUserSolutionCollection objects
- SPTransformUtilities
Microsoft.SharePoint.Navigation•
Microsoft.SharePoint.Utilities behalve•
- SPUtility.SendEmail method
- SPUtility.GetNTFullNameandEmailFromLogin method
Microsoft.SharePoint.Workflow•
Microsoft.SharePoint.WebPartPages behalve•
- SPWebPartManager object
- SPWebPartConnection object
- WebPartZone object
- WebPartPage object
- ToolPane object
- ToolPart object
Ben je geïnteresseerd in de complete lijst van de beschikbare
classes? Raadpleeg dan de SDK.
Hoe werkt het in Visual Studio 2010?Bij het aanmaken van een nieuwe SharePoint Solution in Visual
Studio 2010 kun je de vraag krijgen wat het Trust Level moet
zijn. Hierbij is er keuze uit een Sandboxed Solution of een Farm
Solution. Het enige zichtbare verschil tussen deze twee solutions
is dat de eigenschap Sandboxed Solution op True staat in de ei-
genschappen van de Visual Studio Solution en de regel [assembly:
AllowPartiallyTrustedCallers()] in het bestand AssemblyInfo.cs
van elk project. Voor het debuggen van een Sandboxed Solution
moet de debugger attached worden aan het SPUCWorkerPro-
cess.exe. In Visual Studio 2010 is dit met de nieuwe SharePoint
tools zo simpel als op F5 drukken en wachten tot er een break-
point geraakt wordt. Visual Studio zal eerst een eventuele aanwe-
zige versie van solution retracten, de solution opnieuw deployen
en daarna automatisch attachen aan SPUCWorkerProcess.exe.
DeploymentDe uitrol van een Sandboxed Solution vindt plaats in de Solution
Gallery op Site Collection niveau. De Solution Gallery is een spe-
SharePoint special | december 2009 24
(Advertentie)
SharePoint special | december 2009 25
Het beheer van Sandboxed SolutionsHet beheer van de User Code Service en de Sandbox vindt plaats
in Central Administration. Hier kan de beheerder quota instellen
als blijkt dat de standaardwaarden niet voldoende zijn. Solutions
die keer op keer problemen veroorzaken kunnen geblokkeerd
worden en de Load Balancing kan ingeregeld worden.
Resources quota’s worden gemeten aan de hand van veertien ver-
schillende waarden. Zo is bijvoorbeeld één AbnormalProcessTer-
mination een punt, tien Citical Exceptions een punt en vijf minu-
ten CPU Time een punt. Het mooie is dat deze waarden naar
eigen behoeften aangepast kunnen worden. Denk hier wel eerst
goed over na, want deze waarden zijn niet willekeurig gekozen
door de mensen van Microsoft. Het is dus beter om eerst de quo-
ta-instellingen voor Sandboxed Solutions aan te passen.
De beheerder kan ook de Load Balancing instellen voor de User
Code Service. Voor Load Balancing kan er gekozen worden uit
twee opties: Local Mode en Remote Mode. Bij Local Mode wordt
alle User Code uitgevoerd op de server waar het request op bin-
nen is gekomen. Dit zal qua performance iets beter werken, maar
kan problemen opleveren als er veel Solutions zijn. Bij Local
Mode moet de User Code Service op alle web front-end servers
gestart zijn. Bij de optie Remote Mode zal de User Code uit
gevoerd worden op een beschikbare server waar de User Code
Service op gestart is.
Code Access Security en de fully-trusted ProxyNog even terug naar het Sandbox Worker Process. Dit proces
heeft namelijk ook zijn eigen Code Access Security (CAS) Policy.
De CAS policy heeft een API blocklist en hiermee kan de beheer-
der de beschikbare API’s nog verder beperken. Let op, de stan-
daard Subset van Microsoft.SharePoint namespace kan niet ver-
der beperkt worden. De CAS policy wordt bijgehouden in de file
‘%Program Files%\Common Files\Microsoft Shared\web server
extensions\14\CONFIG\wss_usercode.config’.
In deze CAS Policy worden standaard de volgende drie permis-
sies verleend:
SharePointPermission.ObjectModel•
SecurityPermission.Execution•
AspNetHostingPermission = Minimal•
Op het eerste gezicht lijkt dit redelijk kansloos, want met zo’n
permissie set kom je niet veel verder dan een ‘Hello World’ web-
part. Neem bijvoorbeeld een webpart die weer informatie van het
internet op wil vragen. Klinkt redelijk onschuldig, maar zonder
WebPermission gaat het niet lukken. Gelukkig snappen de men-
sen van Microsoft dat ook en is er een oplossing voor dit pro-
bleem bedacht. Het is namelijk mogelijk om een fully-trusted
Proxy Class te schrijven om toegang te krijgen tot resources die
ciale SharePoint-lijst en is te vinden in de RootWeb van de Site
Collection. Hier vind het beheer plaats en kunnen solutions geüp-
load, geactiveerd en gedeactiveerd worden. Ook staat hier een
overzicht van de door de Solutions verbruikte resources en het ge-
middelde verbruik van resources van de afgelopen veertien dagen.
Na het activeren zullen eventuele Site Scoped Features van de So-
lution automatisch geactiveerd worden, Web Scoped Features
moeten handmatig geactiveerd worden. De Solution Gallery is te
vinden onder Site Actions->Site Settings->Galleries->Solutions.
Wat wel en wat niet!Omdat Sandboxed Solutions niet op Farm-niveau uitgerold wor-
den, maar op Site Collection Niveau kan niet alles opgenomen
worden in de solution. Er kan bijvoorbeeld niets uitgerold worden
in de 14 hive en dit betekent dus, geen Application Pages, geen
Site Definitions, geen Resource Files, etc. Op zich niet gek, want
in een Shared Hosting omgeving mag de klant niet zomaar be-
standen wegschrijven in de 14 hive.
Hier volgt een lijstje van de oplossingen die in een SandBoxed So-
lution opgenomen kunnen worden:
Content Types, Site Columns•
Custom Actions•
Declarative Workflows•
Event Receivers, Feature Receivers•
InfoPath Forms Services (not admin-appr)•
JavaScript, AJAX, jQuery, Silverlight•
List Definitions•
Non-visual web parts•
Site Pages•
Helaas is de Visual Webpart niet beschikbaar voor Sandboxed
Solutions, dit heeft te maken met de manier waarop Visual
Webparts geladen worden.
26 SharePoint special | december 2009
buiten de policy vallen. Een Proxy Class moet op Farm-niveau
uitgerold worden en kan vervolgens door iedereen binnen de farm
gebruikt worden. gebbr iuikkt wordden.
De code van een fully-trusted proxy wordt opgebouwd uit twee
classes. De eerste class erft van de SPProxyOperationArgs class
en de tweede class erft van de SPProxyOperation class. Deze twee
SharePoint classses zitten in de Microsoft.SharePoint.UserCode
namespace. De class die erft van SPProxyOperationArgs is eigen-
lijk niks meer dan een class om argumenten te definiëren die
doorgegeven moeten worden aan de proxy. Hier volgt een voor-
beeld van een SPProxyOperationArgs class.
[assembly: AllowPartiallyTrustedCallers()]
namespace FullTrustWeather.ProxyArgs
{
[Serializable]
public class GetWeatherReportProxyArgs : SPProxyOperationArgs
{
public DateTime ReportDate { get; set; }
public GetWeatherReportProxyArgs(DateTime ReportDate)
{
this. ReportDate = ReportDate;
}
}
}
Deze class moet Serializable zijn en AllowPartiallyTrustedCallers
moet aangezet zijn, omdat de class tussen Trust Domains gebruikt
gaat worden. Verder heeft de class een constructor method en een
property. Niet heel erg spannend dus. De class die erft van SP-
ProxyOperation is de ontvanger van de SPProxyOperationArgs.
public class GetWeatherProxyOps : SPProxyOperations
{
public override object Execute(SPProxyOperationArgs args)
{
if (args != null)
{
GetWeatherReportProxyArgs proxyArgs = args as GetWeather-
ReportProxyArgs;
DateTime reportDate = proxyArgs. ReportDate;
List<string> results = new List<string>;
// Code here to get weather…..
return results;
}
return null;
}
}
(Advertentie)
SharePoint special | december 2009 27
Solution ValidationEen laatste belangrijke mogelijkheid is dat er naast de mogelijk-
heid om solutions te blokkeren ook de mogelijkheid is om soluti-
ons te valideren voordat ze toegelaten worden. In de namespace
Microsoft.SharePoint.UserCode vinden we de class SPSolution-
Validator. Deze class biedt de mogelijkheid voor validatie.