Reza Alirezaei , SharePoint MVP /MCTS
Download
1 / 38

Reza Alirezaei , SharePoint MVP - PowerPoint PPT Presentation


  • 177 Views
  • Uploaded on

Reza Alirezaei , SharePoint MVP /MCTS Development Horizon, Corp. http://blogs.devhorizon.com/reza Twitter: @ rezaal. Turning Chaos into Order: Best Practices for Developing SharePoint Applications. Who am I?. Microsoft MVP SharePoint (2007, 2008) SQL Server Reporting Services (2006)

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Reza Alirezaei , SharePoint MVP ' - melangell


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

Reza Alirezaei , SharePoint MVP /MCTS

Development Horizon, Corp.

http://blogs.devhorizon.com/reza

Twitter: @rezaal

Turning Chaos into Order:

Best Practices for Developing SharePoint Applications


Who am i
Who am I?

Microsoft MVP

SharePoint (2007, 2008)

SQL Server Reporting Services (2006)

Microsoft Certified Technology Specialist

MOSS 2007 Configuration

MOSS 2007 Application Development

Top 20 Contributor to MSDN Wiki 2006, 2007,2008

International SharePoint Professional Association Regional Evangelist (Canada)

Architect/Instructor/Speaker

Enterprise level SharePoint application

Large scale Integration Projects


Agenda
Agenda

Dev Tooling Experience

Configuration

Performance

Security

Some Architectural Decisions


Prerequisites

  • Good Understandings of SharePoint Dev

  • Definitely Not a 101 session


Why do i care
Why do I care?

Anti best practices:

“I suppose it is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail.”

Abraham Maslow


Sharepoint uber dev tools
SharePoint Uber Dev Tools

  • Most Popular Tools

    • WSPBuilder (Community)

      http://www.devhorizon.com/go/100

    • STSDEV (Community)

      http://www.devhorizon.com/go/101

    • VSeWSS (Microsoft)

      http://www.devhorizon.com/go/102

    • Old School way

  • Microsoft endorsement on VSeWSS

  • Cleanup code is your responsibility



DEMO

  • Quick Overview of all three tools

  • VSeWSS Solution Generator

    • VSeWSS WCF endpoint


Configuration management strategy
Configuration Management Strategy

  • Four most common solutions:

    • Settings in Solution Manifiest

    • SPWebConfigModification class

    • SharePoint List

    • Configuration From Web Services

    • Property bags (SPWebApplication.Properties)

  • SPWebConfigModification’s Top 6 Issues

    http://www.devhorizon.com/go/103

  • Scope at Web Application, not Site collection

  • Note: Persisted attributes in SPPresistedObject class as BLOB XML



Execution in parallel is king
“Execution in Parallel” is King!

  • ONLY one slow Web Part… ONLY one slow Process….

  • No ASP.NET Async Luxury

    • No Async Page Directive

    • How many Web Parts on one page

    • How many instances of your Web Part on one page

  • So, what are my *pure SharePoint* options?

    • Create a Worker Class to handle Async code

    • SPLongOperation Class

    • Use Built-in Functionalities

      • -ed Event handlers

      • Workflows

      • CQWP

      • DFWP


Workflow or event handler
Workflow or Event Handler?

Yes

Event Receiver

Cancel?

Human

Interference?

Workflow

Yes

Running > 5 min

Yes

High Volume

Yes


DEMO

Asynchronous Dev


Memory leaks
Memory Leaks

  • MSDN Paper

    http://www.devhorizon.com/go/104

  • Roger Lamb’s Blog

    http://www.devhorizon.com/go/105

  • . Net Rule for Disposing Objects

  • Edge –Cases!!

  • SPDisposeCheck

    http://www.devhorizon.com/go/106


Edge case 1
Edge Case -1

public class MyFeatureRec : SPFeatureReceiver{

public override void FeatureActivated(SPFeatureReceiverProperties properties)

{

//Does the following reference to SPSiteleak?

SPSitesite = properties.Feature.Parent as SPSite;

}

}


Edge case 2
Edge Case -2

public class MyClass: SPItemEventReceiver{

public override void ItemUpdated(SPItemEventProperties properties)

{

//Does the following reference to SPWeb leak?

SPWebweb = properties.OpenWeb();

}

}


Edge case 3
Edge Case -3

public class MyClass: SPWebProvisioningProvider{

public override void Provision (SPWebProvisioningPropertiesprops)

{

//Does the following reference to SPWebleak?

SPWebweb = props.Web;

}

}


My 0 02
My $0.02

  • Don’t Dispose in Edge Cases


DEMO

  • SPDisposeCheck

  • Edge Cases


How about this one
How about this one?

SPWeboWeb = SPContext.Current.Web;

