久闻Mircosoft Press的《Programming Microsoft ASP.NET 2.0 Core Reference》的盛名,很想拜读一下,而他的中文译作——清华大学出版社的《ASP.NET 2.0技术内幕》在网上却被骂的一塌糊涂。由于英文原版的实在太贵,看电子版的实在太累,出去无奈我还是决定买一本中文版的见识一下。果真翻译的一塌糊涂,连起码的语句都不通顺,很是失望,尽管早有思想准备,但还是超出了我的承受能力。对于出版社和译者我也不想多说什么了……
昨天才在China-pub上看到名叫Renart网友贴出了该书的147处民间勘误,很是感动。(原文是2007年6月贴出来的,相见恨晚啊。)我立即将其复制下来,并对文本的格式做了优化,一来方便自己查看,二来给更多的正在看此书的网友分享。
1.
【位 置】:2页2段。
【原 译 文】:“ASP.NET是过去10年内先后发展起来的Web开发技术的巅峰——一种在目前构建通过HTTP协议传输的分布式应用的技术中,Web开发技术建立在另一种技术的基础之上,并且每种技术都弥补了其前辈的缺陷。因此,ASP.NET是最先进、特征最丰富而且功能最强大的平台。”
【英文原文】:“ASP.NET is the culmination of Web development technologies that rapidly followed one another in the past ten years—one building on another, and each filling the gaps of its predecessor. As a result, ASP.NET is currently the most technologically advanced, feature-rich, and powerful platform for building distributed applications transported by the HTTP protocol.”
【评 语】:任何一个读者,翻开书的正文的第一页就看到这样一段狗屁不通的译文,不啻当头挨了一棒。
【建议译文】:在过去十年中,一系列Web开发技术接踵而来,它们一个构建于另一个的基础之上,每一种技术都弥补了其前代技术的一些欠缺之处。ASP.NET是这一系列技术中的巅峰之作,因而是用于构建以HTTP协议为传输手段的分布式应用的目前技术上最先进、最富特色和最强大的平台。
2.
【位 置】:3页14行。
【原 译 文】:“最后,因为JSP是J2EE(Java 2 Enterprise Edition)平台的一个关键要素,所以它依靠Java语言。Java语言是最好的已编译语言,ASP和LAMP平台使用的脚本语言则不同。那么,ASP.NET是怎么做到正好合适的呢?”
【英文原文】:“Finally, because it’s a key element of the Java 2 Enterprise Edition (J2EE) platform, JSP relies on the Java language, a first-class, compiled language as opposed to the scripting languages used by both ASP and LAMP platforms. So how does ASP.NET fit in exactly?”
【评 语】:“Java语言是最好的已编译语言”这种译法的问题先前已有网友指出。而“So how does ASP.NET fit in exactly?”这一句不太好译,我先给出一个译法,请诸位指教。
【建议译文】:最后,作为Java 2企业版(J2EE)平台的一个关键元素,JSP依赖于Java语言——一种不同于ASP和LAMP平台所使用的脚本语言的一流的编译型语言。那么,ASP.NET又何以安身立命呢?
3.
【位 置】:3页倒11行。
【原 译 文】:“ASP.NET提供了大量特别吸引人的功能、工具和强大的系统特征,它们可以在对HTTP编程模型进行抽象的覆盖表达式工具内进行有效的组合,从而为ASP.NET锦上添花。”
【英文原文】:“And as icing on the cake, ASP.NET delivers a wealth of goodies, tools, and powerful system features that can be effectively grouped within the blanket expression tools for abstracting the HTTP programming model.”
【评 语】:“覆盖表达式工具”是什么意思?这句话很费解,我也译不出来,请诸位指教
4.
【位 置】:4页3行。
【原 译 文】:“HTTP协议的无状态性引入了与桌面开发人员无关的大量不同的编程概念——这些概念中最主要的是会话状态管理。”
【英文原文】:“The stateless nature of the HTTP protocol introduces vastly different programming concepts that are foreign to many desktop developers—first and foremost among these concepts is session state management.”
【建议译文】:HTTP协议的无状态禀性引入了让许多桌面开发人员感到陌生的、与桌面开发大相径庭的编程概念,其中首要的一个,是会话状态管理。
5.
【位 置】:6页倒4行。
【原 译 文】:“带下载请求http://www.contoso.com/default.aspx页面的报文可以采用如下简单形式:”
【英文原文】:“The packet with the download request for http://www.contoso.com/default.aspx can take the following simple form:”
【建议译文】:含有对http://www.contoso.com/default.aspx的下载请求的报文可以采用如下简单形式:
6.
【位 置】:8页9行(不计代码所占行)。
【原 译 文】:“例如,不是保留一个简单的名称/值对,EmpCode变量移入一个应用级的集合(Request.Form)中。”
【英文原文】:“For example, instead of remaining a simple name/value string, the EmpCode variable is moved within an application-wide collection—the Request.Form collection.”
【建议译文】:例如,EmpCode变量会被转移到一个应用程序范围内的集合——Request.Form之中,而不是停留在一个简单的名/值字符串形式。
7.
【位 置】:9页倒5行。
【原 译 文】:“更精确地讲,它是一个服务器端组件(一个ASP.NET控件)的标记占位符——实际负责向浏览器提供服务的最终标记。”
【英文原文】:“More precisely, it is the markup placeholder of a server-side component—an ASP.NET control—that is actually responsible for the final markup served to the browser.”
【评 语】:狗屁不通。
【建议译文】:更确切地说,它是一个服务器端组件(一个ASP.NET控件)的标记占位符,最终提供给浏览器的标记实际上是由那个控件负责生成。
8.
【位 置】:10页4行。
【原 译 文】:“这是由<fom>标签的runat属性集来执行的。”
【英文原文】:“The magic is performed by the runat attribute set for the <form> tag.”
【建议译文】:这是<form>标签中设置的runat属性玩的魔法。
9.
【位 置】:12页15行。
【原 译 文】:“在浏览器中显示该页面时,控件负责发送HTML代码。”
【英文原文】:“The control is responsible for emitting HTML code when the page is rendered to the browser.”
【评 语】:都已经到了在浏览器中显示页面的时候,还有(服务端)控件存在吗?
【建议译文】:在向浏览器提供页面时,控件负责产生HTML代码。
10.
【位 置】:16页倒5行。
【原 译 文】:“从ASP.NET 2.0版本开始,ASP.NET采用了一个新的控件适配器构架,允许任何服务器控件创建适合各种浏览器的替代图形。”
【英文原文】:“Starting with version 2.0, ASP.NET ships a new control adapter architecture that allows any server control to create alternate renderings for a variety of browsers.”
【评 语】:这个“替代图形”从何说起?
【建议译文】:从2.0版开始,ASP.NET采用了一个新的控件适配器架构,它使服务器控件能够为各种浏览器产生替代性的输出结果。
11.
【位 置】:22页倒14行。
【原 译 文】:“在ASP.NET 1.X中,会话状态可以存储在一个与正在运行的应用相分离的进程中——而不管正在运行的应用是SQL Server还是Windows服务(ASP.NET状态服务器)。”
【英文原文】:“In ASP.NET 1.x, you can store the session state in a process separate from the running application—be it SQL Server or a Windows service (the ASP.NET state server).”
【评 语】:我怀疑译者是否真正用过ASP.NET。
【建议译文】:在ASP.NET 1.X中,可以将会话状态存储在一个不同于所运行的应用程序的进程中,这可以是SQL Server或者Windows服务(ASP.NET状态服务器)。
12.
【位 置】:29页倒数6行。
【原 译 文】:“我们的工作所需的所有项目,诸如引用、数据源连接器、文件夹和文件,分成两个层次:解决方案和项目。解决方案容器包含多个项目,而项目容器通常存储多个项目。”
【英文原文】:“All items required by your work—such as references, connectors to data sources, folders, and files—are grouped at two levels: solutions and projects. A solution container contains multiple projects, whereas a project container typically stores multiple items.”
【评 语】:“item”一词有时的确可译项目,但此处决不能这样译,因为会与“project”一词混淆。可译“事物”、“实体”、“元素”。
【建议译文】:你的工作所需的所有事物,诸如引用、数据源连接器、文件夹和文件之类,分为两个层次进行组织。一个解决方案包含了多个项目,而一个项目通常存储多个事物。
13.
【位 置】:40页倒3段。
【原 译 文】:“注意,一个空页有如此多的建议。除此之外,还要求我们将方案和标题与基于时间的媒体跟踪进行同步,并保证不单单使用颜色传达信息。”
【英文原文】:“Note how many recommendations you get even for an empty page. Among other things, you’re invited to synchronize alternatives and captions with time-based multimedia tracks, and to ensure that you don’t convey information using color alone.”
【评 语】:看来译者完全理解不了作者的意思。
【建议译文】:注意既便是对于一个空白页也会给出一大堆建议。“将可选项、标题与基于时间的多媒体跟踪同步”和“确保不要只用颜色来传达信息”是其中的两条。
14.
【位 置】:47页倒5行。
【原 译 文】:“另外,目录名可能已经写入注册表中,从而促进更快、更经济的访问。可惜,基于注册表的方法会破坏Xcopy部署,并在ASP.NET构架中引入一项重大变革。”
【英文原文】:“Alternately, the names of the directories could have been written in the registry, which would make for a much faster and affordable access. Unfortunately, a registry-based approach would break XCopy deployment and introduce a major breaking change in the ASP.NET architecture.”
【评 语】:译者似乎不知道怎么对付虚拟语气。
【建议译文】:也可以考虑把这些目录名写入注册表,这样可以更快、更经济地对它们进行访问。遗憾的是,基于注册表的方法会破坏Xcopy部署,从而给ASP.NET架构带来破坏性的重大改变。
15.
【位 置】:54页倒10行。
【原 译 文】:“Xcopy部署表达式(通常用来描述在.NET中的安装过程)传达了.NET部署的要旨:”
【英文原文】:“the XCopy deployment expression, which is often used to describe setup procedures in .NET, communicates the gist of .NET deployment:”
【评 语】:“expression”在此应译为“这一名称”。
【建议译文】:(略)。
16.
【位 置】:56页倒数2行
【原 译 文】:“然而,如果把代码部署到一个服务提供程序上,……”
【英文原文】:“However, if you are deploying your code to a service provider …”
【评 语】:“把代码部署到服务提供程序上”是什么意思?实际上这里的“service provider”是指主机托管服务提供商等。
【建议译文】:然而,如果要把代码部署到服务提供商的机器上。
17.
【位 置】:57页17行。
【原 译 文】:“预编译的应用程序仍然由源程序组成,但是假定在部署前访问所有的页和资源,并把它们编译成程序集。”
【英文原文】:“A precompiled application is still made up of source files, but all pages and resources are fictitiously accessed before deployment and compiled to assemblies.”
【建议译文】:预编译的应用程序仍然由源文件组成,但是在部署之前,所有页面和资源都被虚拟地访问过,并因此被编译为程序集。
18.
【位 置】:57页21行。
【原 译 文】:“然而,在被非法利用的情况下,它们受黑客的支配,使攻击者能够控制Web目录。”
【英文原文】:“However, they are at the mercy of a hacker in the case of a successful exploitation that allows the attacker to take control of the Web directories.”
【建议译文】:然而,在黑客攻击得手并取得对Web目录的控制的情况下,它们就只有任其摆布了。
19.
【位 置】:58页倒数7行。
【原 译 文】:“如果没有规定目标路径,预编译将在应用程序的虚拟路径中发生,从而保护了源文件。如果规定了一个不同的目标路径,则只复制程序集,并且新的应用程序在生产环境中运行,没有源文件。如下命令行在规定的磁盘路径中预编译ProAspNet20:”
【英文原文】:“If no target path is specified, the precompilation takes place in the virtual path of the application, and source files are therefore preserved. If a different target is specified, only assemblies are copied, and the new application runs with no source file in the production environment. The following command line precompiles ProAspNet20 to the specified disk path:”
【评 语】:看来译者理解不了作者的意思,以至于有“从而保护了源文件”这样的错误。其实作者说得也不够清楚。如果不指定目标路径,实际上就是在进行原地(in-place)预编译,应用程序的虚拟目录中原有的所有内容不会发生变化(这就是作者说的“source files are therefore preserved”的意思),也不会增加任何新文件,预编译所输出的文件存放于ASP.NET临时目录(%SystemRoot%\Microsoft.NET\Framework\<版本号>\Temporary ASP.NET Files)的一个与应用程序同名的子目录中。如果指定了目标路径,实际上就是在进行部署预编译,预编译的输出文件存放于指定的目标路径中。有一个重要的问题作者没有说清楚。那就是,在进行部署预编译时,如果指定了参数“-u”,则进行的是支持更新的部署预编译,否则进行的是不支持更新的部署预编译。两种部署预编译都会把生成的程序集输出到目标路径,并都会把静态文件复制到目标路径,但都不会把源程序文件等用以生成程序集的文件(也就是作者所说的“source files”)复制过去。所不同的是,支持更新的部署预编译还会把aspx文件和局部资源(local resources)原样复制到目标路径;而不支持更新的部署预编译只会为每一个aspx文件在目标路径中新建一个同名的桩文件(说它们是桩文件,是因为其内容仅仅是一个字符串,声明本文件不应该被修改)。由此可见,在不支持更新的的部署预编译中,在生产环境(指实际运营环境)中不但见不到用以生成程序集的源程序文件,也见不到aspx文件的原来内容,所以真正达到了保护知识产权的目的。一般说来,原地预编译是在用于实际运营的机器上进行的(由网站的管理员操作,当然,开发网站的公司的实施人员也可以帮助网站管理员进行操作),其目的是提高性能。而部署预编译则是在用于开发的机器上进行的(由开发人员操作),目的在于将源程序(在不支持更新的部署预编译的情况下,还包括aspx文件)摈除在最终用于部署的内容之外,以“保护知识产权”,当然,也顺便得到性能的提升。
【建议译文】:如果未指定目标路径,预编译会发生在应用程序的虚拟路径中,因此源文件会原封不动。如果指定了一个不同的目标,则只有程序集会被复制,新的应用程序运行于其所处的生产环境中并不存在源文件这一状况下。下面的命令行将ProAspNet20预编译到指定的磁盘路径中。
20.
【位 置】:72页20行。
【原 译 文】:“一旦HTTP运行库获得了表示被请求资源的类的实例,激活ProcessRequest方法(一个公有方法)就会产生该进程,并在生成浏览器的最终响应时结束。”
【英文原文】:“Once the HTTP runtime has obtained an instance of the class that represents the requested resource, invoking the ProcessRequest method—a public method—gives birth to the process that culminates in the generation of the final response for the browser.”
【建议译文】: 一旦HTTP运行时获得了代表所请求的资源的类的一个实例后,调用其公有的ProcessRequest方法,就开始了那个以生成对浏览器的最终响应而告终的过程。
21.
【位 置】:73页8行(不计表格)。
【原 译 文】:“调用ProcessRequest方法时,HttpRuntime对象首先把网页提供给浏览器。它为请求创建一个新的上下文,并初始化一个特殊的文本writer对象,其中将收集标记代码。”
【英文原文】:“When the ProcessRequest method is called, the HttpRuntime object starts working to serve a page to the browser. It creates a new context for the request and initializes a specialized text writer object in which the markup code will be accumulated.”
【建议译文】:当其ProcessRequest方法被调用时,HttpRuntime对象便开始了它的工作,以向浏览器提供一个页面。它为请求创建一个新的上下文,并初始化一个专用的text writer对象,用以积蓄标记代码。
22.
【位 置】:89页至90页中的表3.14,以及随后的两段文字。
【评 语】:所有的4个“删除”,其英文原文件都是“emit”。作者实际上是在说调用RegisterClientScriptBlock等方法最终会导致一段脚本程序被加入到发送给游览器的响应内容中。这里的“emit”可以译为“产生”。很难理解译者何以通通译为“删除”。
23.
【位 置】:92页13行。
【原 译 文】:“ASP.NET页由一个HTTP处理程序(就像Page类的一个实例一样被)提供服务。”
【英文原文】:“ASP.NET pages are served by a HTTP handler like an instance of the Page class.”
【建议译文】:ASP.NET页由诸如一个Page类的实例这样的HTTP处理器提供服务。
24.
【位 置】:92页倒5行。
【原 译 文】:“注意,这个过程会跨页投递、脚本回叫和回发(postback)进行修改。”
【英文原文】:“Note that there are modifications to the process depending upon cross-page posts, script callbacks, and postbacks.”
【建议译文】:注意,这个过程会因跨页回发、脚本回调以及回发而有所不同。
25.
【位 置】:94页倒数12行。
【原 译 文】:“如果在显示前,页面中的所有控件都有机会完成初始化,页面处理器将再次尝试匹配那些尚未与现有控件匹配的投递的值。”
【英文原文】:“When all controls in the page have been given a chance to complete their initialization before display, the page processor makes a second try on posted values that haven’t been matched to existing controls.”
【评 语】:原文可没有条件的含义。虽然作者的表述并不理想,但译者自作聪明地的添油加醋只是令事件变得更糟。
【建议译文】:当页面上所有控件得到一个在显示之前完成它们的初始化的机会之时,页面处理器再次尝试匹配处理那些尚未与现有控件匹配的投递值。
26.
【位 置】:94页倒数10行。
【原 译 文】:“显然,这一不可思议的方法提出了一种具体场景——使用动态创建的控件。”
【英文原文】:“This apparently weird approach addresses a specific scenario—the use of dynamically created controls.”
【建议译文】:这一看似奇怪的处理方式旨在应对一种特别的情况——动态创建的控件的使用。
27.
【位 置】:94页倒数6行。
【原 译 文】:“提交页面的窗体时,其中的动态控件用定期发送的合法而有效的信息填充。”
【英文原文】:“when the page’s form is submitted, the dynamic control there is filled with legal and valid information that is regularly posted.”
【建议译文】:提交页面的窗体时,其中的动态控件中填充的合法、有效的信息被如常投递。
28.
【位 置】:129页倒数11行。
【原 译 文】:“而SelectedDate以一种不同的风格设置选中时生成的日期。”
【英文原文】:“while SelectedDate sets with a different style the date that is rendered as selected.”
【建议译文】:而SelectedDate设置一个被呈现为选定状态的日期,其选定状态是用一种不同的样式表现出来的。
29.
【位 置】:130页表4.3最后一行(SetRenderMethodDelegate方法的说明)。
【原 译 文】:“把一个对生成控件及其内容的委派赋给父控件。”
【英文原文】:“assigns a delegate to render the control and its content into the parent control.”
【评 语】:胡说八道。
【建议译文】:“分配一个委托,用以将控件及其内容呈现到父控件中。”
30.
【位 置】:135页14行(不计代码)。
【原 译 文】:“在任何情况下,CustomValidator控件都不和当前命名容器中的任何一个输入控件关联。”
【英文原文】:“The CustomValidator control is not associated in all cases with a single input control in the current naming container.”
【评 语】:很难理解译者竟然会犯这种低级错误。
【建议译文】:并非任何情况下CustomValidator控件都只关联到当前命名容器中的单独一个输入控件。
31.
【位 置】:135页15行(不计代码)。
【原 译 文】:“例如,如果控件必须验证多个输入字段的内容,并非只是设置ControlToValidate属性和arguments参数。Value变量等于空字符串。”
【英文原文】:“For example, if the control has to validate the contents of multiple input fields, you do not simply set the ControlToValidate property and the arguments.Value variable evaluates to the empty string.”
【评 语】:试问译者自己是否看得懂自己译的这两句话?当然,作者的表述有一定问题,比如“arguments”一词后面那个“Value”应该使用“value”,这会给读者带来一点困扰。但是一个有技术背景的翻译人员,应该看得出问题的所在才对:“arguments”后面的符号“.”并非一个句号,而是一个JavaScript语言的成员访问操作符,正因为如此,后面的“Value”才应该写作“value”,因为CustomValidator控件的客户端验证函数的第二个参数arguments只有名为“value”的字段,没有名为“Value”的字段。作者只说了客户端验证函数的情况。实际上,在这种情况下,服务器端的验证方法的ServerValidateEventArgs类型的参数e的Value属性值也为空字符串。
【建议译文】:例如,如果控件要验证多个输入字段的内容,你并不设置ControlToValidate属性,所以变量arguments.value的值是一个空字符串。
32.
【位 置】:153页倒11行。
【原 译 文】:“注意,该页中Transfer调用之后可能出现的所有代码并非绝对不会执行。”
【英文原文】:“Note that all the code that might be following the call to Transfer in the page is never executed.”
【建议译文】:注意,该页中可能具有的位处对Transfer的调用之后的代码都不会执行。
33.
【位 置】:165页6行。
【原 译 文】:“访问ASP.NET的Trace对象时,不必使用从页的源代码或者从代码文件开始的完全限定名。”
【英文原文】:“The ASP.NET Trace object is accessible without a fully qualified name from the source code of the page or from the code file class.”
【建议译文】:从页的源代码或从页的代码文件类中访问ASP.NET的Trace对象可以不使用完全限定名。
34.
【位 置】:165页11行。
【原 译 文】:“需要发送当前HTTP请求的跟踪日志中的文本的外部类,可以使用如下表达式来完成:”
【英文原文】:“External classes that want to emit text in the trace log of the current HTTP request can do that using the following expression:”
【建议译文】:需要在当前HTTP请求的跟踪日志中输出文本信息的外部类可以使用这样的表达式。
35.
【位 置】:175页倒数3行。
【原 译 文】:“提供程序是比较简单的组件,其目的是尽量少用方法和属性。”
【英文原文】:“Providers are relatively simple components with as few methods and properties as possible.”
【建议译文】:提供程序是比较简单的组件,只拥有尽可能少的方法和属性。
36.
【位 置】:176页13行(不计代码)。
【原 译 文】:“毫无疑问,LocalSqlServer不适合作为本地或远程连接SQL Server的一个实例的连接字符串。”
【英文原文】:“LocalSqlServer is certainly not the connection string to use for a local or remote connection to an instance of SQL Server.”
【建议译文】:LocalSqlServer并不是一个用于建立到一个SQL Server实例的本地或远程连接的连接字符串。
37.
【位 置】:182页14行。
【原 译 文】:“把<asp:placeholder>控件添加到其ID与任何一个预定义的名称相匹配的派生页。”
【英文原文】:“Add <asp:placeholder> controls to the derived page whose ID matches any of the predefined names.”
【评 语】:作者的表述方式容易让人产生误解。但一个有技术背景的翻译应该有能力看出其本意。这里的“ID”应该是指PlaceHolder控件的,而不是页的。
【建议译文】:在派生页中添加一些<asp:placeholder>控件,让它们的ID与那些预定义的(基类中的UI块的)名称相匹配。
38.
【位 置】:195页倒数1行。
【原 译 文】:“页面内容和格式化规则之间存在明显区别。”
【英文原文】:“a neat separation exists between the page contents and formatting rules.”
【建议译文】:页面内容和格式化规则之间实现了整洁的分离。
39.
【位 置】:201页倒数11行。
【原 译 文】:“Themeable属性可用于一个定制控件的类声明,以阻止它干扰主题。”
【英文原文】:“the Themeable attribute can be applied to the class declaration of a custom control to stop it from ever bothering about themes.”
【建议译文】:可将Themeable属性应用于一个定制控件的类声明,使其毋需再为主题劳神。
40.
【位 置】:207页表6.6倒数2行(Wizard控件的SkipLinkText属性的说明)。
【原 译 文】:“该控件与一个不可见的图像关联的ToolTip字符串,作为屏幕阅读者的提示。”
【英文原文】:“The ToolTip string that the control associates with an invisible image, as a hint to screen readers.”
【建议译文】:ToolTip字符串,被控件关联到一个不可见图像,作为屏幕阅读器的提示。
41.
【位 置】:211页倒数5行(不计代码)。
【原 译 文】:“WizardNavigationEventHandler结构包含两个有用的属性,通知有关剩下的页面和正在显示的页面的基于0的索引。”
【英文原文】:“The WizardNavigationEventArgs structure contains two useful properties that inform you about the 0-based indexes of the page being left and the page being displayed.”
【建议译文】:WizardNavigationEventArgs结构包含两个很有用的属性,它们可以告知正离开的页面和即将显示的页面的基于0的索引。
42.
【位 置】:222页倒数8行。
【原 译 文】:“虽然这么做是可以的,但是还应当选择一种替代方法,诸如使用SQL Server OLE DB提供程序(称为SQLOLEDB)。此外,还有可能使用ADO(而不是ADO.NET)作为数据访问库。”
【英文原文】:“Although it’s possible to do so, you should have a good reason to opt for an alternative approach such as using the OLE DB provider for SQL Server (named SQLOLEDB). A possible good reason is the need to use ADO rather than ADO.NET as the data-access library.”
【建议译文】:选择诸如使用针对SQL Server的OLE DB提供程序(名为SQLOLEDB)这样的替代性方案是可行的,但这样做应该基于一个正当的理由。一个可能的好理由是需要使用ADO而不是ADO.NET来作为数据访问库。
43.
【位 置】:223页1行。
【原 译 文】:“我们不是使用托管提供程序,而是使用基于COM的OLE DB提供程序(称为MSDAORA)或者ODBC驱动程序。”
【英文原文】:“Instead of using the managed provider, you can resort to the COM-based OLE DB provider (named MSDAORA) or the ODBC driver.”
【建议译文】:你也可以不用托管提供程序,而是采用基于COM的OLE DB提供程序(名为MSDAORA)或者ODBC驱动程序。
44.
【位 置】:224页6行(不计表7.4)。
【原 译 文】:“System.Data.OleDb命名空间中的类不支持OLE DB提供程序,实现了OLE DB 2.5接口中用于半结构化和层次性行集的任何一个接口。”
【英文原文】:“the classes in the System.Data.OleDb namespace don’t support OLE DB providers that implement any of the OLE DB 2.5 interfaces for semistructured and hierarchical rowsets.”
【建议译文】:System.Data.OleDb命名空间中的类不支持那些实现OLE DB 2.5中任何一个针对半结构化和层次型行集的接口的OLE DB提供程序。
45.
【位 置】:231页2行。
【原 译 文】:“模式集合的列表——CollectionName是列名。”
【英文原文】:“The list of schema collections is expressed as a DataTable object with three columns—CollectionName is the column with names.”
【建议译文】:模式集合的列表表示为一个具有三列的DataTable对象——CollectionName是包含模式集合名称的那一列的列名。
46.
【位 置】:237页3行。
【原 译 文】:“任何一个使用保护节的页面,只要在Visual Studio .NET 2005中内嵌的本地Web服务器内运行它,就像一个champ(自动多道程序用通信处理程序)那样起作用。”
【英文原文】:“Any page that uses protected sections works like a champ as long as you run it inside the local Web server embedded in Visual Studio .NET 2005.”
【评 语】:相信译者也是在绝望中用上了“自动多道程序用通信处理程序”这个从某本专业词典中查到的释义(对应于“CHAMP”这个首字母缩写词),虽然他肯定搞不明白“自动多道程序用通信处理程序”与这里说的事有什么关系。其实,我想“champ”多半是作者的一个笔误,他本想说的是“work like a charm”。
【建议译文】:任何使用了受保护配置节的页,在Visual Stuidio .NET 2005中内嵌的本地Web服务器中运行时,都能立竿见影地正常工作。
47.
【位 置】:237页6行。
【原 译 文】:“对此该怎么办呢?”
【英文原文】:“What’s up with that?”
【建议译文】:这是怎么回事呢?
48.
【位 置】:237页12行。
【原 译 文】:“系统帐户(运行本地Web服务器)与容器一起列出,而Web服务器上的ASP.NET帐户可能不这样进行关联。”
【英文原文】:“The system account (running the local Web server) is listed with the container; the ASP.NET account on your Web server might not be.”
【评 语】:原译没有太大的错误,但却让人难以看明白作者的意思。应当适量补充一些内容。
【建议译文】:系统帐户((Visual Studio内嵌的)本地Web服务器用这个帐户运行)已列入与那个(默认的名为NetFrameworkConfigurationKey的)容器相关联的帐户列表,但Web服务器上的ASP.NET帐户则未必。
49.
【位 置】:238页表7.9最后一行(连接字符串中Pooling关键字的说明)。
【原 译 文】:“指明连接对象是从合适的连接池中获取,还是(如果需要)创建它并添加到合适的连接池中。”
【英文原文】:“Indicates that the connection object is drawn from the appropriate pool or, if necessary, is created and added to the appropriate pool.”
【评 语】:这里的“or”,不宜译为“是……还是……”。因为作者想要表达的意思是(尽管他的表述有待改进):在Pooling设置为true时,连接对象要么是从已有的一个连接池中获取,要么是(在匹配的连接池尚不存在时。或在匹配的连接池虽然已经存在,但现有连接均已被使用,而现有连接数尚未达到上限时)被创建并被加入一个连接池。而译者的译法会让人误以为:如果Pooling被设置为true,那么连接是从池中获取的;如果被设置为false,那么连接是新创建然后再被加入池中的。
【建议译文】:指出连接对象是从适合的池中获取,或者在必要的情况下,是先被创建然后再被加入适合的池中。
50.
【位 置】:239页11行。
【原 译 文】:“创建一个连接池时,创建多个连接对象并添加到该池中,以便达到最少的连接数。”
【英文原文】:“When a pool is created, multiple connection objects are created and added so that the minimum size is reached.”
【建议译文:当一个连接池被创建时,会创建多个连接对象并加入其中,直到达到池的最低连接数。
51.
【位 置】:241页倒数20行(关于连接字符串中的“Connection Lifetime”设置)。
【原 译 文】:“只能在清楚明白的情况下才能使用该关键字,在其他情况下决不能使用。”
【英文原文】:“This keyword is useful only in a well-known situation, and it should never be used otherwise.”
【建议译文】:这个关键字仅用于一个众所周知的场合,决不能用于别的任何场合。
52.
【位 置】:248页倒数8行。
【原 译 文】:“查询返回的结果集中的所有列都应用顺序访问模式。”
【英文原文】:“The sequential access mode applies to all columns in the returned result set.”
【建议译文】:顺序访问模式作用于返回的结果集中的所有列。
53.
【位 置】:248页倒数4行。
【原 译 文】:“在执行应该返回多个结果集的查询时还要指定SingleRow。”
【英文原文】:“You can also specify SingleRow when executing queries that are expected to return multiple result sets.”
【评 语】:难以理解译者何以会犯这样的错误。
【建议译文】:在执行会返回多个结果集的查询时还可以指定SingleRow模式。
54.
【位 置】:252页倒数6行(不计代码)。
【原 译 文】:“使用现有异步命令并不足以证明我们可以不假思索地使用它们。”
【英文原文】:“Having asynchronous commands available is not necessarily a good reason for using them without due forethought.”
【建议译文】:能够使用异步命令不代表可以不假思索地使用它们。
55.
【位 置】:257页倒数8行。
【原 译 文】:“ADO.NET 2.0带有所有支持System.Transactions的标准数据提供程序。”
【英文原文】:“ADO.NET 2.0 ships all standard data providers with support for System.Transactions.”
【建议译文】:ADO.NET 2.0中的标准数据提供程序均支持System.Transactions。
56.
【位 置】:263页5行。
【原 译 文】:“DataSet没有提供程序的准备和提供数据的意思;它只是一个序列化的、特征丰富的且与ADO.NET提供程序紧密集成的数据容器。”
【英文原文】:“The DataSet has no notion of the provider that served its data; it is a mere data container that is serializable, feature-rich, and tightly integrated with ADO.NET providers.”
【评 语】:可笑。
【建议译文】:DataSet不知道为其提供数据的究竟是哪种提供程序,它只是一个可序列化、特征丰富并且与ADO.NET提供程序紧密集成的数据容器。
57.
【位 置】:272页10行。
【原 译 文】:“FillSchema取一个DataSet为参数,并添加与数据适配器有关的查询命令所需的尽可能多的表。该方法返回一个创建了所有的DataTable对象的数组(只创建模式,没有填充数据)。”
【英文原文】:“FillSchema takes a DataSet and adds as many tables to it as needed by the query command associated with the data adapter. The method returns an array with all the DataTable objects created (only schema, no data).”
【建议译文】:FillSchema以一个DataSet为参数,向其中加入与适配器关联的查询命令所需要的所有表。该方法返回由所创建的所有DataTable对象(不含数据,只具备模式)组成的数组。
58.
【位 置】:273页倒数8行(不计代码)。
【原 译 文】:“只有用于更新的字段、插入和键字段,将用来惟一地标识要更新或删除的行。”
【英文原文】:“Only those fields will be used for the update, and the insertion and key fields will be used to uniquely identify rows to update or delete.”
【建议译文】:只有这些字段会被用于更新和插入,而键字段会被用于惟一性地辨识要更新或删除的行。
59.
【位 置】:275页3行。
【原 译 文】:“ISerializable使它能够控制如何把数据序列化为一个.NET格式标识符”
【英文原文】:“ISerializable makes the class capable of controlling how its data is serialized to a .NET formatter”
【建议译文】:ISerializable使该类得以控制其数据被序列化到一个.NET格式化器的方式。
60.
【位 置】:275页表8.9最后一行(对DataSet.GetChanges方法的说明)。
【原 译 文】:“返回DataSet的一个副本,只包含自它上一次被调用以来或自AcceptChanges被调用以来对它做出的变更。”
【英文原文】:“Returns a copy of the DataSet containing only the changes made to it since it was last loaded or since AcceptChanges was called.”
【评 语】:睁眼瞎的翻译。
【建议译文】:返回DataSet的一个副本,其中只含有它自上次加载以来或自AcceptChanges上次被调用以来所发生的变更。
61.
【位 置】:277页倒数10行。
【原 译 文】:“合并操作是一个原子操作,必须保证它在结束时的完整性和一致性。为此,禁止在合并操作过程中使用约束。”
【英文原文】:“The merge operation is an atomic operation that must guarantee integrity and consistency only at its end. For this reason, constraints are disabled during a merge operation.”
【建议译文】:合并操作是一个原子性操作,只有当它结束时才需要保证完整性和一致性。因此,在合并过程中所有约束都被禁用。
62.
【位 置】:279页倒数8行。
【原 译 文】:“以<diffgr:before>节点为根的子树包含恢复所有已修改行的原始状态。”
【英文原文】:“The subtree rooted in the <diffgr:before> node contains enough information to restore the original state of all modified rows.”
【建议译文】:以<diffgr:before>节点为根的子树包含足以恢复所有已修改行的原始状态的 信息。
63.
【位 置】:282页表8.13第3行(DataTable.ImportRow方法的说明)。
【原 译 文】:“执行DataRow的深副本,并把它载入该表中。”
【英文原文】:“Performs a deep copy of a DataRow, and loads it into the table.”
【建议译文】:对DataRow执行深度复制,将所得副本加入表中。
64.
【位 置】:282页表8.13后第2行。
【原 译 文】:“该接口的实现也很关键,现在它允许DataTable用作参数和.NET Web服务方法的返回值。”
【英文原文】:“The implementation of the interface is also the key that now allows DataTable to be used as parameters and return values from .NET Web service methods.”
【建议译文】:对该接口的实现也是现在DataTable可以用作.NET Web服务方法的参数和返回值的原因。
65.
【位 置】:284页倒数18行。
【原 译 文】:“ForeignKeyConstraint构造方法采取的参数是一个表对象的名称和两个DataColumn对象。”
【英文原文】:“The ForeignKeyConstraint constructor takes the name of the object plus two DataColumn objects.”
【建议译文】:ForeignKeyConstraint构造器使用约束的名称和两个DataColumn对象作为参数。
66.
【位 置】:287页7行(不计代码)。
【原 译 文】:“视图是通过使用与视图上设置的标准匹配的原始行的索引维护一个分离的数组而实现的。”
【英文原文】:“The view is implemented by maintaining a separate array with the indexes of the original rows that match the criteria set on the view.”
【建议译文】:视图是通过维护一个由与视图上设置的标准匹配的那些原始行的索引组成的独立的数组而实现的。
67.
【位 置】:304页倒数4行。
【原 译 文】:“RepeaterItemCollection类是一个纯文本类,没有特别的或专门的行为。”
【英文原文】:“The RepeaterItemCollection class is a plain collection class with no special or peculiar behavior.”
【建议译文】:RepeaterItemCollection类是一个简单的集合类,没有特别的行为。
68.
【位 置】:319页表9.10倒数2行(对SqlDataSource.SortParameterName属性的说明)。
【原 译 文】:“获得或设置一个命令的存储过程将用来存储数据的一个输入参数的名称。”
【英文原文】:“Gets or sets the name of an input parameter that a command’s stored procedure will use to sort data.”
【建议译文】:获取或设置命令的存储过程将用以对数据进行排序的输入参数的名称。
69.
【位 置】:322页10行。
【原 译 文】:“如果该操作没有影响任何记录,则可能会发生并发违规。”
【英文原文】:“If no rows are affected by the operation, a concurrency violation might have occurred:”
【建议译文】:如果该操作没有影响任何行,则可能是发生了并发冲突。
70.
【位 置】:322页倒数7行(不计表9.13)。
【原 译 文】:“为了在每次回发时保存一个查询,可以要求数据源控件缓存给定期间内的结果集。”
【英文原文】:“To save a query on each postback, you can ask the data source control to cache the result set for a given duration.”
【建议译文】:为了在每次回发时节省一次查询……
71.
【位 置】:324页12行。
【原 译 文】:“大多数Internet服务提供程序(ISP)一般都会给出一个目录,其中列出了被授予写入权限的ASPNET和NetworkService帐户。”
【英文原文】:“Most Internet service providers (ISPs) normally give you one directory in which ASPNET and NetworkService accounts have been granted write permission.”
【建议译文】:大多数Internet服务提供程序(ISP)通常会为你提供一个目录,ASPNET和NetworkService帐户已经被授予了对该目录的写权限。
72.
【位 置】:330页倒数3行。
【原 译 文】:“因为这个工作是使用映射完成的,所以绑定控件中的输入字段的名称必须匹配对象中通过DataObjectTypeName属性提供的公共属性的名称。”
【英文原文】:“Because this work is performed using reflection, the names of the input fields in the bound control must match the names of public properties exposed by the object in the DataObjectTypeName property.””
【建议译文】:因为这一工作是通过使用反射来完成的,所以绑定控件中的输入字段的名称必须与DataObjectTypeName属性所指定的对象所呈现的公共属性的名称相匹配。
73.
【位 置】:331页12行(不计代码)。
【原 译 文】:“数据字段名必须匹配(区分大小写)用作更新/插入操作的一个参数的类(本例中为Employee类)中的一个公共属性。”
【评 语】:“区分大小写”么?看似没有问题。但在用作者提供的源代码做实验时才发觉有点不对头,于是找英文版的书来核实一下,结果发现此处是“case insensitive”,也就是说,是“不区分大小写”!可恶的瞎眼翻译!
74.
【位 置】:334页倒数11行。
【原 译 文】:“如果没有定义,该节点指定为一个插入容器,不会成为可单击的。”
【英文原文】:“If not defined, the node is intended to be an inert container and won’t be made clickable.”
【评 语】:是“inert”(无生气的,没有活动能力的),不是“insert”!再次印证了译者的弱视。不过,作为一个有技术背景的翻译,难道他就从没想过“插入容器”在此是否说得通么?
75.
【位 置】:335页表9.15后第2行(关于SiteMapDataSource.StartingNodeOffset属性)。
【原 译 文】:“一个大于0的值表示在层次结构向下走从根节点到请求节点的层数,并使用找到的这个节点作为根节点。”
【英文原文】:“A value greater than 0 goes as many levels down in the hierarchy proceeding from the root to the requested node and uses the node found as the root.”
【建议译文】:一个大于0的值要求在始于根而终于所请求节点的层次结构中下行相应数目的层级,并以所找到的节点作为根。(作者的说法并不严谨,实际上,是在始于StartingNodeUrl或StartFromCurrentNode所标识的起始节点而终于所请求节点的层次结构中下行相应数目的层级。)
76.
【位 置】:335页倒数2行。
【原 译 文】:“把该控件绑定到静态文本的风险是,XML数据在页面视图状态之间来回移动,同时还是使它存储在缓存中以实现更快的访问速度。”
【英文原文】:“If you bind the control to static text, the risk is that you move the XML data back and forth with the page view state while keeping it also stored in the cache for faster access.”
【建议译文】:把该控件绑定到静态文本所要承担的风险是,即使你已经为了获得更快的访问速度而将那些XML数据缓存,它们还是会随着页的视图状态被来回传送。
77.
【位 置】:342页表10.1后第2行。
【原 译 文】:“实现最常见的任务可以使用集中类型的列。”
【英文原文】:“Several types of columns are available to implement the most common tasks.”
【评 语】:“集中”显然应该是“几种”。但就算把这个词改过来了,这句话还是有点不清不楚。
【建议译文】:DataGrid具有几种可用于完成最常见的任务的列类型。
78.
【位 置】:343页倒数16行。
【原 译 文】:“Items集合中的每个元素是DataGridItem类(一个稍微更丰富的表行对象)的一个实例,并为对应于所绑定的数据源中的行的对象提供一个DataItem属性集。”
【英文原文】:“Each element in the Items collection is an instance of the DataGridItem class—a slightly richer table row object—and supplies a DataItem property set to the object that corresponds to the row in the bound data source.”
【建议译文】:Items集合中的每个元素是DataGridItem类(一个稍微更丰富的表行对象)的一个实例,它具有一个DataItem属性,该属性被设置为一个对应于所绑定的数据源中的行的对象。
79.
【位 置】:344页表10.3后第2行。
【原 译 文】:“CancelCommand事件表示用户打算持久存留所有变更。”
【英文原文】:“The CancelCommand event signals that the user clicked the Cancel button to cancel all pending changes. The UpdateCommand event denotes the user’s intention to persist all the changes.”
【评 语】:译者是否有阅读障碍?
【建议译文】:CandelCommand事件表示用户点击了Cancel按钮以取消所有未决变更。UpdateCommand事件则表明用户打算将所有变更持久保存。
80.
【位 置】:345页表10.4最后一行(对DataGrid中的TemplateColumn的说明)。
【原 译 文】:“该类型显示该列中每个遵循指定的ASP.NET模板的单元。”
【英文原文】:“This type displays each cell of the column following a specified ASP.NET template.”
【建议译文】:该类型按指定的ASP.NET模板显示列中的每一个单元。
81.
【位 置】:353页表10.9上方第2行。
【原 译 文】:“像使用DataGrid一样,我们需要合计出一条相同的诀窍。”
【英文原文】:“You need to figure out a trick to do the same with a DataGrid.)”
【建议译文】:如果使用DataGrid来做同样的事,你得想点小技巧。
82.
【位 置】:354页表10.10第5行(对GridView.DataKeys属性的说明)。
【原 译 文】:“获得一个表示在DataKeyNames中为当前显示的记录设置的主键字段的值。”
【英文原文】:“Gets a collection of DataKey objects that represent the values of the primary key fields set in DataKeyNames for the currently displayed records.”
【建议译文】:获得DataKey对象的一个集合,它们代表了当前显示的那些记录的主键字段的值(主键字段是在DataKeyNames中设置的)。
83.
【位 置】:360页倒数2行。
【原 译 文】:“具体说来,如果把一个CheckBoxField列绑定到一个整数属性,则会得到一个异常,从而隐式地假设0为false,非0为true。”
【英文原文】:“In particular, you get an exception if you bind a CheckBoxField column to an integer property, thus implicitly assuming that 0 is false and non-zero values are true.”
【建议译文】:值得特别注意的是,如果把CheckBoxField列绑定到一个整型属性,以为0为false,而非0值为true,那么你会得到一个异常。
84.
【位 置】:358页1行(关于BoundField类的NullDisplayText属性)。
【原 译 文】:“如果NullDisplayText属性的值为null,则允许我们指定要显示的替代文本。”
【英文原文】:“The NullDisplayText property lets you specify alternative text to display should the value be null.”
【建议译文】:使用NullDisplayText属性,你可以指定当字段的值为null时所显示的替代文本。
85.
【位 置】:368页1行(关于分页算法。在数据库表中特地添加一个列的方法)。
【原 译 文】:“在这种情况下,DAL必须保证该列中的值构成这些值的一个正则表达式,并且是可计算的。”
【英文原文】:“In this case, the DAL must guarantee that the values in the column form a regular succession of values and can be computable.”
【评 语】:这跟“正则表达式”有什么关系?这句话中哪里有“regular expression”这个词?
【建议译文】:在这种情况下,DAL必须保证该列中的值形成一个均匀的值序列而且是可计算的。
86.
【位 置】:374页倒数14行。
【原 译 文】:“SqlDataSource最适合于非连接的数据绑定方法,并在相当适合于通过DataSet获取数据。只有在这种情况下,才能启用分页、排序和缓存功能。在三种功能中,只有排序功能在数据阅读器模式有些重复。”
【英文原文】:“SqlDataSource is optimized for a disconnected approach to data binding. It works at its best if you retrieve data through a DataSet. Only in this case are paging, sorting, and caching capabilities enabled. Of these three functionalities, only sorting is somehow replicable in data reader mode.”
【建议译文】:SqlDataSource是为数据绑定的非连接性方法而优化的。在通过DataSet获取数据的情况下它工作得尤其出色。只有在这种情况下,才能启用分页、排序和缓存功能。在这三种功能中,只有排序功能在数据阅读器模式下是可以实现的。
87.
【位 置】:376页10行(不计代码)。
【原 译 文】:“该参数在WHERE子句中用来确认工作记录必须匹配DataKeyNames属性(已显示记录的键)。”
【英文原文】:“The parameter used in the WHERE clause to identify the working record must match the DataKeyNames property—the key for the displayed records.”
【建议译文】:在WHERE子句中用于辨识工作记录的参数必须与DataKeyNames属性(所显示记录的键)相匹配。
88.
【位 置】:380页1行。
【原 译 文】:“正如我们可以看到的,GridView存储GridViewCommandEventArgs结构的CommandArgument属性中被单击行的索引。”
【英文原文】:“As you can see, the GridView stores the index of the clicked row in the CommandArgument property of the GridViewCommandEventArgs structure.”
【建议译文】:正如你所看到的,GridView将所点击的行的索引存储在GridViewCommandEventArgs结构的CommandArgument属性中。
89.
【位 置】:380页倒数4行。
【原 译 文】:“其结果是,被单击的GridViewRow对象的DataItem属性(我们需要的数据应该保存在这里),难免会为null如果从RowCommand处理程序的内部访问它的话,”
【英文原文】:“As a result, the DataItem property of the clicked GridViewRow object—where the data we need is expected to be—is inevitably null if accessed from within the RowCommand handler.”
【建议译文】:其结果是,如果在RowCommand事件处理器中访问所点击的GridViewRow对象的DataItem属性——我们需要的数据的期望来源——将不可避免地得到null值。
90.
【位 置】:391页倒数12行(不计代码)。
【原 译 文】:“为了在.aspx源文件中满意声明这些列,可以使用<Fields>标签。”
【英文原文】:“To statically declare your columns in the .aspx source file, you use the <Fields> tag.”
【评 语】:说译者有阅读障碍好象并不冤枉他。看清了:是“statically”,不是“satisfactorily”!
91.
【位 置】:390页2行。
【原 译 文】:“我们不需要处理该事件,以及截获Edit或Insert按钮上的任何单击。”
【英文原文】:“You do not need to handle this event to intercept any clicking on the Edit or Insert buttons.”
【建议译文】:你不必通过处理这一事件来截获对Edit或Insert按钮的点击。
92.
【位 置】:400页8行。
【原 译 文】:“编辑一个数据源的内容时,要么仔细检查用户界面的标准布局(一个垂直的标题/值(header/value)对列表),要么利用另一个控件,诸如FormView或定制控件。原来为了简明和有效而设计的DetailsView,结果却是非常不灵活,而且很难链接。”
【英文原文】:“When editing the contents of a data source, you either go through the standard layout of the user interface—a vertical list of header/value pairs—or resort to another control, such as the FormView or a custom control. Designed to be simple and effective, the DetailsView turns out to be not very flexible and hard to hook up.”
【评 语】:“go through”在这里能译作“检查”吗?“很难链接”是什么意思?
【建议译文】: 要编辑数据源的内容,你要么将就使用其用户界面的标准布局——一个标题/值对的垂直列表,要么求助于别的控件,比如FormView或某种自定义控件。DetailsView原本是为了使用的方便和高效性而设计的,结果却显得很不灵活,而且难以扩展。
93.
【位 置】:402页倒数14行。
【原 译 文】:“正因为此,前面的代码找到了最后一次出现的$符号,而丢弃它之前的所有$符号。”
【英文原文】:“That’s why the preceding code locates the last occurrence of the $ symbol and discards all that precedes it.”
【建议译文】:因此,前面的代码查找$符号最后一次出现的位置,并舍弃之前的所有字符。
94.
【位 置】:409页倒数8行。
【原 译 文】:“传递给Bind的参数必须匹配更新命令或方法中的一个参数的名称,或者匹配该类型上用作该更新方法的一个参数的属性之一。”
【英文原文】:“The argument passed to Bind must match the name of a parameter in the update command or method or one of the properties on the type used as an argument to the update method.”
【建议译文】:传递给Bind的参数必须匹配更新命令或方法中一个参数的名称,或者匹配更新方法的一个参数的类型的一个属性。
95.
【位 置】:410页4行(小标题)。
【原 译 文】:“4.何时不支持该函数”
【英文原文】:“When the Function Is Not Supported”
【建议译文】:4.当功能不被支持时
96.
【位 置】:417页表12.4。
【原 译 文】:“投递事件。”
【评 语】:诸如“PostAcquireRequestState”等事件名中的“Post”,是一个表示“在……之后”的意义的前缀,不宜翻译,可直接称“post-事件”即可。如果一定要翻译,也应该译为“后-事件”,岂能如译者一样一见到“Post”就译“投递”。
97.
【位 置】:423页2行。
【原 译 文】:“可以使用global.asax文件处理调用来处理该请求的模块所提供的任何事件。”
【英文原文】:“You can use the global.asax file to handle any event exposed by the modules called to operate on the request.”
【建议译文】:对于用以处理请求的各种模块所披露的事件,你可以用global.asax文件来为其定义处理器。
98.
【位 置】:428页2行。
【原 译 文】:“与GetLocalResourceObject一样,第1个参数指出页面的虚拟路径;第2个参数是资源的名称。”
【英文原文】:“As for GetLocalResourceObject, the first argument indicates the virtual path of the page; the second is the name of the resource.”
【评 语】:很难理解译者竟然会犯这种低级错误。
【建议译文】:至于GetLocalResourceObject,其第一个参数表示该页的虚拟路径,第二个参数则是资源的名称。
99.
【位 置】:431页4行。
【原 译 文】:“只有在ASP.NET 2.0中,还可以直接指出HTTP处理程序考虑为Execute提到的相同安全问题。”
【英文原文】:“In ASP.NET 2.0 only, you can also directly indicate the HTTP handler to invoke with the same security issues that were mentioned for Execute.”
【评 语】:狗屁不通。
【建议译文】:只有在ASP.NET 2.0中,你才能在调用中直接指定HTTP处理器,其相关的安全问题与前面对Execute的说明中提到的一样。
100.
【位 置】:438页1行。
【原 译 文】:“在ASP.NET 2.0中,新方法AddCacheDependency完成提交,有了它,能够使页面响应依赖于应用程序的任何一个依赖性对象。”
【英文原文】:“In ASP.NET 2.0, the new method AddCacheDependency completes the offering, as it gives you the possibility of making the page response dependent on any dependency object available to your application, including custom dependency objects.”
【评 语】:这个“完成提交”从何说起?
【建议译文】:在ASP.NET 2.0中,新增的方法AddCacheDependency完善了其提供的缓存控制,因为它可以使页面响应依赖于应用程序能够使用的任何依赖对象,包括自定义依赖对象。
101.
【位 置】:449页14行。
【原 译 文】:“如果开发人员只能使用一个对象,即Session对象,而不管其他细节,则大多赞成使用一个管理会话状态检索和存储过程的HTTP模块,同时借助于一些特殊的提供程序对象。”
【英文原文】:“If developers can simply work with one object—the Session object—regardless of other details, most of the credit goes to an HTTP module that governs the process of retrieving and storing session state with some help from special provider objects.”
【建议译文】:不管其它细节如何,开发人员只需跟一个对象——Session对象——打交道即可,这主要应归功于一个HTTP模块,正是它,在一些特别的提供程序对象的帮助下,管理着获取和存储会话状态的过程。
102.
【位 置】:450页表13.4第3行(对InProc的说明)。
【原 译 文】:“所有会话的值作为活对象在ASP.NET工作进程(在Microsoft Windows Serve r 2003中,这是aspnet_wp.exe或w3wp.exe)进行维护。”
【英文原文】:“The values for all the sessions are maintained as live objects in the memory of the ASP.NET worker process (aspnet_wp.exe or w3wp.exe in Microsoft Windows Server 2003).”
【建议译文】:所有会话的值作为ASP.NET工作者进程(aspnet_wp.exe,或Microsoft Windows Server 2003中的w3wp.exe)的内存区域中的活对象而被维护
103.
【位 置】:454页5行(不计表格)。
【原 译 文】:“它们引用集合类(这里是HttpSessionState)的功能进行同步工作。”
【英文原文】:“They refer to the ability of the collection class (HttpSessionState in this case) to work synchronistically.”
【建议译文】:它们描述了集合类(这里是HttpSessionState)同步工作的能力。
104.
【位 置】:460页倒数5行。
【原 译 文】:“给定ASP.NET Cache对象的内部结构,这就等于续订滑动到期期限。”
【英文原文】:“Given the internal structure of the ASP.NET Cache object, this evaluates to renewing the sliding period.”
【建议译文】:鉴于ASP.NET中Cache对象的内部结构,这等于是再次顺延了其到期期限。
105.
【位 置】:461页12行。
【原 译 文】:“通常要记住的是,试图访问会话状态,它可能没有。”
【英文原文】:“As a general rule, bear in mind that the session state might not be there when you try to access it.”
【评 语】:按说这种错误我们似乎用不着在此展示,因为很容易猜出后面的真正意思。但是我很想知道,一个翻译人员究竟要用什么方法才会讲出这样的爪哇国汉语来呢?
【建议译文】:作为一条普遍原则,记住:当你试图访问会话状态的时候,它可能并不存在。(未完待续) Renart <2007-6-11 20:15:00>
106.
【位 置】:469页2行。
【原 译 文】:“然而,更重要的是,它对使用假冒客户(client impersonation)的内联网站点提出了一些问题。”
【英文原文】:“More important, though, it poses some administrative issues for intranet sites using client impersonation.”
【建议译文】:但更重要的是,它会给使用客户模拟的内联网站的管理造成一些问题。
107.
【位 置】:469页6行。
【原 译 文】:“在ASP.NET 2.0中,当SQLServer状态提供程序与集成安全性结合使用时,突破了ASP.NET行为,该标识是被ASP.NET假冒的标识。”
【英文原文】:“Breaking the ASP.NET 1.x behavior, in ASP.NET 2.0—when the SQLServer state provider is used with integrated security—the identity is that impersonated by ASP.NET.”
【建议译文】:在ASP.NET 2.0中,当SQLServer状态提供程序与集成安全性结合使用时,实际使用的标识是ASP.NET模拟的那个,这突破了ASP.NET 1.x的行为。
108.
【位 置】:473页13行(不计代码)。
【原 译 文】:“然后将该数组编码成一个24URL可接受的字符串,而系统把它作为会话ID看待。”
【英文原文】:“The array is then encoded to a string of 24 URL-accepted characters, which is what the system will recognize as the session ID.”
【评 语】:拜托翻译的人拿出点职业精神好不好?这个“24URL”是什么意思?
【建议译文】:这个数组随后被编码为一个由24个可用于URL的字符组成的字符串,它就被系统用作会话ID。
109.
【位 置】:475页4行。
【原 译 文】:“换句话说,不能建议大家提取DAL类——就像把它们序列化到会话存储中一样。”
【英文原文】:“In other words, I’m not suggesting that you factor out your DAL classes—just the way you serialize them into the session store.”
【评 语】:胡说八道!我给出的译法自己感觉也不太理想,请大家指教。
【建议译文】:换句话说,我并不是在建议你不要用DAL类,而是在讨论你将它们序列化到会话状态中的方式。
110.
【位 置】:479页倒数12行。
【原 译 文】:“在开发页面时,通过禁用页面上的跟踪功能,可以控制视图状态的大小。”
【英文原文】:“While developing the page, you can keep the size of the view state under control by enabling tracing on the page.”
【建议译文】:在开发页面时,可以通过启用页面的跟踪功能来掌握视图状态的大小情况。(未完待续) Renart <2007-6-11 20:15:36>
111.
【位 置】:479页倒数9行。
【原 译 文】:“特别是TableCell控件,剥夺了所有用户界面的视图状态,包括文本、列和行扩展样式属性。”
【英文原文】:“The TableCell control, in particular, strips the view state of all its user interfaces, including text, column, and row-span style attributes.”
【评 语】:“TableCell控件剥夺了所有用户界面的视图状态”是什么意思?这句话中的“strips”倒底表示什么意思,我也不太明白,请大家指教。
112.
【位 置】:481页1行。
【原 译 文】:“我们不需要用视图状态来使TextBox的Text属性保持最新;只要这些属性在页面的生命期会改变其值,如ReadOnly或MaxLength属性,就不需要使用视图状态来更新它们。”
【英文原文】:“You don’t need view state to keep the Text property of a TextBox up to date; you do need view state to keep up to date, say, ReadOnly or MaxLength, as long as these properties have their values changed during the page lifetime.”
【评 语】:译者颠倒黑白的功夫令人佩服。
【建议译文】:你不需要视图状态来让TextBox的Text属性保持最新状态;但如果ReadOnly或MaxLength这些属性的值在页面的生命期中会发生改变,你的确需要使用视图状态来让它们保持最新状态。
113.
【位 置】:481页5行。
【原 译 文】:“每当页面要求在页面生命期内更新附属控件的属性(不受投递的值支配),就需要视图状态。在这种情况下,‘已更新的(updated)’表示原始值发生变化——要么是默认值,要么是设计时赋给该属性的值。”
【英文原文】:“View state is necessary whenever your page requires that accessory control properties (other than those subject to posted values) are updated during the page lifetime. In this context, "updated" means that their original value changes—either the default value or the value you assign to the property at design time.”
【评 语】:什么是“附属控件”?在第一个句子中有“已更新的”这个词吗?当然,在英文中第一个句子中的确有“updated”这个词(而且它不是形容词!),但在中文中第一个句子中没有“已更新的”这个词!
【建议译文】:只要页面要求控件的从属属性(而不是那些会被投递的值改变的属性)在页面的生命期中被更改,视图状态就是必不可少的。在此,“更改”指它们的原始值——要么是默认值,要么是设计时赋与属性的值——发生变化。
114.
【位 置】:481页倒数11行。
【原 译 文】:“实际上,一些ASP.NET控件不仅可以把编程接口的官方属性保存到视图状态中,而且还可以把内部属性以及标记为保护的(甚至是私有的)行为属性保存到视图状态中。不幸的是,对于这些控件,没有禁用视图状态的选项。”
【英文原文】:“Some ASP.NET controls, in fact, might save to the view state not just properties that are officially part of the programming interface (and that can be set accordingly), but also behavioral properties that serve internal purposes and are marked as protected or even private. Unfortunately, for these controls, you do not have the option of disabling the view state.”
【评 语】:首先,译者没有把“(and that can be set accordingly)”译出来。其次,哪来的与“行为属性”并列的“内部属性”?最后“没有禁用视图状态的选项”一说,会造成误解。
【建议译文】:实际上,某些ASP.NET控件在视图状态中不仅会保存那些属于编程接口的正式部分(因此可以被设置)的属性,还可能会保存那些用于内部用途并且被标为protected甚至是private的行为属性。不幸的是,对于这些控件,你没有禁用视图状态的选择余地。
115.
【位 置】:483页8行。
【原 译 文】:“这在ASP.NET 1.x中或多或少已经发生。”
【英文原文】:“This is more or less what happens already in ASP.NET 1.x.”
【建议译文】:ASP.NET 1.x.中发生的事大体也是这样。
116.
【位 置】:483页10行。
【原 译 文】:“区别在于类型序列化的倍数。每个被序列化的成员用一个字节标识……”
【英文原文】:“The difference is all in a little detail lying in the folds of type serialization. The type of each member being serialized is identified with a byte—specifically, nonprintable characters in the 1 through 50 range.”
【评 语】:“序列化的倍数”是什么意思?被标识的是成员还是成员的类型?实际上,“folds”一词在此是一种比喻性用法。说什么东西隐藏在另一样东西的褶中,意思是指这种东西很小而不易察觉。
【建议译文】:区别在于类型序列化过程中的一些细节上。被序列化的每个成员的类型都用一个字节来标识……
117.
【位 置】:484页倒数3行(不计代码)。
【原 译 文】:“作为一名控件开发人员,应当非常熟悉该类型,并使用这一点提取适合于恢复控件状态的任何信息。”
【英文原文】:“As a control developer, you know that type very well and can use this knowledge to extract any information that’s useful for restoring the control state.”
【建议译文】:作为控件开发者,你非常清楚它的类型,所以可以凭此提取用于恢复控件状态的各种信息。
118.
【位 置】:485页6行(不计代码)。
【原 译 文】:“有一个主要原因使视图状态不接近客户端浏览器”
【英文原文】:“there’s one major reason to keep the view state off the client browser:”
【评 语】:“不接近”一说着实搞笑。
【建议译文】:不将视图状态传递到客户端浏览器,其主要的考虑是:
119.
【位 置】:485页7行(不计代码)。
【原 译 文】:“重要的是要注意,客户端隐藏字段并不能任意设置,而只是可以存储视图状态信息的默认存储介质。”
【英文原文】:“It is important to note that the client-side hidden field is not set in stone, but is simply the default storage medium where the view state information can be stored.”
【建议译文】:应该指出,客户端隐藏字段并非雷打不动的视图状态存储工具,它只不过是默认的的存储工具。
120.
【位 置】:494页6行。
【原 译 文】:“这些编程特征包括一个最近最少使用(least recently used, LRU)算法实现,以确保在系统缺少内存、运行依赖对象或删除回调函数时,能够删除数据项。”
【英文原文】:“The list includes the implementation of a least recently used (LRU) algorithm to ensure that items can be removed if the system runs short of memory, dependencies, and removal callbacks.”
【评 语】:在缺少“运行依赖对象”或删除回调函数时,缓存项会被删除吗?
【建议译文】:这些编程特性包括:一个最近最少使用(least recently used, LRU)算法实现(它可以确保当系统内存吃紧时对缓存的数据项进行清除)、缓存依赖、删除回调。
121.
【位 置】:494页倒数8行。
【原 译 文】:“该属性是一个CacheDependency对象,用于跟踪添加到Cache对象中的数据项与文件、目录、数据库表或应用程序缓存中其他对象之间的一个物理依赖对象。”
【英文原文】:“Object of type CacheDependency, tracks a physical dependency between the item being added to the cache and files, directories, database tables, or other objects in the application’s cache.”
【建议译文】:一个CacheDependency类型的对象。用于跟踪所添加到缓存中的数据项与文件、目录、数据库表或应用程序缓存中其它对象之间的物理依赖。
122.
【位 置】:495页倒数3行。
【原 译 文】:“在从Cache对象中删除一个拥有关联回调函数的数据项时,将会向该回调函数传递一个CacheItemRemovedReason枚举值,以表明该操作是正确的。”
【英文原文】:“When items with an associated callback function are removed from the cache, a value from the CacheItemRemovedReason enumeration is passed on to the function to justify the operation.”
【评 语】:难道译者的字典中“justify”这个词只有“证明……是正当的”这一个义项吗?
【建议译文】:在从缓存中删除一个具有相关的回调函数的数据项时,会向该回调函数传递一个CacheItemRemovedReason枚举值以说明删除操作发生的原因。
123.
【位 置】:497页14行。
【原 译 文】:“删除数据项比较困难,因为……”
【英文原文】:“The difficulty with item removal is that because the application is oblivious to what has happened, it attempts to access the removed item later and gets only a null value back.”
【建议译文】:删除数据项带来的麻烦是……
124.
【位 置】:498页倒数6行。
【原 译 文】:“如果删除事件需要断开与某个依赖对象之间的关联,则Cache对象在收到事件通知时将立即执行这个回调函数。”
【英文原文】:“If the removal event is related to a broken dependency, the Cache object will execute the callback as soon as the notification is detected.”
【评 语】:首先,“需要”一说纯属胡扯。其次,“broken”用于此处时,我认为译为“打破”、“破坏”都不准确,译为“断开”更不可取。因为这些译法都会造成误解,以为缓存项和它的依赖对象之间的依赖关系就此终结。实际上,这里“broken”表示的是依赖对象本身发生了改变。
【建议译文】:如果该删除事件是因为依赖对象本身被改变而引起的,那么Cache对象一接收到通知时就会立即执行这个回调函数。
125.
【位 置】:499页14行。
【原 译 文】:“如果通过一个静态方法来定义删除回调函数,则对于包含这个方法的类,一定要避免内存始终存在该类的一个实例,以支持回调操作”
【英文原文】:“If you define a removal callback function through a static method, you avoid an instance of the class that contains the method to be kept in memory all the time to support the call back.”
【评 语】:难道一个具有专业背景、被那个叫郝刚的人称为“这一领域的佼佼者”的译者就是这样来理解这句话的吗?
【建议译文】:如果通过一个静态方法来定义删除回调函数,你就不必在内存中一直保留着一个包含该方法的类的实例以支持回调。(未完待续) Renart <2007-6-11 20:21:07>
126.
【位 置】:499页倒数19行。
【原 译 文】:“因此,在这种情况中,大家有必要访问Page类的一个方法,该方法不允许在一个静态成员中进行调用。”
【英文原文】:“In this case, therefore, you reasonably need to access a method on the page class, which is not permitted from within a static member.”
【评 语】:“this case”指的是前一句话中所说的“使用回调函数重新插入一个被删除的数据项”的情况。此句的错误在于,“reasonably”没有被译出来。我个人认为,作者的“therefore”用得不恰当,可以不译。
【建议译文】:在这种情况中,访问页面类的一个不能从静态成员中访问的方法(译注:指实例方法),这是一个合理的需要。
127.
【位 置】:504页5行(不计代码)。
【原 译 文】:“在枚举Cache对象的内容时,通常将会返回一个没有属性和方法的DictionaryEntry对象,该DictionaryEntry对象将指向更具体的信息。”
【英文原文】:“When you enumerate the contents of the Cache object, a generic DictionaryEntry object is returned with no property or method pointing to more specific information.”
【建议译文】:在枚举Cache对象的内容时,返回的是一个通用的DictionaryEntry对象,它没有指向更具体的信息的属性和方法。
128.
【位 置】:505页倒数4行至506页1行。
【评 语】:这段文字中所有的“预请求”一词,对应的英文原文是“per-request”。显然译者把前缀“per”与“pre”弄混淆了。这个所谓的“预请求”应该是“每请求”。
129.
【位 置】:506页11行。
【原 译 文】:“CacheDependency基类负责将这个新的依赖对象写入ASP.NET的Cache对象,并且负责处理所有与同步和销毁相关的问题。”
【英文原文】:“The base CacheDependency class handles all the wiring of the new dependency object to the ASP.NET cache and all the issues surrounding synchronization and disposal.”
【评 语】:译者的粗心实在令人难以容忍!是“wiring”,不是“writing”!
【建议译文】:CacheDependency基类将这个新依赖对象与ASP.NET缓存连接起来,并处理与同步和销毁相关的各种事情。
130.
【位 置】:513页19行。
【原 译 文】:“只有在完成HTTP调用或修改完文件后,才能执行扩展存储过程。”
【英文原文】:“The extended stored procedure can’t return until the HTTP call or the file modification is complete.”
【评 语】:难以理解为什么会出这样的错。
【建议译文】:扩展存储过程要等到HTTPY调用或文件修改完成之后才能返回。
131.
【位 置】:520页表14.7倒数4行(对VaryByControl的说明)。
【原 译 文】:“需要组合不同的值来表示所指定的属性,并且会在缓存中创建页面的一个新副本。”
【英文原文】:“Each distinct combination of values for the specified properties will originate a distinct copy of the page in the cache.”
【评 语】:胡说八道。
【建议译文】:所指定的属性的值的每一个不同组合都将导致页的一个不同的副本被缓存。
132.
【位 置】:520页表14.7倒数3行(对VaryByCustom的说明)。
【原 译 文】:“这是一个用分号分隔的字符串列表,根据浏览器类型或用户自定义字符串,该字符串列表用于页面的不同缓存副本。”
【英文原文】:“A semicolon-separated list of strings that lets you maintain distinct cached copies of the page based on the browser type or user-defined strings.”
【建议译文】:一个用分号分隔的字符串列表,它使你能够基于浏览器类型或用户定义的字符串来缓存页面的不同副本。
133.
【位 置】:520页倒数11行。
【原 译 文】:“接着,在避开大多数ASP.NET管道发送请求时,对同一页面或对页面的一个现有参数化版本的请求将会得到处理。”
【英文原文】:“Next, requests for the same page, or for an existing parameterized version of the page, will be serviced while bypassing most of the ASP.NET pipeline.”
【建议译文】:随后,对同一页面或该页面的一个现存的参数化版本的请求将在绕开ASP.NET管道的情况下得到服务。
134.
【位 置】:522页5行。
【原 译 文】:“最后,ASP.NET Request/Cache性能计数器不会更新内核缓存所存储的页面。”
【英文原文】:“Finally, note that ASP.NET Request/Cache performance counters will not be updated for pages served by the kernel cache.”
【建议译文】:最后,ASP.NET Request/Cache性能计数器的统计值不会包含内核缓存所提供的页的数目。
135.
【位 置】:522页倒数7行。
【原 译 文】:“在这种方法中,对于输出的缓存时间,即使页面请求没有到达本地Web服务器,也能够处理它们。”
【英文原文】:“In this way, for the duration of the output, requests for the page can be satisfied even without reaching the native Web server.”
【评 语】:胡说八道。
【建议译文】:这样一来,在输出的缓存期间,对页面的请求甚至在到达原来输出它们的Web服务器之前就能得到满足。
136.
【位 置】:522页倒数5行。
【原 译 文】:“具体说来,在更新服务器上的某个特定页面时,将可以使用HTTP头信息Expires来指定时间。在超过时间后,将使用本地的客户端缓存而不是服务器端缓存来处理所有对浏览器资源的请求。”
【英文原文】:“In particular, the Expires HTTP header is used to specify the time when a particular page on the server should be updated. Until that time, any new request the browser receives for the resource is served using the local, client-side cache and no server roundtrip is ever made.”
【评 语】:胡说八道。
【建议译文】:具体说来,HTTP头Expires用来指定服务器上的一个特定页面应该被更新的时间。在这一时间到来之前,浏览器收到的对该资源的任何新请求都将用本地客户端缓存来服务,不会引起到服务器的往返过程。
137.
【位 置】:523页15行。
【原 译 文】:“如果在同一时期内刷新页面(即访问服务器端),开销会最小,输出缓存模块将缩短对请求的处理过程,并不会处理所有的请求。”
【英文原文】:“If, in the same timeframe, the page is refreshed—meaning that server-side access is made anyway—the overhead is minimal, the request is short-circuited by the output cache module, and no full request processing takes place.”
【建议译文】:如果,在同一时期内刷新页面(这意味着总会引起对服务器端的访问),开销也很小,因为输出缓存模块会走捷径,这一请求不必经历完整的处理过程。
138.
【位 置】:524页倒数7行。
【原 译 文】:“如果缓存页面包含多个以VaryBy为前缀的头信息或参数,则对于每种HTTP头信息或参数名,缓存中都有一个单独的页面版本。”
【英文原文】:“When a cached page has several vary-by headers or parameters, a separate version of the page is available for each HTTP header type or parameter name.”
【评 语】:谁说要“以VaryBy为前缀”了?
【建议译文】:如果一个启用了缓存的页有多个HTTP头或参数在VaryByHeader和VaryByParam设置中被指定,那么对于每一种HTTP头或参数名都会有一个单独的页面缓存版本。
139.
【位 置】:525页表14.10第2行(对HttpCachePolicy.AddValidationCallback的说明)。
【原 译 文】:“注册一个回调函数,以在返回服务器缓存中的页面输出之前,使其有效。”
【英文原文】:“Registers a callback function to be used to validate the page output in the server cache before returning it”
【建议译文】:注册一个回调函数,它被用于在返回服务器缓存的一个页面之前对其进行验证。
140.
【位 置】:528倒数1行。
【原 译 文】:“但是,不能使用在加载页面时就已知的信息,诸如页面主题等。”
【英文原文】:“You can’t use information that is known only when the page is loaded, such as the theme.”
【建议译文】:不能使用只有在页面被加载时才知道的信息,比如主题。
141.
【位 置】:530页9行(不计代码)。
【原 译 文】:“不能完全地缓存包含一些动态内容的页面。如果该页面还包含主要参与计算、并且很少进行更新的内容,该怎么办呢?”
【英文原文】:“A page that contains some dynamic sections cannot be cached entirely. What if the page also contains sections that are both heavy to compute and seldom updated?”
【建议译文】:含有动态部分的页不能被整个地缓存。如果这种页还包含有需要大量计算工作但又不常更新的部分,该怎么办呢?
142.
【位 置】:542页19行。
【原 译 文】:“在这种情况下,为了使身份模拟起作用,需要在SYSTEM帐户下运行ASP.NET应用程序,具备此时所需的全部安全反应。”
【英文原文】:“In this case, for the impersonation to work you need to run your ASP.NET applications under the SYSTEM account, with all the security repercussions that this entails.”
【评 语】:关于这一句,我给出的译文感觉也不是非常理想。如各位有更好的方案,请赐教。
【建议译文】:在此情况下,为了使身份模拟起作用,需要让ASP.NET应用程序运行在SYSTEM帐户下,并承受由此带来的安全方面的影响。
143.
【位 置】:546页16行。
【原 译 文】:“IIS对用户进行身份验证时,ASP.NET不会更进一步地执行任何步骤,并限制它用IIS令牌来授权对资源的访问。”
【英文原文】:“When IIS has authenticated the user, it passes the security token on to ASP.NET. When in Windows authentication mode, ASP.NET does not perform any further steps and limits its use of the IIS token to authorizing access to the resources.”
【建议译文】:IIS对用户进行验证之后,它将其安全令牌传递给ASP.NET。在使用Windows验证模式时,ASP.NET不再执行更多验证步骤,它对IIS传来的令牌的使用限于用它对资源访问进行授权。
144.
【位 置】:557页倒数19行。
【原 译 文】:“在ASP.NET 1.0应用程序之间,以及在ASP.NET 1.1和ASP.NET 2.0应用程序之间,不可能实现cookie共享。”
【英文原文】:“Cookie sharing is impossible between ASP.NET 1.0 applications and both ASP.NET 1.1 and ASP.NET 2.0 applications.”
【建议译文】:在ASP.NET 1.0与ASP.NET 1.1应用程序之间,以及与ASP.NET 2.0应用程序之间,不可能共享cookie。
145.
【位 置】:557页倒数4行。
【原 译 文】:“设置domain属性并不会使一切都被发送到身份验证cookie中;”
【英文原文】:“Setting the domain attribute doesn’t cause anything to be emitted into the authentication ticket;”
【建议译文】:设置domain属性并不会往验证票据中加入什么东西。
146.
【位 置】:578页1行(不计表格)。
【原 译 文】:“注意,LoggedInTemplate模板只向不属于RoleGroups属性中指定角色组的已登录用户显示。该模板(如果有)在<roleGroups>标签中指定,总是被优先应用。”
【英文原文】:“Note that the LoggedInTemplate template is displayed only to logged-in users who are not members of one of the role groups specified in the RoleGroups property. The template (if any) specified in the <roleGroups> tag always takes precedence.”
【建议译文】:注意,LoggedInTemplate模板只对不是RoleGroups属性所指定的任何角色的成员的已登录用户显示。<roleGroups>标签中指定的模板(如果有)总被优先使用。
147.
【位 置】:582页倒数11行。
【原 译 文】:“首先,安全性与应用程序的使用情况、流行性以及与它相连且使用其用户的类型密切相关。”
【英文原文】:“First of all, security is strictly related to the application’s usage, its popularity, and the type of users who connect to it and work with it.”
【建议译文】:首先,安全性与应用程序的使用情况、流行程度以及连接到它并用它工作的用户的类型密切相关。