First, give me a 10 sentence summary of .NET.
.Net (pronounced “dot net”) is primarily a Microsoft development environment that is used to create multi-tiered web based enterprise applications or to develop applications that integrate nicely with other enterprise applications, or both. There are three core pieces of .Net:
- A runtime environment that .Net applications rely on to execute. That environment might provide, for example, front end support for the web user interface and also provide back end business logic and database support for a company’s order entry, inventory management, or data warehouse systems.
- A bunch of development tools to make the applications that run in that runtime environment.
- Microsoft throws in a number of other loosely related products and services under the name “.NET” since it makes everything sound integrated .
Microsoft's web site talks about all this "web services" stuff. What's that?
Recently, Microsoft is particularly stressing .NET’s support for integration with other enterprise applications regardless of what hardware they run on or what language they are written in. They have selected Web Services as the primary technology to implement their interoperability requirements. Web Services are certainly not unique to .NET, but .NET does support the web services set of standards for getting different computer programs on various hardware and software platforms to talk to each other.
What are the two key strategies of .NET?
When originally released, software industry pundits identified the emergence of two key Microsoft strategies with the release of .NET. First, since .NET provides the same runtime architecture to a number of software programming and scripting languages, Microsoft was seen as appealing to a larger development community than their arch nemesis J2EE, which only supports Java . Second, .NET provides the ability for applications to talk to non-Microsoft systems like UNIX, Linux, or AS/400 via Web Services. This showed a new emphasis on integration and openness. It is this second strategy that turned out to be the more important of the two, as you can now judge by going to Microsoft’s .NET web page, which has been revised to talk almost exclusively about integrating systems together. Microsoft no longer seems to stress how .NET allows C, Java, COBOL, and other language applications within the same company (or even within the same program) to blend together. However, the ability to select from a wide variety of programming languages remains a core principle of the internal .NET architecture.
What problem is .NET intended to solve?
Putting all web services hype aside, .NET is really Microsoft’s very respectable solution to the industry-wide problem of resolving the tension between server side applications and client server applications. Server side apps have the key advantage of centrally managing an application’s software maintenance and upgrades. With server-side apps, an administrator might have to maintain only a single machine that services, say, 1000 corporate users, while that same administrator would otherwise have to administer all 1000 client machines for a client server app. Server side architectures come with drawbacks too, however. Client side apps tend to have much clearer and quicker user interfaces than server side web page based applications. .NET provides the advantage of low maintenance server side apps, but at the cost of a somewhat degraded user experience as compared to client-server applications (but not as degraded as its J2EE competitor, which values operating system portability over user interface quality).
Seems like everything Microsoft sells has ".NET" somewhere on the package. What's up with that?
The term .NET encompasses so many different tools and standards that the product suite can seem completely different depending on how it is described and what features are emphasized. It’s amazing how the description of .NET differs from source to source, which is an indication of how loosely it is defined. Nevertheless, from a very high level, .NET consists of these parts:
- Visual Studio – This is the development environment for .NET applications. It supports C#, Managed C++, Visual Basic, JScript, Visual J# and some other languages. This is the tool that developers use to type in their source code and to debug.
- The .NET Framework – This is all the underlying technologies (libraries, object files, executables, etc.) that Visual Studio relies on during development. It’s also all the supporting files needed at runtime. It’s the most complicated layer so we’ll come back to it in a bit.
- The .NET Enterprise Servers – This is a collection of enterprise-class applications designed to support lots of users, information, and machines. They don’t always have all that much to do with the core .NET technology ideas, but by renaming them with a “.NET” prefix, the products appear to be more up-to-date and integrated. Many of these products do not use the underlying .NET framework at all. The .NET “servers” include Advanced Server (a supped-up Windows operating system), SQL Server (a database management system), Exchange Server (for e-mail, calendaring, etc.), Application Server (a system administration tool), BizTalk Server (a document management and information flow application), Commerce Server (for an advance starting point when developing on-line stores), and ISA Server (for security).
- .NET Services – .NET Services is a collection of Internet accessible web services that are sold by Microsoft. This is a set of services that store data for you that you might want on different devices such as your laptop, home desktop, office desktop, cell phone, and PDA. For example, you may want to store contacts in a single location so the information is accessible from all of these devices. You may want to answer e-mail from different locations without having to manually replicate the messages. You may want a single password to access all your computers. Microsoft also offers a “wallet” service so that various internet vendors can bill you from a central, secure location. There’s a lot of competition to these types of remote convenience services from Google, Amazon, Delicious.com, and many others.
If all of that is .NET, what's the most important part of it?
Let’s peel away the less important parts of .NET to get to the core. The first outer layer - the .NET Enterprise Servers offering - is a collection of optional supporting infrastructure elements to .NET applications and arguably independent of the core technology. .NET Services are an engaging idea, but more a result of .NET than a part of it. The inner layers - the most important parts of .NET - are the development and runtime tools. Visual studio is an extremely powerful development environment that supports proprietary languages that are tuned to take advantage of the .NET Framework. The .NET Framework is really the core of the .NET vision, which is used to support server side enterprise applications.
In 3 sentences or less, tell me about the .NET framework
The .NET Framework is center stage, so much so that many authors leap right to a discussion of the Framework components when describing .NET and omit all the other pieces we’ve covered in the previous paragraphs . It is this Framework that provides the capability for a single application to be composed from software segments written in multiple languages and it provides the much-touted web service support as well. It is also the framework that offers up a development infrastructure that encourages server-side architectures.
Quickly, what are the key parts of the .NET Framework?
While it is important to understand that the .NET Framework is central, it’s also easy to get mired down in its details when trying to understanding the technology as a whole. It’s best to just know that the six or so key areas of the .NET Framework are:
- Web Service Support – The framework provides routines that developers can call (from any .NET-supported language) to talk to remote web services (essentially programs running on other computers written in other languages in the same company or across the internet).
- Windows Forms Support – Provides the ability to build client-side (as opposed to web page) user interfaces.
- Web Forms Support – If you choose to, you can make the assumption your users will be running on Windows machines and use Web Forms to develop fancier web page user interfaces that download small pieces of user interface functionality to the local machine. This gives the user interface a more native look because the interfaces directly use some of the capabilities of the local operating system, even though each display is still a web page.
- Data Classes – The Web Service, Windows Forms, and Web Forms layers all rely on the data classes. This layer includes support for ASP.NET (to build web pages), ADO.NET (to access data), XML, XPath (to find items in an XML file), SQL, etc.
- Framework Base Classes – This is the standard set of general programming utilities that come with any software development package. The classes provide the ability to readily construct linked lists, convert date/time information to various formats, perform file I/O, manage threads, perform security checks, alter strings, talk over the network, etc. All languages come with utility routines of this sort.
- Common Language Runtime – The CLR provides the runtime foundation for the entire .NET Framework. It is extremely similar to Java’s virtual machines (JVMs), only with a slightly different bent. The key difference between the CLR and a JVM is that JVMs accept only Java and can run on any hardware. Conversely, the CLR accepts a number of different languages (even if they are intermingled in the same application) but can only run on a Windows operating system, which limits hardware selection. In order to support the mixing of multiple languages (like C#, J#, Basic, Cobol, etc.) within a single application, .NET programs are not compiled into an EXE file. Rather, the source code is compiled into an “intermediate language”. This intermediate language is processed at runtime and converted into the format the local CPU expects just prior to the execution of the instructions (by “just in time” compilers).
.NET has a bunch of pieces. How does all of this look when deployed on real computers?
It really helps to understand .NET architectures by seeing how different machines with different software are typically laid out. Oddly enough, this essential diagram is relatively hard to find out there on the Internet. So we’ve constructed a common physical topology for an enterprise class .NET environment in the diagram below. Each box represents a different physical server:
Sample .NET Physical Topology
Multiple servers at each layer provide failover protection and increase performance. So, for example, the diagram above shows two HTTP Servers, but there might be 20 HTTP Servers depending on the system’s failover and performance requirements. Additional firewalls can be added at various places in the network for a very highly secure architecture (as might be found in a large financial institution).
What are the most common mistakes people make who decide to use .NET?
So how well does .NET work, especially in comparison to J2EE and the other alternatives? What are .NET's strengths and weaknesses, and what are the most common mistakes made on .NET projects? Where will .NET be in 10 years? Sure - what you’ve learned from this web page (an excerpt from our .NET chapter) can be gradually gleaned by Googling “.NET” and wading through various confusing web pages. But coherent answers to these other harder questions are much harder to come by. Isn’t it worth a few bucks to avoid disaster? Not only will you get the answers to these questions, but you'll get them for a number of other commonly used and frequently troublesome technologies as well. You might be surprised at the content in our "Common Mistakes" sections, which are thorough and don't just discuss the obvious. Leverage off the experience of consultants who have spent years in the trenches dealing in cold, hard, gritty reality (rather than in theory or proof-of-concept projects). Click the “Buy Now” button below and protect your job!