//Does the following reference to SPSite leak?

SPSiteoSite = oWeb.Site;

Say No To Disposing Of objects hanging off SPContext


MOSS is a Ecological System

IIS

Custom WPs/Procs

MOSS

All of these technologies must fit in a single 32-bit process

Search

Profiles

Audience

BDC

Forms

ExcelSrv

Analytics

CMS

WSS

CRL/Native APIs

MDAC

LDAP


X64 issues
x64 Issues

x86 Issues

  • Last slide + A lot more issues!

Go hybrid & Build “ Any CPU”

  • Artifact/WP development - don’t matter

  • Protocol handlers/iFilters/ Document Convertors

  • Many of the current dev tools run in WOW

  • Some tools don’t support x64 bit (STSDEV)

  • Infrastructure Cost

  • Not ISV friendly

  • VS 2008 WF Templates (Seq and State) not supported, but who cares?!


App pool best practices
App Pool Best Practices

  • Say No to Web Gardening

    • Not supported

    • Breaks Blob Cache (Wrong Header)

  • Leave App pools in Legacy Mode (a.k.a worker process isolation mode)

  • Most of the time , leave App Pool settings as it is

  • Stick to reasonable upper bounds of RAM utilization (850 Mb on x86 or 1.2Gb on x64)


List capacity planning
List Capacity Planning

Working with Large List Paper MSDN

http://www.devhorizon.com/go/107

Recap of the MSDN paper on my blog

http://www.devhorizon.com/go/108

Bottom Line is :

2000 items per list limit is …..

SPList w/DataTable or SPList w/for/each ……..

Escalation of SQL Server Lock on Lists Table is serious

Be cautious about using Collections & Avoid Using Indexes on each Call


Properly working with collections
Properly Working With Collections

// BAD way

SPWeb web = SPContext.Current.Web;

string tasksID = web.Lists[“Tasks”].ID;

string tasksTitle = web.Lists[“Tasks”].Title;

// GOOD way

SPWeb web = SPContext.Current.Web;

SPListtasksList = web.Lists[“Tasks”];

string tasksID = tasksList.ID;

string tasksTitle = tasksList.Title;


What is wrong with this code
What is wrong with this code?

SPListbigList = web1.Lists[“BigList”];

foreach(SPListItem item in bigList.Items)

{

if(item[“MyColumn”] == “Foo”)

{

Console.WriteLine(“Found One!”);

}

}


Working with splist

SPList.Items gets a collection with ALL list items

Terrible for big lists

Lots of memory needed

Lots of SQL I/O

Lots of network

Lots of CPU

Instead use SPList.GetItems

Takes a CAML query

Working with SPList

Say No To


Content Query Web Part (QueryOverride Prop)

Data Form Web Part with FullTextSqlQueryObject

PortalSiteMapProviderClass

Primarily used for navigation controls

Optimized to query data not only across lists, but across webs

Scope limited to the current site collection

Limitations :

Not good for infrequent queries

Not good for frequently changed data

Uses the same shared caching facility in your site collection

MOSS Only



Avoid reporting directly off of sharepoint databases
Avoid Reporting directly off of SharePoint Databases

Use OM

Web Services

RPC Calls (Remote)

Use innate capability of your reporting tool

Lists or Database?


DEMO

  • Reporting against Lists

  • Aggregating of Content


Security is not a joke
Security is NOT a Joke

  • Know your threat model and what security context your code runs on behalf of.

    http://www.devhorizon.com/go/110

  • GAC or BIN?

    • Event Receivers

    • Workflows

    • Provision Handlers

    • Web Parts if they’re being manipulated programmatically

  • permcalc -Show <assemblyName> utility in .Net Framework 2.0

    http://www.devhorizon.com/go/111

  • NEVER raise the trust level in Web.config to FULL – NEVER!

  • System Account = Application Pool Identity

  • Elevation of Privilege – do it the right way!


DEMO

Elevating the security context *Properly*


Think farm not standalone

Only WSP deployment , but….

Use timer Jobs to Sync up thing in your entire farm

CKS:IEE http://www.devhorizon.com/go/109

Don’t touch file system on a server directly

Don’t touch file system by System.IO either

Don’t use LOCK in timer jobs if targeting the farm

Think Farm, NOT Standalone



DEMO

System.IO Love

(Well, not really!)


References

  • Professional SharePoint 2007 Web Content Management Development by Andrew Connell

  • http://www.devhorizon.com/go/112

  • Francis Cheung (Microsoft patterns & practices) http://www.devhorizon.com/go/113

  • Patterns & Practices SharePoint Guidance

  • http://www.devhorizon.com/go/114


Last but certainly not least

THINK SHAREPOINT

Last but certainly not least:

http://blogs.devhorizon.com/reza


ad