best practices with sharepoint 2010 sandboxed solutions

Post on 05-Dec-2014

5.184 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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.

TRANSCRIPT

Best practices with SharePoint 2010 Sandboxed Solutions

Toni FrankolaSharePoint Services MVP, Croatia

http://www.sharepointusecases.comToni.frankola@acceleratio.hr@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

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

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?

THANK YOU!

Toni FrankolaSharePoint Services MVP, Croatia

http://www.sharepointusecases.comToni.frankola@acceleratio.hr@ToniFrankola

top related