本书介绍微软最新的开发平台.NET。在介绍.NET的基础知识之上,还介绍了一些.NET的高级功能,如自动内存管理、线程以及更方便地访问所有系统的服务等功能。本书的代码充满趣味,而又极具参考价值;同时,本书的幽默写作风格,使本书更易于理解,更具可读性。\r\n 本书适合所有想了解.NET的技术人员、技术管理人员、学生、教师参考。\r\n
译者序\r\n前言\r\n\r\n第1章 引言 \r\n\r\n1.1 庞大的因特网\r\n1.2 标准提升:常见的基础设施问题 \r\n1.3 做最好的计划\r\n1.4 .NET究竟是什么 \r\n1.5 关于本书 \r\n1.6 歌唱硅片 \r\n\r\n第2章 .NET对象\r\n\r\n2.1 问题的背景\r\n2.2 解决方案的体系结构 \r\n2.3 最简单的例子 \r\n2.4 有关.NET命名空间的更多内容\r\n2.5 程序集 \r\n2.5.1 程序集的概念 \r\n2.5.2 程序集与部署\r\n2.5.3 程序集与版本策略 \r\n2.6 面向对象编程的特点\r\n2.6.1 继承 \r\n2.6.2 对象构造函数 \r\n2.7 .NET内存管理\r\n2.8 与COM互操作\r\n2.8.1 在.NET中使用COM对象\r\n2.8.2 在COM中使用.NET对象\r\n2.9 .NET中的事务 \r\n2.10 结构化异常处理 \r\n2.11 代码访问安全性 \r\n第3章 ASP.NET\r\n\r\n3.1 问题背景\r\n3.2 解决方案体系结构\r\n3.3 最简单的例子:编写一个简单的ASP .NET页面 \r\n3.4 关于Web控件的更多知识 \r\n3.5 管理并配置Web应用程序:Web.config文件 \r\n3.6 ASP.NET状态管理\r\n3.7 ASP.NET的安全性 \r\n3.7.1 身份验证\r\n3.7.2 Windows身份验证 \r\n3.7.3 基于窗体或基于cookie的身份验证 \r\n3.7.4 Passport身份验证\r\n3.7.5 授权 \r\n3.7.6 身份 \r\n3.8 进程管理 \r\n\r\n第4章 .NET Web服务 \r\n\r\n4.1 问题背景\r\n4.2 解决方案的体系结构 \r\n4.3 最简单的例子:编写XML Web服务\r\n4.4 XML Web服务的自我描述—WSDL文件 \r\n4.5 编写XML Web服务客户端程序 \r\n4.6 Visual Studio .NET中XML Web服务支持 \r\n4.7 XML Web服务设计问题 \r\n4.7.1 数据量大\r\n4.7.2 仔细考虑其状态\r\n4.7.3 处理异常 \r\n4.7.4 替换命名空间URI\r\n4.7.5 XML Web服务安全\r\n\r\n第5章 Windows窗体 \r\n\r\n5.1 问题背景 \r\n5.2 解决方案的体系结构 \r\n5.3 最简单的例子 \r\n5.4 更复杂的例子:事件和控件 \r\n5.5 在Windows窗体中容纳ActiveX控件 \r\n5.6 窗体改进 \r\n5.6.1 绘画 \r\n5.6.2 鼠标处理 \r\n5.6.3 菜单处理 \r\n5.6.4 键盘处理 \r\n5.6.5 对话框 \r\n\r\n第6章 . NET数据访问\r\n\r\n6.1 问题背景 \r\n6.2 解决方案的体系结构\r\n6.3 最简单的例子 \r\n6.4 一个较为复杂的例子:无连接操作 \r\n6.5 Visual Studio支持和类型化DataSet对象 \r\n\r\n第7章 处理XML \r\n\r\n7.1 问题背景 \r\n7.2 解决方案的体系结构 \r\n7.3 最简单的例子:基本串行化 \r\n7.4 一个比较复杂的例子:串行化控制 \r\n7.5 XML模式和串行化 \r\n7.6 通用分析 \r\n\r\n第8章 事件和代理 \r\n\r\n8.1 问题背景 \r\n8.2 解决方案的体系结构 \r\n8.3 最简单的例子 \r\n8.4 一个更为复杂的例子 \r\n8.5 代理 \r\n\r\n第9章 线程 \r\n\r\n9.1 问题背景 \r\n9.2 解决方案的体系结构 \r\n9.3 最简单的线程例子:使用进程的线程池 \r\n9.4 一个较为复杂的例子:线程安全 \r\n9.5 一个仍然比较复杂的例子:管理我们自己的线程\r\n\r\n第10章 Windows窗体控件\r\n\r\n10.1 问题背景\r\n10.2 解决方案的体系结构\r\n10.3 最简单的控件例程\r\n10.4 一个较为复杂的例子:扩展一个已存在的控件 \r\n10.5 UserControl举例:包含其他控件 \r\n\r\n第11章 Web 窗体控件\r\n\r\n11.1 问题背景\r\n11.2 解决方案的体系结构\r\n11.3 最简单的Web窗体控件例程\r\n11.4 更为复杂的Web窗体例程 \r\n11.5 视图状态管理\r\n11.6 客户端脚本程序\r\n后记和祝福\r\n作者介绍
我时常在想,这个被称为Microsoft .NET的产品听起来真的很酷。我还记得曾经阅读过Mary Kirtland发表在《Microsoft Systems Journal》杂志的1997年11月和12月两期刊物上的介绍COM+的文章,当时他指出COM+是能够为程序员提供各种各样有用服务的运行环境,例如,它可以提供跨语言继承和运行时访问控制的功能。作为使用COM的程序员,我非常喜欢COM+这种新的运行环境,因为它承诺可以解决我在COM中遇到的许多问题。
接着,微软决定将下一个版本的微软事务服务器命名为COM+ 1.0,而且还有可能将其集成到Windows 2000中,这也就是Mary Kirtland曾经说起的COM+ 2.0版。再后来,微软又将COM+重命名为Microsoft .NET,于是我自己生造了一个词MINFU来形容微软这种混乱的命名规则。不过,名称的混乱并不影响产品本身的优秀,它听起来的确是个很好的产品,所以当微软出版社问我是否愿意再写一本关于.NET的书籍时,我真的很激动,他们要求我能够像在《Understanding COM+》(微软出版社1999年出版)一书中介绍COM+ 1.0那样出色地在新书中介绍.NET。你手上拿着的,并且是我希望你购买的这本书就是我的成果。
我曾经担心微软不让我以自己的方式来撰写这本书,而是给我一些限制的条条框框。不过,好在这种担心在本书的写作当中并没有发生。我在本书中所讲述的任何内容,无论你赞同也好反对也好,代表的仅仅是我个人的观点。不过有一点是很明显的,即我喜欢.NET并且认为它能够给用户带来巨大的经济效益,微软也同意我的观点。当老板要你为自己找几个推荐人的时候,你会找一个认为你很优秀的人呢,还是找一个认为你比较平庸的人做推荐人呢?我所认识的大部分程序员都会在这两种类型的推荐人中各找几位。在本书的草稿完成之时,我曾收到了一些内部反映意见,有一位项目经理对于我在书中对.NET管理工具提出的批评表示了异议,并且写信给我说:“在我看来,你对于管理工具的这些意见使得本书更像是在作评论,而不是在讲授.NET的知识,这是你的初衷吗?”我回信说:“我对于本书既指出了.NET的优点又指出了其不足而感到非常自豪,在我的书中,既谈到了.NET带给我们的种种益处,也提及了我们因此而付出的代价。如果我只谈优点,就显得不够诚实了。恕我直言,我觉得这是在说明.NET的特性。如果你认为我不应该在书中一直使用‘在我看来’这样的词语,那么请原谅我的用词不当。”
我不能忍受干巴巴的阅读,就像我无法容忍吃干肉或干鱼一样。我还记得在大学第一年的生活,那时我为了给自己的化学实验报告增添几分生趣,就加进了几个笑话,谁知这却给我带来了不及格的惨痛打击。“科学容不得任何浮躁。”我的教授说,“重新做一次实验报告。并且通篇都要使用书面语。”他是我遇见过的惟一一个始终小心翼翼地把胡子修理成眉毛型的人。或许我的教授希望自己变得无趣,以使他的生命看起来更长久一些,但是他不应该因此而剥夺其他人的生活乐趣呀!
对于我来说,最好的作者就是最会讲故事的人,尤其是在科学和历史这样比较枯燥的领域里,更是如此。例如,我非常喜欢Laurie Garrett写的《The Coming Plague》(Penguin, 1995)和Evan S. Connell写的《Son of the Morning Star》(North Point, 1997)这两本书,以及William Manchester写的题为《The Last Lion》(Little Brown, 1983)的邱吉尔传记。再想一想你们的大学课本,由那些像我以前的教授一样的人编写的课本教材。哪一种书我们更不愿去读?下面再让我们来读一段文字,它讲述的是在1894年巴黎爆发一场大规模疾病时,Emile Roux发现青霉素以及首次用于人类实验的一段经历,其原文如下:
Roux looked at the helpless doctors, then at the little lead-colored faces and the hands that picked and clutched at the edges of the covers, the bodies twisting to get a little breath....
Roux looked at his syringes—did this serum really save life?
襓 Yes!?shouted Emile Roux, the human being.
襂 I don't know—let us make an experiment,?whispered Emile Roux, the searcher for truth.
But, to make an experiment, you will have to withhold the serum from at least half of these children—you may not do that.?So said Emile Roux, the man with a heart, and all voices of all despairing parents were joined to the pleading voice of this Emile Roux.
你还可以在1926年首次由Paul de Kruif出版的《Microbe Hunters》一书中找到Roux的选择及结果,该书几十年来再版过好几次,最近的一次是由Harcourt Brace公司在1996年重新出版的。这本书中没有太多学术性的客观论述,可是你更喜欢读哪一种书籍呢?我知道自己应该写哪种形式的书籍。我没有de Kruif那么好的口才,而且我也不大相信当我112岁的时候,还会有人重新出版这本书。但是,我已经尽我所能将这本书写得更通俗易懂,有多少科技作者尝试过这么写作呢?
De Kruif在他的书结尾处写道:“This plain history would not be complete if I were not to make a confession, and that is this: that I love these microbe hunters, from old Antony Leeuwenhoek to Paul Ehrlich. Not especially for the discoveries they have made nor for the boons they have brought mankind. No. I love them for the men they are. I say they are, for in my memory every man jack of them lives and will survive until this brain must stop remembering.”正如我在本书的后记中所说的那样(现在跳到那儿不合适;你必须先读完这本书),因特网使人类得到了进化。Microsoft .NET就是要做这方面尝试的一个产品。我觉得自己能被选中向读者介绍.NET,并且以我自己的讲述方式来编写本书实在是一件很荣幸的事情。我之所以放弃了原来的出版社,而选择了微软出版社,就是为了更好地与他们的项目小组进行交流,与他们探讨将来会是怎样的以及为什么会是那样。早期的读者曾经说过我的文字成功地做到了这一点。我的确是做过这方面的努力,希望他们是对的。
任何一本书都是一个集体劳动的结晶,就像一次卫星发射一样,只不过规模要小得多。书的作者就像宇航员一样获得了诸多的荣誉,但是如果没有其他人为本书作出的辛苦劳动,你是无法读到本书的。就像阿波罗项目组中数千个成员一样,该书背后的大部分工作者都不为人们所知。(虽然我觉得在电影《阿波罗13号》中,由Ed Harris 扮演的飞行控制员Gene Kranz抢了Tom Hanks扮演的Jim Lovell的风采。)除非有人把本书拍成电影,否则恐怕没有多少人知道这些幕后工作者付出的贡献。
这里首先要感谢本书的主编John Pierce先生。在我几年前写《Understanding COM+》(微软出版社出版)一书时,他就是那本书的副主编。我很高兴这次他能成为我这本书的主要负责人。他和我一样很有幽默感。我知道他不会批评我的写作风格,或者改变我的写作语调,不管你喜欢也好讨厌也好,你肯定认为我的写作基调的确是与众不同的。John Pierce帮助我把文字以更好的方式组织起来,这一点要比我自己做得好。
其次还要感谢本书的技术编辑Jean Ross和Marc Young先生。他为我所有的技术问题一一作出了解答,而且往往是在时间紧迫、代码经常变化的情况下为我解答的。除了Jean和Marc以外,还有很多.NET开发项目小组的成员都抽出自己宝贵的时间为我解答疑难。在此我要特别感谢Susan Warren、Keith Ballinger、Mark Boulter、Loren Kohnfelder、Erik Olson、John Rivard、Paul Vick、Jeffrey Richter和Sara Williams等人。
Ben Ryan早在一年前就开始了收集信息工作,在他离开后Danielle Bird又接手了该工作,最后阶段是由Anne Hamilton完成的。微软出版社的产品经理Teresa Fagan一听到《Introducing Microsoft .NET》这个题目,马上就想到了一个好主意,他说:“嘿,你可以让它成为一个Web站点。”于是,我立即冒雨冲回我的写作室,在其他人有所动作之前抢先一步实施该计划。它好比是圣代冰淇淋上的草莓。
最后,我要感谢我的妻子Linda,现在她已经是我们可爱的女儿Annabelle的母亲了。Annabelle现在不仅会叫出单个对象(“Simba”)和调用这些对象的方法(“Feed Simba”),而且还知道对象是类的实例(“Simba is a kitty cat”)。
大卫·S·普拉特(David S. Platt)
www.rollthunder.com
美国马萨诸塞州伊普斯威奇
2001年4月和2002年3月
无封面