1 底层操操作系统 windows
由于Web服务和使用Web服务的应用程序仍然运行在计算机上,而且既然是计算机都 要有外设,所以我们仍然需要一个操作系统.. Windows添加了Xml支持.. Windows XP和Windows.net (现在改名为windows Server 2003 ) 所有版本都都 为服务驱动的世界提供最好的支持.
特别地windowsXp和Windows 2003 Server 集成了Microsoft .net Passport Xml Web服务支持.Passport是一种用户认证服务..当登录使用Passport认证的Web站点和Web服务时的效率将会大提升.换句话说,用户在访问不同的互联网着站点时,将不再需要每次都输入用户名和密码.
另外Windows XP 和 Windows Server 2003 都提供了对.net框架的内置支持.
2 辅助产品:.net 企业服务器
这些产品主要是为企业的信息化和信息集成提供帮助的.
Microsoft Application Center
Microsoft BizTalk Server 2000 (现在出了个新版本)
Microsoft Commerce Server 2000
Microsoft Exchange 2000 邮件服务器
Microsoft HostIntegration Server 2000
Microsoft Internet Security and Acceleration(ISA) Server 2000
Microsoft Mobile Information Server 2002
Microsoft SQL Server 2000
这个产品刚开始跟我们的.net平台其实没什么关系.但以后可能为将一些.net特性集成到这些这些产品中, 目前新版的BizTalk 就集成了.net特性,差且通过vs.net 2003进行开发.
3 Microsoft XML Web 服务: .net My Servers
微软作为一个Web服务的底层技术提供商的同时,也推出了自己的XML Web服务
.net Alerts
.net ApplicationSettings
.net Calendar
.net Categories
等等……
4开发平台:.NET 框架
.net 框架包含两个部分: 通用语言运行时(Common Language Runtime---CLR) 和.net 框架类库(Framework Class libarary --FCL) .
.net 框架是.net平台最关键的部分.
这次讨论的就是开发面向.net 框架的应用程序和XML Web服务.
.net 框架开发平台可以允许我们创建各种各样的应用程序:XML Web服务、Web窗体,Win32 GUI程序,Win32 CUI 应用程序, Windows服务、实用程序、以及独立的组件模块。
Windows 2003 Server 内置了.NET框架
Microsft .net 框架为开发人员提供的技术比任何以前的微软发平台提供的技术都要多,比如代码重用、代码专业化、资源管理、多语言开发、安全、部署、管理等。在设计.net 框架时,微软还感到有必要改进目前Windows平台的某些缺陷。
CLR和FCL提供的部分服务:
l 一致的编程模型
现在的Windows操作系统,某些功能需要通过动态链接库DLL来访问,而某些功能又是通过COM对像来访问。 在.net 框架下,所有的应用程序服务都将以一种一致的、面向对像的编程模型提供给开发人员。
l 简化的编程方式
CLR的其中一个目的就是简化Win32和COM 环境下所需要的各种繁杂的基础构造。在CLR下,我们可以不需要 注册表、全局惟一标识符、Iunknown 、AddRef、Release、HRESULT等。
l 可靠的版本机制
.net 框架采用了一种新型的版本机制来隔离应用程序组件,可以保证一个应用程序总能加载当初生成的测试时所使用的组件。 彻底关上了“DLL hell“的大门。
l 轻便的部署管理
在.net框架下,组件将不再受注册表的任何引用。大多数.net框架应用程序的安装工作所需要的只不过是将文件拷贝到一个目录中。然后添加快捷方式都桌面、开始菜单就行了
l 广泛的平台支持
编译后的.NET框架的源代码实际上是通用中间语言(Common Intermediate Language) 只有在运行时,CLR才会将这些中间语言翻译为CPU指令。这就意味着只要一台机中包含有与ECMA兼容的CLR和FCL,我们便可以将.NET框架应用程序部署在该机上。
l 无缝的语言集成
CRL要求所有面向它的语言都要遵循一种称作通用类型系统(Common Type System,简称CTS)的规范和通用语言规范
l 简便的代码重用
l 自动化的内存管理(垃圾收集)
CLR为我们自动追踪资源的使用情况。
l 坚实的类型安全
CLR可以确保所有的代码都是类型安全的。
l 丰富的调试支持
CLR完全支持跨语言调试
l 统一的错误报告
CLR中,所有的失败的调用是通过异常来报告的。
l 全新的安全策略
传统的安全机制都是基于用户账号来控制的。
CLR中的代码访问安全为我们提供了以代码为中心的控制方式。
l 强大的互操作能力
.net框架完全支持COM ,以及传统DLL中的Win32函数。
5 集成开发环境 Visual Studio .Net
微软的Visual Stuaio .net 2003是最好的.net 框架应用程序开发工具。
总结:
这一章主要讲了.net平台的构成和.net平台的最关键部分---CLR和FCL的特点。
.net框架的13大特点:
1. 一致的编程模型
2. 简化的编程方式
3. 可靠的版本机制
4. 轻便的部署管理
5. 广泛的平台支持
6. 无缝的语言集成
7. 简便的代码重用
8. 自动化的内存管理(垃圾收集)
9. 坚实的类型安全
10. 丰富的调试支持
11. 统一的错误报告
12. 全新的安全策略
13. 强大的互操作能力
其实我个人感觉第5条目前来说还不是很有意义 ,因为至现在为止.net框架只能在windows上很好的使用,听说出了个mono但目前还不是很成熟吧? 第12条其实非常重要,基于用户帐号的安全机制对于互联网来说是不太安全的,这直接会影响到.net的普及程度,也就影响到我的饭碗 :)。
还有就是微软的那些企业服务器我只知道一部分的用途,另一部分压根不知道是干什么用的。也没有时间主动去找相关资料。前段时间参加了微软开发者日才知道BizTalk是干什么用的。那个主讲人也挺牛。资料上写的晕晕乎乎的东西,被他讲的清晰明了,一听就懂啊。
技术或语言特性或者说一些集成方案,只有了解它,才会去主动去使用它,但问题是,很多情况下不使用它也可以正常工作,只不过花费的时间和代价更高。而我在用更高的代价解决问题时,并不知道有一种更好的解决办法存在,而且就在我身边。我没有太多时间去研究层出不穷的名词背后的技术和特性。
有两个办法解决这个问题: 尽量的去了解各种新的事物,哪怕你刚开始认为它跟你的工作和兴趣风牛马不相及。另外一个就是期望那些提供商(比如微软)在宣传时更多的突出 程序员可以用那些产品解决实际应用中的哪些问题。(起码面像程序员的宣传是这样的)
直到听了BizTalk讲座,我才知道这个东西其实是很适合我们公司。我们可以通过BizTalk解决很多棘手的问题。
第一章:Microsoft .net 框架开发平台体系架构
本章的目标:对.net框架体系架构有一个总体的认识,并对.net框架中出现的一些新的技术和术语有一个基本的了解。
1.1 将源代码编译为托管模块
关于编程语言的选择
.net框架的核心是通用语言运行时,顾名思义它是一个可被各种不同的编程语言所使用的运行时。CLR的很多特性可用于所有面向它的编程语言,如果CLR用异常来报告错误,那么所有面向它的语言都将通过异常来得到错误报告。如果CLR允许我们创建线程,那么所有面向它的语言也都可以创建线程。
实际上CLR在运行时对开发人员用何种编程语言来完成源代码一无所知。这意味着我们应该选择那些能够最容易表达我们意图的编程语言。我们可以用任何自己喜欢的语言(面向CLR的)来编写代码。
不同的编程语言允许我们使用不同的语法进行开发,不同的语法对于我们解决各种问题的难易程度是有影响的,例如:对于数学或者金融应用,彩用APL语法更快。
微软已经创建了以下几种面向CLR的编译器 :
托管扩展C++
C#
Visual Basic
Jscript
J#
IL汇编器
我们可以用任何支持CLR的编程语言来创建源代码文件。然后用相应的编译器来做语法检查和源代码分析。最后生成托管橡块。
托管模块
托管模块是一个需要CLR才能执行的标准Windows可移植可执行(Portable executable,简称PE)文件。
托管模块的组成部分:
l PE表头
标准Windows PE文件表头,类似于通用对像文件格式表头。该表头指出了文件的类型:GUI(图形用户界面),CUI(控制台用户界面),或者DLL. 此处的DLl并非我们理解的传统的windows 动态链接库文件,虽然都叫DLL,但,net平台中的DLL指程序集文件的一种形式),该表头还包含文件创建时间。对于包含CPU代码的模块,该表头还会包含有关本地CPU代码的一些信息
l CLR表头
包含标识托管模块的一些信息(可以被CLR或者一些实用工具解析)。
1、 CLR版本号
2、 托管模块入口点方法(Main方法)的元数据标记
3、 托管模块的元数据标记
4、 资源
5、 强命名
6、 其他一些意义不是太大的信息的位置和尺寸
l 元数据
每个托管模块都包含有一些元数据表。元数据表主要分两种,一种用于描述源代码中定义的类型和成员,一种用于描述源代码中的引用类型和成员。
l 中间语言(IL)和代码
编译器在编译源代码是产生的指令。CLR在运行时会将IL代码编译成本地CPU指令
元数据(metadata)就是一个数据表的集合,在这些表中,其中一些用于描述托管模块中所定义的内容(比如所定义的类型和它们的成员,另外一些用于描述托管模块中引用的内容(比如被引用的类型和它们的成员)。元数据总是和包含IL代码的的文件相关联。
元数据的用处:
1、省去了源代码编译时对头文件和库文件的需求,
2、Visual Studio .Net可以利用元数据来辅助我们编写代码。智能感知就是这样做的。
3、可以序列化和反序列化
4、垃圾收集器可以追踪对像的生存期。
1.2 将托管模块组合为程序集
CLR实际上并不和托管模块打交道,它直接打交道的对象是程序集(assembly).程序集是一个抽象的概念,刚开始往往很难理解。首先,程序集是一个或多个托管模块,以及一些资源文件的逻辑组合。其次,程序集是组件复用,以及实施安全策略和版本的最小单位。根据我们对编译器和相关工具所做的选择,程序集可以是一个文件或者多个文件。
默认情况下,编译器会将产生的托管模块转换为一个程序集。也就是说,c#编译器产生的是一个我包含了清单的托管模。其中的清单表明程序集中仅包含一个文件。对于仅包含一个托管模块,并且没有资源(或者数据)文件的项目来说,程序集就是托管模块,而且在创建过程中,不需要执行任何其他的步骤。
程序集中的模块还包含它所引用的程序集的一些信息(如版本号信息)。这些信息使得一个程序集得以实现自描述(self-describing)。换句话说,CLR知道执行一个程序集所需要的所有内容,它不需要再在注册表或者活动目录中获取额外的信息。因此,程序集的部署要比非托管组件的部署容易得多。
1.3加载通用语言运行时
一个程序集或者是一个可执行应用程序,或者是一个包含供可执行应用程序使用的一组类型(组件)的DLL。CLR负责管理包含在程序集中的代码的执行。这意味着宿主机器必须安装.net框架。微软已经创建了一个可以将.net框架免费安装到客户机上的分发包。.net框架最终会和将来的Windows打包在一起,这样我们就不需要将它和我们的程序集放在一起来发布了。
我们可以通过在%windir%\system32目录下查找MSCorEE.dll文件来判断一个机器中是否安装了.NET框架。如果想确定一个机器中安装了哪些版本的.NET框架,可以查看下面的注册表键的子键:
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ policy
当生成一个EXE程序集时,编译器/链接器会产生一些特殊的信息,并将它们嵌入到结果程序集的PE文件表头及其各个组成文件的.text部分。当EXE文件被调用时,这些特殊的信息将导致CLR被加载并初始化。CLR随后会定位至应胜程序的入口点方法,从面以此来启动应用程序。
类似地,如果是一个非托管应用程序通过调用LoadLibrary来加载一个托管程序集,那么该托管程序集DLL的入口点函数也会知道去加载CLR来处理包含在其中的代码。
托管EXE加载并初始化CLR的过程
1.MSCorEE检查CLR表头以获得Main方法的元数据标记。
2.MSCorEE 检查Main方法的元数据以获得其IL在托管EXE中的位置。
3.MSCorEE 将Main方法的IL编译成本地CPU指令。
4.MSCorEE跳转到Main方法编译后的本地CPU指令上(使用主线程)
5.应用程序开始运行。