Implementing Infrastructure
Ultimately, you have to pull together all the pieces and implement application infrastructure. So in this category, we have sessions that cover a variety of related topics, including how to leverage the .NET System.Transactions services, and how to integrate technologies and services across multiple tiers. We'll also show you how to utilize Cloud-based services and even use popular public-domain frameworks like CLSA.NET.
DT9Applied Generics: Powerful Abstractions You Can Use for Major Re-Usability
Richard Hale Shaw
Tuesday, December 9 – 1:45 p.m.
What's your Re-Usability Threshold?
Are you comfortable copy/pasting code -- or writing the same code -- over and over -- or would you rather write the code once and re-use it forever? Do you really want to create 20 versions of the same method -- where the only differences are a single operation or data type -- or would you rather define it once and re-use it forever? Do you really enjoy implementing calls to Control.Invoke when a secondary thread updates a form -- or would you rather define an Invoke method once and re-use it forever? Do you really like to write all the code needed to store values in ASP.NET Session State -- or would you rather write a State mechanism once, and use it forever?
If you answered yes to the first half of each question, this talk isn't for you.
But if Re-Usability is a value to you, come and find out the many ways you can use Generics. With all the noise over Generics the last 2-3 years, you'd think that they're really only for implementing type-safe collections. But Generics can be applied to a wide variety of scenarios that have little -- or nothing -- to do with collections.
In this session, Richard will start with a number of practical applications: a re- usable Session State class, a re-usable Winforms invoker, and re-usable event-raising. Then we'll move to the issues of designing Generic methods, and functional programming techniques with Generic delegates. We'll look at Best Practices such as Generic Class Design, and how to create new abstractions of your own. By the time we're finished, you'll have a number of practical solutions at hand, and ideas on how to create new Generic abstractions of your own.
DT19Building Applications using CSLA .NET
Rockford Lhotka
Tuesday, December 9 – 4:45 p.m.
CSLA .NET is one of the most widely used open source development frameworks for Microsoft .NET. Learn how CSLA .NET enables the creation of a rich object-oriented business layer that encapsulates your validation, authorization, business logic and persistence, and which automatically supports data binding for WPF, ASP.NET, Windows Forms. Don't believe a single business DLL can be reused across different UI types? See it happen, and learn how this approach not only enables reuse, but encourages best practices around object design and separation of concerns. Can't imagine an application can switch from 2-tier to 3-tier without changing code? See it happen, and learn how CSLA .NET leverages the concept of mobile objects to transparently enable various n-tier deployment models for any application.
DW3Practical Use of System Transactions
John Papa
Wednesday, December 10 – 9:45 a.m.
The System.Transactions namespace enhances transactional support for managed code. In this session, I will discuss how System.Transactions can handle transactions without using other common practices such as deriving from a ServicedComponent, using interception, or using reflection. Designed to integrate with SQL Server 2005, System.Transactions supports the intelligent and automatic promotion of local lightweight transactions to fully distributed transactions. It also introduces a new class called LightweightTransactionManager, which is a faster alternative to using the DTC for local transactions. Example will include modifying the default transactional settings of the implicit local transaction, the isolation level, timeout period and transaction's context. I will also demonstrate how and when the System.Transactions namespace delegates the promotion of a lightweight transaction to a fully distributed transaction as well as how to use explicit transactions, and manually choose when and if to enlist in a transaction context.
DW13Functional Re-Factoring: Leveraging Lambda Expressions and Generic Delegates to add Clarity and Grace to Your Code
Richard Hale Shaw
Wednesday, December 10 – 3:15 p.m.
How many times have you written -- and re-written -- the same method over and over? How often have you implemented the same plumbing where only a few lines of code -- or just the type of a variable -- differed from one implementation to the next? Have you ever wanted to create boilerplate methods that could be re-used, and have a high-level, elegant way of plugging in the differences between one use and the next -- all without copying and pasting or propogating bugs? Now you can.
Over the last 2 releases of .NET and C#, a wealth of new functional programming features have been added: Generic Delegates, Anonymous Methods and Lambda Expressions. By properly leveraging these, you can elegantly re- factor your code -- making incremental, step-wise changes -- to an existing Application, Code Base, Library or Method such that the external behavior doesn't change, but the inner details allow for more re-usability, remove unnecessary plumbing details, reduce complexity, and increase extensibility.
In this session, Richard will demonstrate a number general of refactorings, but focus in particular on the application of functional programming improvements. Along the way, he'll show you a variety of ways to reduce the complexity of your code while increasing maintainability. And as an example he'll demonstrate how to create a Database Provider Factory that rivals the one supplied in .NET 2.0, and which will eliminate 50% (or more) of the plumbing required to use DataConnection, DataCommand, DataReader and DataAdapter objects in ADO.NET.
DW15Adding Remote Authentication, Role Management and Profiles to Windows Applications
Robert Green
Wednesday, December 10 – 3:15 p.m.
Today, you can log into a Web site such as Amazon and the site knows who you are and what your preferences are. They are stored on the server and you are who you are regardless of what computer you use. Client Application Services gives you the ability to add this same functionality to your Windows applications by using client service providers for login, roles and profiles. These client providers use Web services to talk to the corresponding ASP.NET providers. This session will show you how to add remote login, roles and profiles to client applications. You'll see how to build Web services to use the default providers. You'll also see how to build your own providers.
DW18Win & Web App Installers with WiX
Benjamin Day
Wednesday, December 10 – 4:45 p.m.
It's hopeless. There's no automated way to test your web apps. The only option is to test them by hand, right?
Well, no. Visual Studio Team System has Web Tests that let you run and validate different paths through your ASP.NET applications. Each test simulates a user performing a bunch of actions across a series of web pages and allows you to check the response to verify that your app is going what you expect. Once you have your Web Tests defined you assemble them together to create Load Tests. Load Tests simulate hundreds of users hitting your web app in order to validate how well -- or not so well -- your application performs under stress.
In this session, Ben will show you how to write complex Web Tests using Validation Rules, Extraction Rules, and Web Test Plugins. He'll also cover how to make your tests data-driven using an external data source so you'll get better tests with less code. Then we'll move on to creating Load Tests using both a stand-alone machine and with multiple machines using VSTS Load Test Agent. We'll also talk about what your options are for profiling your application under load using Run Settings and Stress Test Counters. Ben will wrap up the session by showing you how to make it all work inside of a Team Build.
DTH3Implementing Caching Technology as One Rung of the Scalability Ladder
Josef Finsel
Thursday, December 11 – 8:15 a.m.
They say that the two most complicated tasks facing programmers are caching invalidation and naming objects. This presentation discusses implementing caching on multiple levels within an application to improve scalability. When you reach the point that your application is finding bottlenecks that are pinching your users and causing you pain points, one step in improving scalability is to implement caching. From web applications to desktop applications, we'll provide a look at:
- What caching is
- How to determine what and when to cache
- A couple of the caching technologies available
- Some best practices for implementing caching
DTH8Building Applications with Windows Live SDK
Jackie Goldstein
Thursday, December 11 – 9:45 a.m.
The Windows Live SDK exposes tremendous amounts of functionality that can be incorporated into your browser or smart client applications. Come and learn what Windows Live is about, what services are available and how to build Mashups using these controls and APIs. We'll take a look at developing both browser and rich-client applications using components such as Virtual Earth, Contacts, Windows Live ID, Live Search, and others. We'll also look at readily available solutions and resources to help you get started even faster!

