Here's a broad-based survey course. If you're already familiar with COM and ASP and want a general grounding, this is  probably the place to start. If you don't see something you'd like, or do see something you don't care about, we can customize this class to your needs. Call 978-356-6377 and we'll talk about it.

1. .NET Framework, Common Language Runtime Part 1: Basic Run-time System Architecture

Lecture: Problems of distributed computing and of current distributed computing environments. Architecture and components of Microsoft .NET. Need for language and platform independence. Concept of universal intermediate language, examination of Microsoft Intermediate Language (MSIL) and Just-In-Time (JIT) compilation. Simplest .NET example in VB and C#, an object that provides the current time and a client that accesses it.

Lab: Write, compile, and run a simple .NET object and client. 

2. .NET Framework, Common Language Runtime, Part 2: Assemblies

Lecture: Organization of system and user names into .NET namespaces, declaring and importing namespaces in your own code. Concept of an assembly as basic unit of code organization in .NET.  Private vs. shared assemblies. Using strong names for identifying shared assemblies. Using shared assemblies via the Global Assembly Cache. How an assembly specifies the version number it contains. How a client demands a particular version of an assembly. How an administrator can override a client' s demand using a configuration file.

Lab: Configure the object from Lab #1 as a shared assembly. Mark it with a strong name and place it in the Global Assembly Cache. Modify client to use shared assembly. Examine the effect of different versioning operations. 

3. .NET Framework, Common Language Runtime, Part 3: Inheritance and Memory Management

Lecture: Need for easy re-use of code, concept of inheritance. Specifying inheritance in .NET programming. Base class and derived class nomenclature. Overriding base class methods for replacement of inherited functionality. Passing calls from derived class to base class so as to piggy-back new functionality on top of inherited functionality.  Viewing inheritance relationships in Visual Studio object browser and IL disassembler. Need for automatic memory management to prevent memory leaks. Shortcoming of current approaches. Operation of automatic memory management via garbage collection in .NET. Need for a location of cleanup code, concept of a class finalizer. Advantages and drawbacks of finalizers, implementing deterministic finalization. 

Lab: Write a new object that extends your object from Lab #1 using inheritance. Override a method and add your own functionality. Add a finalizer to your object, and a Dispose method to support deterministic finalization.

4. .NET Framework, Common Language Runtime, Part 4: Exception Handling, Interoperation with COM, Code Access Security

Lecture: Problems of handling errors in programming. Concept of an exception handler, structured exception handling mechanism of .NET.   Using Try-Catch blocks, unwinding the stack. Using a Try-Finally handler for deterministic finalization. Catching and throwing different types of exceptions. Concepts of Code Access Security. Examination of code access security configuration database. Problems of interoperation with COM and COM+. View and run examples of .NET interacting with COM, both as client and as server.

Lab: Make your sample object handle exceptions if it's used after being disposed. Make your object use an existing COM server, and register it for use by COM clients. 

5. ASP.NET, Part 1

Lecture: Common problems of Internet servers. Need for easy input from the user, need for easy connection of input into server's program logic, need for easy dynamic generation of output to the user. Generating and publishing an ASP.NET project in Visual Studio, separation of code from presentation. Control-based programming of .ASPX pages. Examination of prefabricated Web controls, writing your own Web control. 

Lab: Build a new ASP.NET project using standard controls. Place it on a Web server and access it from a browser client. See how much less of a big deal it is than standard ASP was.

6. ASP.NET, Part 2

Lecture: Management and configuration of ASP.NET through XML-based configuration files.  Security of ASP.NET applications. Use of Windows authentication, forms-based authentication, and Passport-based authentication. State management in ASP.NET. Management of processes in ASP.NET, automatic recycling of processes, limits on resources.

Lab: Work with configuration of your ASP.NET installation. Select an authentication mode and modify your application to support it. Use the state management properties to maintain a virtual conversation with the user.

7. .NET Web Services

Lecture: Need for programs (as opposed to humans) to interact over the Web. Need for universal Web-based function calls. Using XML and HTTP as a common denominator. Concept of a Web Service, a .NET object automatically made accessible to client through standard Web protocols. Generating a Web service project, inheriting the system-provided Web Service base class. Connection of incoming protocols to Web Service methods. Advertising of the server-side contract in the WSDL file. Writing client applications in each supported protocol. Visual Studio enhancements for Web Services.

Lab: Generate a sample Web Service providing a simple method. Write a client that access that Web Service in your choice of protocol.

8. Data Access with ADO.NET

Lecture: Distribution of data on the Internet, need for accessing stored in many different formats and residing in many different locations. Need for standardizing access to all data sources regardless of store format or location, and for loose coupling between client and server. Architecture of ADO.NET as a solution to these problems, providing standard interfaces for all data providers regardless of internal structure, similar to OLE DB.   Connection, DataAdapter, and DataSet objects. Simple example using ADO.NET to display results of a query on a Web page using DataGrid control.  More complex example using disconnected DataSet for loosely-coupled editing operations. Requirement of optimistic locking for using database in this manner.  Use of transactions in ADO.NET. Generating and using strongly-typed datasets for easier programming.

Lab: Access SQL Server or other databases using ADO.NET.

9. XML

Lecture: Use of XML as universal wire format for data. Support for XML in .NET. Reading and writing XML documents via XmlDocument class, using XmlReader and XmlWriter for optimizing reading writing operations. Navigating among nodes, modifying their contents. Validating XML documents with a schema.  Transforming documents using XslTransform class. Serializing objects into XML for transfer across wire. Using strongly-typed wrapper classes for access to XML data.

Lab: XML serialization of .NET objects, or .NET parsing of a generic document.

10. Students' Requests

Lecture and Lab: Any topics you'd care to hear about. Possible candidates include Threading, Windows Forms, Reflection, Remoting, or Writing Your Own Controls