Best practices with SharePoint 2010 Sandboxed Solutions
Toni FrankolaSharePoint Services MVP, Croatia
http://[email protected]@ToniFrankola
About speaker…
Agenda
• Intro to SharePoint SandBoxed solutions• SandBoxed solutions for DEVs• SandBoxed solutions for IT PROs• Demo
The problem in v2007 (1)
• Case study:– A Customer wants to use WSS 3.0 for group
collaboration in hosting environment…– …with Custom permissions, views, web-parts
• Your only option for hosted WSS 3.0:– SP Designer 2007 + Javascript (JQuery)
The problem in v2007 (2)
• In non-hosted environments:– Using GAC or Full-trust for everything– One webpart could jeopardize entire farm• „Performance Issues” with entire farm
The solution
SandBoxed Solutions
• Isolated SP process (User Code Service)
• Exposes a subset of Microsoft.SharePoint namespace
• Managed via Site Coll. Solutions gallery
HELLO WORLD FROM SANDBOXED SOLUTION
DEMO
SANDBOXED SOLUTIONS - DEV PERSPECTIVE
How stuff works
Worker Service(SPUCWorkerProcess.exe)
Full Object Model
Host Services (SPUCHostService.exe)
Execution Manager(Inside Application Pool)
Subset Object Model
Untrusted Code
IIS(WPW3.EXE)
FRONT END BACK END
Subset-Model RequestFull-Model
Request
Supported in Sandboxed Solutions
• Web Parts (no Visual WPs)• Lists• List Templates• Custom Actions• Workflows• Event Receivers• Content Types• Site Columns• …Source: http://msdn.microsoft.com/en-us/library/ff872402.aspx
Supported API• All of the Microsoft.SharePoint namespace, except:
– SPSite constructor– SPSecurity object– SPWorkItem and SPWorkItemCollection objects– SPAlertCollection.Add method– SPAlertTemplateCollection.Add method– SPUserSolution and SPUserSolutionCollection objects– SPTransformUtilities object– Microsoft.SharePoint.Navigation namespace
• All of the Microsoft.SharePoint.Utilities namespace, except– SPUtility.SendEmail method– SPUtility.GetNTFullNameandEmailFromLogin method– Microsoft.SharePoint.Workflow namespace
• All of the Microsoft.SharePoint.WebPartPages namespace, except– SPWebPartManager object– SPWebPartConnection object– WebPartZone object– WebPartPage object– ToolPane object– ToolPart object
Source: http://msdn.microsoft.com/en-us/library/ff872402.aspx
BP1 – Proper Tools
• Visual Studio 2010 SharePoint Power Tools– adds Visual Web Part– SandBoxed solution validation (must have!)
• CKSDEV add-on– Trusted proxy– Deployment options
• Other must have stuff:– Visual Studio 2010 Productivity Pack– SP Dispose Checker (how to integrate with VS)
BP2 – VS2010 deployment configurations
• Generate SandBoxed/Farm solutions from same code base (blog post):
BP 3 – How to detect if SandBoxed?
• No OOTB, but:AppDomain.CurrentDomain.FriendlyName.Contains("Sandbox")
BP4 – „Sandboxed is default”
• When developing:– Use Sandboxed whenever possible• Faster deployment (no Recycling required)
– Separate farm/sandboxed solutions
BP5 – Use it for „Small fixes”
• Auto apply theme• Auto apply language settings• JQuery loader• UI adjustments (e.g. hide or add something)
Sandboxed vs. JQuery copy/paste
• Version control (e.g. via VSTS)• SharePoint Feature Versions• Easy to deploy to different environments• Can be deployed to site coll. level
Not supported
• Off-box connections, http, web services, etc• ADO.net• Enterprise features (Search, BCS, etc.)• Threading• P-Invoke• IO• Other sites (site collections)
SANDBOXED SOLUTIONS - ITPRO PERSPECTIVE
Very bad WebPart
• Infinite loop example:
• Farm solution = problem• Sandboxed solution:
Monitoring 101
• Site Collection Admin
• Farm admin
Monitored ResourcesMetric Name Description Units Resources
Per PointHard Limit
AbnormalProcessTerminationCount Process gets abnormally terminated Count 1 1
CPUExecutionTime CPU exception time Seconds 3,600 60CriticalExceptionCount Critical exception fired Number 10 3
InvocationCount Number of times solution has been invoked Count N/A N/A
PercentProcessorTime Note: # of cores not factored in Percentage Units of Overall Processor Consumed 85 100
ProcessCPUCycles CPU Cycles 1E+11 1E+11ProcessHandleCount Windows Handles 10,000 1,000
ProcessIOBytes (Hard Limit Only) Bytes written to IO Bytes 0 1E+08
ProcessThreadCount Number of Threads in Overall Process Threads 10,000 200
ProcessVirtualBytes (Hard Limit Only) Memory consumed Bytes 0 1E+09
SharePointDatabaseQueryCount SharePoint DB Queries Invoked Number 20 100
SharePointDatabaseQueryTime Amount of time spent waiting for a query to be performed Seconds 120 60
UnhandledExceptionCount Unhanded Exceptions 50 3
UnresponsiveprocessCount We have to kill the process because it has become unresponsive Number 2 1
BP6 – Resource usage
• Resource: SharePointDatabaseQueryCount– Number of SharePoint DB Queries Invoked– 20 = 1 point
• Default day limit 300 points
• Best practice: Adjust the limits to the env.
Benefits for ITPROs
• Stability of SharePoint farm cannot be jeopardized
• You can control which web parts will allowed• Less administration required– Empowering Site Coll. owners
BP7 – for IT PROs
• Do not enable if not necessary• Configure permissions• In hosting env. (from business perspective):– Gain competitive advantage:
BEYOND SANDBOX
Sandboxed solution limitations
• 3rd party .NET components do not work well with Sandboxed Solutions– Solutions: Revert back to JQuery– JQuery charts (licensing!):
BP8.1 – Extending Sandbox
• Trusted proxies:
Worker Service(SPUCWorkerProcess.exe)
SPUtility
SPProxyOperationArgs
GAC
SPProxyOperation
SPProxyOperationArgs
Untrusted Code
SecuredResource
BP8.1 – Extending Sandbox (2)
• Code sample:public class FileProxy : SPProxyOperation { public override object Execute(SPProxyOperationArgs args) { if (args != null) { FileArgs fileArgs = args as FileArgs; FileStream fStream = new FileStream(@"C:\Path\SampleFile.txt", FileMode.CreateNew); fStream.Write(System.Text.ASCIIEncoding.ASCII.GetBytes(fileArgs.FileContents), 0, fileArgs.FileContents.Length); fStream.Flush(); fStream.Close(); return fileArgs.FileContents; } else return null; } }
Source: http://blah.winsmarts.com/2009-12-SharePoint_2010_Sandboxed_Solutions__Full_Trust__Proxies.aspx
BP8.2 – Extending Sandbox
• Using SharePoint Client API:
Worker Service(SPUCWorkerProcess.exe)
Silverlight Web Part Host
Uncustomized Page
Silverlight App
JavaScript
Web Service (or Client OM)
SecuredResource
Or SPServices open-source
http://spservices.codeplex.com
Samples
Source: www.sharepointaccelerators.com
Source: www.21scrum.com
Active Resolved Closed
SandBoxed solution case study
Email Inbox Issues
Contacts
Confirmation Email
SANDBOXED SOLUTION EXAMPLE
DEMO
Conclusion
• Use whenever possible…• …But know the limits!• Happy programming!
QUESTIONS?