.NET 描述了两种编程模型
在技术层面上,.NET平台的基础包括:扩展置标语言,也就是我们熟悉的XML;简单对象操作协议(Simple Object Access Protocol ,SOAP);以及将未来的Internet 视为面向各种设备的服务的观念。这些高层次的描述主要是面向这个新的模型中最明显的方面——也就是实现Web服务的部分。
然而,在内部,.NET平台建筑于.NET架构之上,.NET架构提供了实现这些概念的API的底层机制。.NET架构也经历了.NET本身的问题——就是它被用于描述太多的事情了。特别是,.NET 描述了两种新的不同的编程模型,他们构成了概念的基础:这就是Web服务编程模型(Web services programming model )以及系统编程模型(system programming model)。
企业一定要认识到,组成.NET的是两个相互独立的编程模型。Web服务编程模型与底层的系统编程模型是相互独立的。这些编程模型可以也应该分别使用。
.NET Web服务编程模型
.NETWeb服务编程模型大体上就是通过Internet的各种标准来实现各种接口。这是一组以Internet标准为基础的松散的模型,使用HTTP和其它的协议作为主要的通讯机制,同时,使用了XML,SOAP,Web服务描述语言(Web Services Description Language,WSDL),以及通用描述,发现,集成(Universal Description, Discovery, and Integration , 简称UDDI)。最初,多数这种编程模型的使用将采取请求/应答的模式。
在2003年,Web服务的主要形式将是组件调用以及信息推送,这些在所有Web服务中占到75%以上。更长远的未来,我们认为“协调组织”了的工作流或者服务将成为Web服务的主力,很多这些编程模型已经出现了,比如SOAP和其它一些出现在.NET以前的技术,而且这些技术现在就是可用的,在正式的.NET产品以前就有了。
作为日益增多的Web服务体系的一种,.NET架构提供了与底层的系统API以及组件模型无关的编程模型。这也体现了Microsoft和其它一些公司在上个世纪90年代对分布式计算的看法,并且通过一个简单的方法借助Internet得到了实现。服务以服务器上的程序的方式来实现,这些程序使用标准的协议与调用的程序进行对话。
如果需要在一个系统中的一个进程中进行跨组件通讯,或者是跨越.NET架构系统或多个进程进行跨组件通讯,.NET架构可以使用SOAP或者或者是二进制协议进行通讯。如果进行跨系统环境(比如,和非.NET架构系统)进行组件通讯,.NET架构可以只使用SOAP。在一个系统上运行的程序和服务仍然使用COM,不过以后慢慢将会变成使用.NET中的新类。
理论上,这些程序还可以是在UNIX上实现的Enterprise JavaBeans ,不过Microsoft没有为此提供什么帮助。但是要记住.NET Web服务编程模型是不依赖.NET 系统编程模型的。
.NET 系统编程模型
作为.NET平台的一部分,Microsoft也建立了新的系统编程模型,同样在.NET架构上得到了实现。.NET 系统编程模型在长远看将最终取代COM以及Windows API,这个现在还没有定名的模型使用了新的基础类。
.NET 架构(.NET Framework )包含了Microsft 新的通用语言运行时(Common Language Runtime , CLR),可以支持新的编程模型,并且首次将真正的面向对象的类结构作为了运行时环境的一部分。COM的界面为开发者提供的功能在.NET 架构中也是可用的。
.NET 系统编程模型是Microsoft私有的,虽然有些部分被开放,这要归结于欧洲计算机制造商联合会(European Computer Manufacturers Association , ECMA) 在C#标准化方面的努力。.NET 系统编程模型还包含了一些类和机制,可以将现存的程序转化为Web服务,这样可以简化Web服务的开发,虽然这样的设置并不是十分有必要。
Microsoft的主席Bill Gates 将这种向.NET平台的迁移比作和从DOS到Windows一样意义重大。不过我们觉得更加准确的比较应该是这种迁移类似于Win16向Win32 的迁移。在向Windows的迁移中,DOS下的程序立刻成为了过去,而Win16的应用则在很大程度上和Win32兼容。
另一个比较好的比较是把.NET比作当初Mirosoft实现自己的Java时的情况,当时Microsoft将Java类和组件包装为COM组件,Microsoft了解到了将两种模型相互映射的好处,现在Microsoft开始发展这个还没有名字的新的组件模型,他们再次将新旧模型进行了映射和包装,旧模型就是COM,Microsoft在这里的真正意图之一是去掉对Java的需求。