Microsoft divides the Framework’s basic components into the Common Language Runtime and the class library.
The Common Language Runtime provides services for .NET-hosted applications. It also offers security management, error handling, and memory allocation and management.
The class library contains three essential components: ASP.NET, ADO.NET, and web forms. ASP.NET implements the Internet segment of the Framework by lending support for web services. ADO.NET provides access to Microsoft’s flagship database, SQL Server 2000. Web forms enhance smart-client user interface development.
ADO.NET is flexible enough that it provides access to any relational database, assuming the availability of an ADO.NET provider.
The Common Language Runtime (CLR) manages such services as memory allocation and deallocation, automated garbage collection, loading of components, cross-language debugging, exception handling, type checking, and supporting just-in-time (JIT) compilers for Framework-targeted languages. The Framework base classes offer system-level capabilities for creating a wide range of different type applications, including client-smart applications, enterprise-distributed applications, and web-enabled applications. The base classes also implement I/O, string handling, threading, text, collections, and so forth. The CLR also includes XML and data management for Structured Query Language (SQL). The web services component consists of three user and program interfaces: web services, web forms, and Windows forms.
Windows forms are part of the various client application constructs. Developers do not need the web services namespace to invoke them.
Web services utilize XML, Simple Object Access Protocol (SOAP), and HyperText Transport Protocol (HTTP) for transmitting documents and mission-critical data between client and server or business trading partners. Web services also contain classes supporting the following:
Web Services Description Language (WSDL)
Universal Description, Discovery, and Integration (UDDI)
DISCO (a Microsoft proprietary XML document format), which allows web sites to advertise formats they expose for locating resources that offer services to interested clients.
Web forms, which lend support for Rapid Application Development (RAD) and graphical user interface applications.
Apply the same drag-and-drop techniques you use in traditional Visual Basic 6.0 to create GUI applications.
Windows forms, which contain classes allowing you to develop native Windows UI applications. Within a single Integrated Development Environment, you can utilize the same set of tools and skills for developing wireless device applications, creating distributed server-based applications, and building web services–enabled applications. The Framework lets you develop applications using a consistent interface that all .NET-supported languages share.
The Common Language Runtime itself contains two core entities: the runtime engine mscoree.dl, and the base-class library mscorlib.dll. They contain all essential CLR-related classes offering support for the Framework.
The CLR fulfills many different roles. For example, one essential task is locating an assembly and utilizing classes residing within the System.Reflection namespace to inspect both the manifest metadata (information about the data) and all binary data existing within an assembly. The metadata includes type definitions, external assembly references, version information, a description of the assembly’s identity (a combination of the assembly name, version, culture, and public key), and other data required by the CLR for program execution. The metadata also describes classes, modules, interfaces, properties, global methods, and so forth. In essence, the assembly contains all required information necessary for .NET to provide application and multilanguage interoperability. It also supplies identity information for security purposes.
As just mentioned, metadata is information about data. If you are familiar with XML syntax, you understand that XML is universally accepted as a markup language. It allows you to write your own user-defined markup tags to describe your data. Tags are metadata about content. Additionally, XML is nothing but text embedded within markup tags. For example, the following brief XML document uses self-describing markup tags to describe what it is portraying:
<?xml version='1.0' encoding='UTF-8'?>
Speak! Where are you? I do not see you.
The markup tags portray a particular portion of a scene from Hamlet. If you wish to provide further information (metadata) about these actors, you can use attributes to achieve this:
<message type="scene" play='Hamlet'/
Another component of the Framework, the just-in-time (JIT) compiler, reads the metadata to compile Microsoft Intermediate Language (MSIL, or IL) code. IL represents the intermediate state for code and compiles ultimately to an application-specific set of program instructions called native code.
In summary, metadata contributes heavily to application and language interoperability by supplying critical information to the CLR, to the JIT compiler, and to all Microsoft .NET tools.
A class loader is another essential component of the CLR. Its responsibility is finding and loading .NET classes courtesy of metadata and classes within the System.Reflection namespace. Reflection allows you to examine metadata about the manifest. This file contains all information about the assembly. The CLR determines whether a particular class resides within a local namespace or externally within a dependent assembly located elsewhere. However, before the loader performs its task, it examines a program executable (PE) file for all application information.