SharePoint 2010 sandboxed solutions changed the way how we can develop applications on top of SharePoint platform. This session will talk about sandboxed solutions architecture, do's and don'ts, types of solutions that should be built as sandboxed solutions. We are going to discuss tools that can help us develop solutions in a sandbox and tricks that can assist us to streamline code development and application life cycle. The session will be accompanied with series of demoes that are going to show some of best and worst practices with SharePoint solutions.
3. Agenda
• Intro to SharePoint SandBoxed solutions
• SandBoxed solutions for DEVs
• SandBoxed solutions for IT PROs
• Demo
4. 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)
5. 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
7. SandBoxed Solutions
• Isolated SP process
(User Code Service)
• Exposes a subset of
Microsoft.SharePoint namespace
• Managed via Site Coll. Solutions gallery
10. How stuff works
Worker Service
(SPUCWorkerProcess.exe)
Host Services
(SPUCHostService.exe)
Execution Manager
(Inside Application Pool)
IIS
(WPW3.EXE)
FRONT END BACK END
Subset-Model
RequestFull-Model
Request
11. 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
12. 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
13. 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)
14. BP2 – VS2010 deployment configurations
• Generate SandBoxed/Farm solutions from
same code base (blog post):
15. BP 3 – How to detect if SandBoxed?
• No OOTB, but:
AppDomain.CurrentDomain.FriendlyName.Contains("Sandbox")
16. BP4 – „Sandboxed is default”
• When developing:
– Use Sandboxed whenever possible
• Faster deployment (no Recycling required)
– Separate farm/sandboxed solutions
17. BP5 – Use it for „Small fixes”
• Auto apply theme
• Auto apply language settings
• JQuery loader
• UI adjustments (e.g. hide or add something)
18. 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
19. Not supported
• Off-box connections, http, web services, etc
• ADO.net
• Enterprise features (Search, BCS, etc.)
• Threading
• P-Invoke
• IO
• Other sites (site collections)
23. Monitored Resources
Metric Name Description Units
Resources
Per Point
Hard
Limit
AbnormalProcessTerminationCount Process gets abnormally terminated Count 1 1
CPUExecutionTime CPU exception time Seconds 3,600 60
CriticalExceptionCount 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+11
ProcessHandleCount 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
24. 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.
25. 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
26. BP7 – for IT PROs
• Do not enable if not necessary
• Configure permissions
• In hosting env. (from business perspective):
– Gain competitive advantage:
28. Sandboxed solution limitations
• 3rd party .NET components do not work well
with Sandboxed Solutions
– Solutions: Revert back to JQuery
– JQuery charts (licensing!):
Resource Per Point is how much this contributes to the point limit per day for the site collection
Hard Limit is how much of this resource a solution can use in a single invocation before it is terminated – a maximum use of quota in a single invocation
Invocation count is used to measure the per-instance cost of a solution for purposes of reporting and assigning to run-time “tiers” for farms that want to separate solutions into multiple different sandbox processes – there is only one by default.