54
Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Embed Size (px)

Citation preview

Page 1: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Best Practices for ASP.NET Development

Ammar AbuthurayaDeveloper & Platform LeadMicrosoft Corporation

Page 2: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

What we will cover Designing ASP.NET Web forms Use code-behind for best performance and scalability ASP.NET caching techniques State management options Recommendations for communicating with COM components from ASP.NET

Page 3: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Session Prerequisites

Level 300Level 300

Understand .NET architectureWorking knowledge of either VB.NET or C#Knowledge of ASP.NET application architectureKnowledge of ASP

Page 4: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

So Why This Presentation?You know how to build ASP applications and use the same techniques to build ASP.NET

applicationsYou want to leverage the power and capabilities of ASP.NET You want to use ASP.NET to build high-performance, scalable, web-based applications

Page 5: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Demonstrations Language best practices Server Control design practices Component & user control design State management recommendations Caching techniques Measuring performance

Page 6: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Agenda Language and Code Practices Server Control Design Practices Component and User Control Usage Practices State Management Recommendations Deployment Best Practices Measurement Techniques

Page 7: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Language and Code PracticesCode Performance

.NET Common Language Runtime (CLR) provides big runtime performance wins Further optimize by native code generation using NGEN.EXE No perf difference in .NET languages

Equivalent code written in VB and C# provides equivalent performance at runtime

Page 8: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Language and Code PracticesBinding in VB.NET

Early binding in VB performs better than late binding

‘ ‘ VB Late Binding ExampleVB Late Binding Example

Dim j, objDim j, objobj = New System.Collections.ArrayList()obj = New System.Collections.ArrayList()for j = 0 To ifor j = 0 To i obj.Add(j)obj.Add(j)NextNext

‘ ‘ VB Early Binding ExampleVB Early Binding Example

Dim j as integer, obj As ArrayListDim j as integer, obj As ArrayListobj = New System.Collections.ArrayList()obj = New System.Collections.ArrayList()for j = 0 To ifor j = 0 To i obj.Add(j)obj.Add(j)NextNext

Page 9: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Language and Code PracticesLanguage Recommendations Avoid using late binding in VB

Explicitly declare all variable types (Dim a as Long) Avoid late bound methods on Object type

Use <%@ Page Language=“VB” Explicit=“true” %> Requires all variables to be declared (DIM required) Still enables late bound code to exist though

<%@ Page Language=“VB” Strict=“true” %> Disallows any late bound code to be used

Page 10: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Language and Code PracticesCOM interop Issues

Apartment threaded components are particularly expensive in ASP.NET ASP.NET now uses MTA thread pool by default that has

very bad perf side effects when running STA components

This affects all VB6( STA) components!

Page 11: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Language and Code Practicesinterop Recommendations

Ideally migrate COM code to .NET Alternatively structure APIs to be less “chatty” and more “chunky”

in usage Use COM interop through System.Runtime.interopServices

If using apartment components, mark page to run in STA compat mode: <%@ Page ASPCompat=“true” %>

Page 12: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Language and Code Practicesinterop Recommendations Be careful not to declare any STA

component in “constructor” of page:<%@ Page Language=“VB” ASPCompat=“true” %><%@ Page Language=“VB” ASPCompat=“true” %>

<script language=“VB” runat=server><script language=“VB” runat=server>

Dim MyComponent as New MySTAComponent() 'Bad!Dim MyComponent as New MySTAComponent() 'Bad!

</script></script>

<%@ Page Language=“VB” ASPCompat=“true” %><%@ Page Language=“VB” ASPCompat=“true” %>

<script language=“VB” runat=server><script language=“VB” runat=server>

Dim MyComponent as MySTAComponentDim MyComponent as MySTAComponent

Sub Page_Load(Sender as Object, E as EventArgs)Sub Page_Load(Sender as Object, E as EventArgs)

MyComponent = New MySTAComponent()MyComponent = New MySTAComponent()

End SubEnd Sub

</script></script>

Page 13: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Demonstration 1Language Best Practices

Early binding vs. Late Binding Using COM objects in ASP.NET

Page 14: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Agenda Language and Code Practices Server Control Design Practices Component and User Control Usage Practices State Management Recommendations Deployment Best Practices Measurement Techniques

