Ignite når sandlådenivå
För att blidka BOFH-typer världen över har Microsoft tagit fram en sandlåda för utvecklare till SharePoint 2010. Sandboxed Solution är rubriken, och det handlar om en ny typ av solutions i vilka man har begränsade möjligheter (att göra fel och fula saker).
Vad består då sandboxen av? Jo det är en separat process som körs som en windows service på en maskin i farmen, det kan vara på en WFE eller på någon annan maskin om man vill balansera last. Denna User Code-service (user code är ett nytt begrepp som betyder kod som körs i sandbox med de begränsade rättigheter det innebär) kommunicerar med w3wp-processen på frontenden som tar emot requesten och sedan körs koden i sandboxprocessen.
För att illustrera med ett exempel: Jag startar upp ett Visual Studio 2010-projekt, väljer Empty Project under SharePoint 2010-mallarna, väljer att det ska deployas som Sandboxed solution. Sedan lägger jag in en webpart i projektet och kodar någon funktionalitet i den. När jag sedan deployar min webpartsolution, så hamnar själva wsp:n på filsystemet i en solutionsfolder, och inne i SharePoint finns den med i det nya Galleriet för solutions.
När jag sedan smackar in min webpart på en webpartsida (eller en icke-webpartsida, för det kan man också göra nu) så är det i själva verket inte min webpart som ligger där, utan en proxy som kommer kommunicera med den webpartkod som exekverar i sandboxen.
Webpartkoden ligger alltså i en dll på filsystemet som sandboxprocessen kan komma åt, den objektmodell-kod min webpart använder då den kör i sandboxen är inte den fulla objektmodellen heller, utan en strypt version som visserligen innehåller alla objekt, metoder och properties, men som kastar exceptions om man försöker göra nåt otillåtet (som nåt med SPSecurity t.ex.). Det är alltså en runtimegrej, jag kan koda saker som är sandbox no-no:s i min webpart och få den att kompilera även om min solution är märkt som sandboxed. Jag tror att de försökt i VS att strypa ner intellisense för sandboxed solutions så att man får nån slags indikation på att en RunWithElevatedPrivileges t.ex. inte ‘finns’ i sandbox-kontext.
Jaha, men vadå? Ingen kommer ju använda sandboxed solutions om priset är att man är begränsad i vad man kan göra till att bara kunna jobba mot sharepointobjekt (som den anropande användaren har permissions på) från SPSite-nivå och neråt?
Jo, det finns en poäng till – monitorering. Sandboxed solutions kan monitoreras och det går att se vad de tar upp i fråga om serverresurser, så det går att tilldela quotas av serverresurser till olika solutions och sätta regler där en solution kan blockas om den kommer upp i ett visst antal poäng, (en poäng kan t.ex. ges för att ens kod inte hanterar ett kastat exception).
Jag har inte riktigt bestämt mig vad jag tycker än, man ska ju se vilken overhead sandbox-lagret ger och så också. Men jag tror helt klart att Sandboxed solutions kommer vara ett hett diskussionsämne när 2010 börjar spridas.