Page 15: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Server Control Design PracticesOptimizing Server Control Rendering

Server controls provide a very clean programming model abstraction Recommended way to build ASP.NET pages

Server controls do more rendering/postback work than old-style <%= %> code Should understand what this work is and optimize for it accordingly

Two areas to think about and optimize: Rendering Content ViewState Postback

Page 16: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Server Control Design PracticesOptimizing Server Control Rendering

Server controls encapsulate rendering markup logic at runtime Handle style and automatic uplevel/downlevel functionality management

individual server controls each add slight additional rendering cost Additional allocations for style management Additional allocations for control itself

Net take: the more individual server controls on page, the more this overhead can be noticed Need to be especially aware of this w/ composite list controls that generate multiple controls per

data row

Page 17: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Server Control Design PracticesOptimizing Use of Viewstate ASP.NET allows pages/controls to maintain state across round trips by storing state within hidden

“viewstate” field Disabled with “EnableViewState” attribute Some downsides:

increases network payload Performance overhead to serialize this

Recommendation: Always review your usage of this feature Always disable if you are not doing postback Disable on per control basis if possible Use <%@ Page Trace=“true” %> to track usage size

Page 18: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Server Control Design PracticesData Validation Techniques

Leverage client side scripting capabilities to perform validations

Perform validation on both server & client side to avoid validation bypass

Make appropriate use of the RequiredFieldValidator Use RegularExpressionValidator for validating complex field

types like Credit Card

Page 19: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Server Control Design PracticesData Binding Best Practices

Multiple ways to do data access with .NET SQL vs. OLEDB ADO.NET Provider DataReaders vs. DataSets

Recommendations: Always use SQL Data Provider for Microsoft® SQL Server™ data access Use DataReaders for ASP.NET data access and use DataSets only

when data caching or with web services

Page 20: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Demonstration 2Server Control Design Practices

Optimizing Server Control RenderingOptimizing Use of Viewstate

Data Validation Best PracticesData Binding Best Practices

Page 21: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Agenda Language and Code Practices Server Control Design Practices Component and User Control Usage Practices State Management Recommendations Deployment Best Practices Measurement Techniques

Page 22: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Component & User Control PracticesImproving User Experience

ASP.NET built-in caching features Output Caching Fragment Caching

Caches the static result of an ASP.NET page Use the <%@ OutputCache %> directive to control caching behavior

Page 23: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Component & User Control PracticesImproving User Experience

Caching Options: Duration - Time item exists in the cache VaryByParam - Varies cache entries by Get/Post params. Name

param, separate by semi-colons, supports * VaryByHeader - Varies cache entries by Http header VaryByCustom - Override method within Global.asax to custom

vary by whatever you want (you control the cache key)

Page 24: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Component & User Control PracticesImproving User Experience

Caching the entire page isn’t always possible Partial page personalization, etc.

Fragment Caching allows caching regions of a page by using user controls (.ascx) User controls define <%@ OutputCache %> directive

Page 25: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Component & User Control PracticesCoding Patterns in ASP.NET Common coding patterns:

Spaghetti – include all presentation logic and code in the same page like classic ASP

Code behind – all presentation logic is in the aspx file, which is linked to a separate code behind file

Component – business logic is present in a compiled component, which is invoked for providing various services

There is no perf difference between a dynamically compiled .aspx (“spaghetti”) and “code behind” style page

Page 26: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Component & User Control PracticesOptimizing Data Flow Across Tiers

Data exchange across tiers has to be optimized for the deployment scenario

Avoid passing datasets across tiers Use DataReaders for fast, forward-only access to the data

stream XML is very verbose; suitable for communications with

unknown systems

Page 27: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Component & User Control PracticesOptimizing Data Flow Across Tiers

Minimize the number of post backs Leverage client side capabilities to avoid post backs Control the amount of view state information passed

during a post back Use EnableViewState at page or control level to configure

view state usage.

Page 28: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Demonstration 3Component & User Control Best

Practices

Buffered OutputFragment Caching & Custom Caching

Code Behind, User Controls & ComponentsData Flow Across Tiers

Optimizing Postback

Page 29: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Agenda Language and Code Practices Server Control Design Practices Component and User Control Usage Practices State Management Recommendations Deployment Best Practices Measurement Techniques

Page 30: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

State Management Recommendationsin Proc Session State

Session state is stored in the ASP.NET worker process Recycling the process will cause all session state to be lost Session state performance is maximum in this mode

Page 31: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

State Management RecommendationsOut of Proc Session State

Session state can be stored in a State server process running on the same machine or a different machine

State can also be stored in a SQL Server database Restarting the web server does not cause the session state to

be lost More reliable than in process session state but less

performant

Page 32: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

State Management RecommendationsConfiguring Session State

Session state can be configured via the <sessionState> element in the web.config file

Change causes ASP.NET application to be restarted, all new sessions will be stored as per the updated session configuration

Out of process session state stores like State Server or SQL Server must be started & configured properly

Page 33: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Demonstration 4State Management Best Practices

State ManagementSession State in A State Server

Page 34: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Agenda Language and Code Practices Server Control Design Practices Component and User Control Usage Practices State Management Recommendations Deployment Best Practices Measurement Techniques

Page 35: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Deployment Best PracticesLogical Design

Design your applications using logical 3-Tier Design Practices: Pages (.aspx) and User Controls (.ascx) Reusable Biz Classes in \bin dir (.vb + .cs) Data within a SQL Database

Design your Web application so that it can be distributed across a Web farm Your code shouldn’t assume that a client will always return to the same machine Be careful of assumptions regarding statics and application state

Page 36: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Deployment Best PracticesPhysical Deployment Deploy your applications such that the pages and components run in

same process Deploying onto remote servers connected via DCOM or Web Services will almost

always hurt your performance/scalability Leverage Web services only for application to application communication -- not

intra app calls

Leverage ISA Server for configurations where a DMZ security zone is required Enables you to restrict app server access from browser clients

Page 37: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Deployment Best PracticesISA for DMZ Configurations

ISAISA ASP.NETASP.NET SQLSQL

DMZ (firewalled)DMZ (firewalled)

BrowsersBrowsers

Page 38: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Agenda Language and Code Practices Server Control Design Practices Component and User Control Usage Practices State Management Recommendations Deployment Best Practices Measurement Techniques

Page 39: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Measurement TechniquesOverview of Application Center Test

Application Center Test (ACT) is a tool designed for stress testing web servers The tool assists in determining performance and scalability of a given web site The tool also collect useful statistical information during the stress test ACT also exposes a programming interface, which can be used for creating stress test scripts

Page 40: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Measurement TechniquesKey Performance indicators

The key performance indicators of a web application are: Processor utilization

Low value indicates blocking on other resources

ASP.NET Requests/Sec & Requests Queued

Memory Pages Faults/Sec – lower the better, high numbers indicate insufficient memory

condition

Page 41: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Measurement TechniquesStress Testing Stress testing is a defensive mechanism to creating scalable web

sites Stress runs will indicate the scalability of the application

Can be used to determine scale of operation, when to add new hardware etc

Stress testing should not be the final step in building a web application. It should be integrated into the development life cycle

Narrow the scope of a stress run to get more accurate, actionable results

Page 42: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Measurement TechniquesStress Testing

Use the web site logs to determine operational load Stress tools like WAS (“Homer”) allow log files to be

“replayed” on a web site and record statistical performance information

Run performance monitoring tools on the live servers to identify scalability issues

Page 43: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Measurement TechniquesDesigning Scalable Applications Two ways to quantify Web performance:

Machine Throughput (requests/sec) Response Time (time to first/last bytes)

Measure performance by stressing server Utilize multiple client stress machines Use Application Center Test tool

Measure multiple scenarios: Simulate end to end scenario walkthroughs of site Measure individual page performances

Page 44: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Demonstration 5Measurement Techniques

Performance Measurement

Page 45: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Session Summary in this session we discussed:

Language and Code Practices Server Control Design Practices Component and User Control Usage Practices State Management Recommendations Caching Techniques Deployment Best Practices Measurement Techniques

Page 46: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

for More information… MSDN Web site at

msdn.microsoft.com

Page 47: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Training & Training & EventsEvents

MSDN Webcasts, MSDN Online MSDN Webcasts, MSDN Online Seminars, Tech-Ed, PDC, Developer DaysSeminars, Tech-Ed, PDC, Developer Days

MSDNEssential Resources for Developers

Subscription Subscription ServicesServices

OnlineOnlineinformationinformation

MembershipMembershipProgramsPrograms

Print Print PublicationsPublications

Library, OS, Professional, Enterprise, Library, OS, Professional, Enterprise, Universal Delivered via CD-ROM, DVD, WebUniversal Delivered via CD-ROM, DVD, Web

MSDN Online, MSDN Flash, How-To MSDN Online, MSDN Flash, How-To Resources, Download CenterResources, Download Center

MSDN User GroupsMSDN User Groups

MSDN MagazineMSDN MagazineMSDN NewsMSDN News

Page 48: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

How-To ResourcesSimple, Step-By-Step Procedures Embedded Development How-To Resources General How-To Resources integration How-To Resources JScript .NET How-To Resources .NET Development How-To Resources office Development Resources Security How-To Resources Visual Basic® .NET How-To Resources Visual C#® .NET How-To Resources Visual Studio® .NET How-To Resources Web Development How-To Resources (ASP, IIS, XML) Web Services How-To Resources Windows® Development How-To Resources

http://msdn.microsoft.com/howto

Page 49: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

MSDN Webcastsinteractive, Live Online Event

interactive, Synchronous, Live Online Event

Discuss the Hottest Topics from Microsoft

Open and Free for The General Public Takes Place Every Tuesdays

http://www.microsoft.com/usa/webcasts

Page 50: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

MSDN Subscriptions THE way to get Visual Studio .NETVisual Studio .NETVisual Studio .NET MSDN SubscriptionsMSDN Subscriptions

NE

W

ProfessionalProfessional• Tools to build applications Tools to build applications

and XML Web services for and XML Web services for Windows and the WebWindows and the Web

MSDN ProfessionalMSDN Professional$1199 new$1199 new

$899 renewal/upgrade$899 renewal/upgrade

MSDN EnterpriseMSDN Enterprise$2199 new$2199 new

$1599 renewal/upgrade$1599 renewal/upgrade

MSDN UniversalMSDN Universal$2799 new$2799 new

$2299 renewal/upgrade$2299 renewal/upgrade

Enterprise DeveloperEnterprise Developer• Enterprise lifecycle toolsEnterprise lifecycle tools• Team development supportTeam development support• Core .NET Enterprise Core .NET Enterprise

ServersServers

Enterprise ArchitectEnterprise Architect• Software and data modelingSoftware and data modeling• Enterprise templatesEnterprise templates• Architectural guidanceArchitectural guidance

Page 51: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Where Can I Get MSDN? Visit MSDN Online at

msdn.microsoft.com Register for the MSDN Flash Email

Newsletter at

msdn.microsoft.com/flash Become an MSDN CD Subscriber at

msdn.microsoft.com/subscriptions MSDN online seminars

msdn.microsoft.com/training/seminars Attend More MSDN Events

Page 52: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

MS PressEssential Resources for Developers

Microsoft® Visual Studio® .NET is here!Microsoft® Visual Studio® .NET is here!This is your chance to start building the next big This is your chance to start building the next big

thing. Develop your .NET skills, increase your thing. Develop your .NET skills, increase your productivity with .NET Books from Microsoft Press®productivity with .NET Books from Microsoft Press®

www.microsoft.com/mspresswww.microsoft.com/mspress

Page 53: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

TrainingTraining Resources for DevelopersCourse Title: introduction to Microsoft

ASP.NET Course Number:2063 Availability: Now Detailed Syllabus: www.microsoft.com/traincert

To locate a training provider for this course, please accessTo locate a training provider for this course, please access

www.microsoft.com/traincert Microsoft Certified Technical Education Centers Microsoft Certified Technical Education Centers

are Microsoft’s premier partners for training servicesare Microsoft’s premier partners for training services

Page 54: Best Practices for ASP.NET Development Ammar Abuthuraya Developer & Platform Lead Microsoft Corporation

Become A Microsoft Certified Solution Developer

What is MCSD? Microsoft Certified Solution Developer The premier certification for lead developers who

design and develop leading-edge enterprise solutions with Microsoft development tools, technologies, and the Microsoft .NET Framework.

How do I attain the MCSD for Microsoft .NET certification? 4 core exams 1 elective exam

For complete information visit: www.microsoft.com/mcsd