Monthly Archives: 四月 2007

支持Go-Live许可的IIS 7.0 Beta3发布了

【原文地址】IIS 7.0 Beta3 Ships with a Go-Live License【原文发表日期】 Saturday, April 28, 2007 6:33 PM 这个星期,我们发布了作为Windows Longhorn服务器产品一部分的IIS 7.0 Beta 3。IIS 7.0是IIS历史上最大的发布,给微软web服务器带来了许多重大的改进。这篇文章和这个博客贴子列出了它提供的几个重大改进。 新 IIS 7.0 Beta3 特性 这个星期的IIS 7.0 Beta3版本引进了很多远远超出了Windows Vista中的IIS 7.0版本的新的特性和功能,这些特性包括: Web Farm共享的配置:你现在可以配置你的web服务器们为无状态的,对整个web farm集中所有的配置,代码和内容,这使得扩展(scale out)和管理容易之极。在这里了解如何使用这个新特性的详情。 委派的远程管理:你现在可以使用IIS7管理工具通过HTTP/SSL来远程管理web服务器。服务器管理员现在可以关闭设置和把设置管理”委派(delegate)”给网站管理员,对谁能管理机器上的网站提供了更精细(fine-grained)的控制(对租借主机的情形尤其理想)。 自动的应用池隔离:IIS 7.0极大地方便了对web服务器上应用池工作进程的供给(provision)和隔离(isolate)。这对租借主机的情形,以及那些你需要在应用间完全隔离和sandboxing的企业情形来说是非常理想的。 对PHP和其他扩展内置的FastCGI支持:除了提供丰富的.NET扩展性外,IIS 7.0现在提供了对FastCGI扩展的支持,使得使用象PHP那样的动态web服务器框架容易之极。 新的FTP服务器:新的IIS7 FTP服务器现在添加了对使用FTP/SSL进行安全发布的支持,对主机头信息(host header)FTP的支持,对集成的管理工具的支持,和对可插拔的(plugable)认证的支持(使用跟ASP.NET成员系统一样的提供器模型)。 一定要去读一下Bill Staples这里的博客贴子,了解上面所有这些特性的细节。 IIS 7.0 Go Live 许可 经过实验室几个月的压力测试,我们认为IIS7现在已经可以用做更广的客户部署了。为促进这个,微软现在给IIS7和Windows服务器Longhorn Beta3版本提供一个特别的Go-Live许可。这允许你立刻把IIS7服务器部署到生产性的环境里去(注:我们已经把www.microsoft.com部署到该版本上了). 你可以在这里了解IIS7 go-live许可,以及如何免费下载Windows服务器Longhorn Beta3版本的详情。 或者,你也可以去几个已经部署了IIS7 [...]

Posted in 未分类 | Tagged , , , | 8 Comments

Visual Studio Orcas中的Javascript Intellisense

【原文地址】Javascript Intellisense in Visual Studio “Orcas” 【原文发表日期】 Tuesday, April 24, 2007 12:24 AM 2月份时,我写了一个博客贴子,题目叫我的“Orcas初览”讲座。它对随Visual Studio Orcas而来的一些很酷的web开发特性提供了一个很好的总结。如果你还没机会读的话,我建议你在这里看一下。 其中一个殷切期盼的特性是Visual Studio Orcas对客户端Javascript Intellisense的支持(这个特性在免费的Visual Web Developer Express版本中也工作)。 如果你以前曾为手工键入Javascript感到烦恼的话,你肯定会为Orcas的这个特性感到惊喜。Visual Studio现在.aspx 文件,.htm 文件以及外部的.js 文件中提供完整的Javascript Intellisense完成。它对普通的Javascript代码提供了Intellisense ,还对新的ASP.NET AJAX 客户端Javascript框架和用它编写的Javascript代码提供了丰富的支持。 你可以在这里VS Web 工具团队撰写的这2篇综述性贴子里读到关于一些Visual Studio Orcas Javascript 特性的细节: Visual Studio Orcas中的JavaScript Intellisense Visual Studio Orcas中的JavaScript调试 就象Wally 最近在博客里提到的,VS Orcas中的Javascript Intellisense支持之酷处在于,它是设计来开箱即可用(just work out of the box)的。这意味着,你不需要对你的Javascript文件运行什么工具来建立Intellisense提示,你也不用以某种方式来修饰你的Javascript。如果你在外部Javascript文件中建有一个标准的Javascript函数或原型类型,那么你在Visual [...]

Posted in 未分类 | Tagged , , , | 7 Comments

VS发布网站时出现“索引超出了数组界限”问题的公开Hotfix补丁

【原文地址】Public Hotfix Patch for VS “Index was outside the bounds of the array” Publish Website Issue 【原文发表日期】 Monday, April 23, 2007 11:31 PM 2个星期前,我在博客里提到我们发布了一个修复一些ASP.NET 2.0编译问题的公开hotfix补丁。你可以在我这里的贴子里了解该补丁的情况。 在那个贴子的评论部分,几个人问到了他们在Visual Studio SP1中遇上的一个问题,是在使用“发布网站” 命令发布一个在内置的ASP.NET 开发 Web 服务器中配置”/”为其虚拟路径(这是个我曾在以前的技巧/诀窍贴子讨论过的非常酷的技术)的web项目时出现的。 具体地说,安装了VS 2005 SP1的人报告说,在发布时遇上了“Index was outside the bounds of the array(索引超出了数组界限)”的出错信息: 很不幸,这是个VS 2005 SP1中出现的回归缺陷(regression bug,【译注】regression bug是指以前正常工作的软件功能在程序改动后不再工作了)。 好消息是,我们刚刚发布了一个针对这问题的公开的hotfix,你可以在这里直接下载。Omar Khan 在这儿MSDN 上的WebDevTools博客上贴出了有关这个问题和补丁的更详细的情况(我建议你订阅这个博客)。 重要注意事项:有不少人有时问我,他们是否应该主动安装QFE HotFixes(在他们遇上问题之前)。我总是建议别这么做,因为QFE hotfixes只经过有针对性的测试以确认解决了一个特定的问题,但并不经过整个产品的end to [...]

Posted in 未分类 | Tagged , , , | 3 Comments

新Orcas语言特性:查询句法

【原文地址】New “Orcas” Language Feature: Query Syntax 【原文发表日期】 Saturday, April 21, 2007 2:12 上个月我开始了一个贴子系列,讨论作为Visual Studio和.NET框架Orcas版本一部分发布的一些新的VB和C#语言特性。下面是该系列的前三篇贴子的链接: 自动属性,对象初始化器,和集合初始化器 扩展方法 Lambda表达式 今天的贴子要讨论另一个基础性的新语言特性:查询句法(Query Syntax)。 什么是查询句法(Query Syntax)? 查询句法是使用标准的LINQ查询运算符来表达查询时一个方便的声明式简化写法。该句法能在代码里表达查询时增进可读性和简洁性,读起来容易,也容易让人写对。Visual Studio 对查询句法提供了完整的intellisense和编译时检查支持。 在底下,C#和VB编译器则把查询句法的表达式翻译成明确的方法调用代码,这样的代码利用了Orcas中的新的扩展方法和Lambda表达式语言特性。 查询句法的例子: 在我以前的语言系列贴子里,我示范了你可以象下面这样声明一个Person类: 然后我们可以使用下面这样的代码,用一些个人信息来生成一个List<Person>集合实例,然后使用查询句法来对该集合做一个LINQ查询,只取出那些姓(last name)的首字母为G的人,按名字(first name)来排序(升序): 上面查询句法的表达式在语意上与下面明确使用LINQ扩展方法和Lambda表达式的代码是等同的: 使用查询句法方法的好处是,结果会是稍微容易读写些,这在表达式变得更繁复时尤其如此。 查询句法 – 理解from和select子句: 在C#中,每个查询表达式的句法从from子句开始,以select或group子句结束。from子句表示你要查询什么数据。select子句则表示你要返回什么数据,且应该以什么构形返回。 譬如,让我们再来看一下我们对List<Person>集合的查询: 在上面的代码片段里,”from p in people”表示了我要对”people” 这个集合做一个LINQ查询,我将用参数”p”代表我正查询的输入序列的每个项。我们将参数命名为”p” 这个事实是无关紧要的,我完全可以很容易地将其命名为”o”, “x”, “person”或我想要的任何名字。 在上面的代码片段里,语句结尾的”select p”子句表示,作为查询的结果,我要返回一个Person对象的IEnumerable序列。这是因为”people”集合包含了Person类型的对象,而参数p则代表了输入序列中的Person对象。因此,该查询句法表达式的结果数据类型是IEnumerable<Person>。 假如不是返回Person对象,我想返回该集合中的人的名字,我可以把查询改写成这样: 注意上面我不再说”select p”,而是说”select p.FirstName”。这表示我不想返回一串Person对象,而是想返回一串字符串,由Person对象的FirstName属性(该属性是个字符串)填充而来。 因此,该查询句法表达式的结果类型是 IEnumerable<string>。 针对数据库的查询句法的例子 LINQ的妙处在于,我可以针对任何数据类型使用完全一样的查询句法。譬如,我可以使用Orcas提供的新LINQ到SQL对象关系映射器支持,对SQL服务器的Northwind数据库进行建模,生成下面这些类(请观看我这里的录像来学习该如何实现): [...]

Posted in 未分类 | Tagged , , , | 35 Comments

用于Web主机的SQL服务器数据库发布工具包更新

【原文地址】Update of SQL Server Database Publishing Toolkit for Web Hosting 【原文发表日期】 Thursday, April 19, 2007 8:24 AM 几个月前,我在博客里写过由SQL服务器团队开发的新SQL 服务器数据库发布主机工具包 (SQL Server Database Publishing Hosting Toolkit)。你可以在我以前的2个博客贴子里读到关于它提供的功能和如何使用它的教程: Recipe: 把SQL数据库部署到远程主机环境 技巧和诀窍: 如何上传一个.SQL文件到远程主机并且执行它来部署一个SQL数据库 SQL服务器主机工具包是个可下载的免费工具,通过它来创建一个能重建你数据库(包括数据定义,存储过程,以及实际的数据内容)的.SQL脚本文件可真是容易之极。安装该工具完毕之后,你可以在 Visual Studio 或 Visual Web Developer 中右击你的数据库,然后使用相关的向导经过几个步骤来生成脚本: 然后你可以将该脚本通过FTP上传到你的远程主机环境中来执行(我上面第二个贴子示范了一个即使你在远程主机上没有管理员访问权限也可使用的技术)。或者,你也可以使用数据库发布向导提供的内置web服务支持,来直接导出和拷贝你的数据库到你的远程主机提供商那里。 SQL 服务器数据库发布工具包 V1.1 更新版 这个月早些时候,SQL团队推出了工具包的V1.1 更新版。你可以在这里了解相关细节以及下载更新版本。 V1.1 更新版包括了下列改进: 添加了在向导里发布时选择单个对象/数据表的能力(而不用每次都生成/重新生成数据库里的一切) 提高了生成脚本和发布时的性能 30-40% 做了在Internet上发布到主机提供商时可用性方面的改进 它修复了CodePlex论坛上提交的几个缺陷 我绝对建议你去看一下,如果你现在使用远程主机运行你的应用的话,这个免费工具是可以添置到工具箱去的绝对有用之物。 谢谢, Scott 标签: [...]

Posted in 未分类 | Tagged , , , | Leave a comment

在ASP.NET 2.0中操作数据

【原文地址】Working with Data in ASP.NET 2.0【原文发表日期】 Saturday, April 14, 2007 11:08 AM 最近,有一堆关于如何在ASP.NET 2.0应用中操作数据的精彩文章和教程在网上发表了。本贴子着重说一下其中的几个: 在ASP.NET 2.0中操作数据教程系列 Scott Mitchell最近完成了为 www.asp.net 网站撰写的《在ASP.NET 2.0中操作数据 (Working with Data in ASP.NET 2.0)》教程系列。该教程系列包含了超过75个数据教程,内容超过750页!所有的教程都有VB和C#版本,还提供了PDF格式供下载。如果你还没有读过这些教程的话,我非常建议你去这里看一下。 【译注】 ASP.NET MVP朱晔主持翻译了该系列,参考 Scott Mitchell的ASP.NET2.0数据指南中文版索引。 下面是该教程的目录和指向已经发表的文章的链接: 导言 (3篇文章) 基本报表 (3篇文章) 主/从报表 (4篇文章) 自定义格式化 (5篇文章) 编辑,插入和删除数据 (8篇文章) 分页和排序 (4篇文章) 自定义按钮行为 (1篇文章) 使用DataList和Repeater显示数据 (4篇文章) 使用DataList和Repeater过滤数据之场景 (3篇文章) 使用DataList编辑和删除数据 (8篇文章) DataList和Repeater的分页和排序 (2篇文章) DataList和Repeater的自定义按钮行为 [...]

Posted in 未分类 | Tagged , , | 4 Comments

ASP.NET编译问题的公开Hotfix补丁发布了

【原文地址】Public Hotfix Patch Available for ASP.NET Compilation Issues 【原文发表日期】 Wednesday, April 11, 2007 10:39 PM 过去的一年里,我们发现和修补了大家报告遇上的几个ASP.NET 2.0编译缺陷。 引发这些缺陷的原因有多个,但根本原因通常跟项目的结构有关,这些项目有特别的跨页面的循环依赖。这些缺陷往往在系统上发生大规模的文件变化时(譬如,一个抗病毒程序同时更新很多文件上的所有时间戳)会被触发。 出错信息的例子: 下面这些出错信息,是你遇上这些编译问题时,你也许看到的运行时异常类型的例子: Unable to cast object of type ’ASP.masterpage_master’ to type ’ASP.masterpage_master’. (无法将ASP.masterpage_master类型的对象转换成ASP.masterpage_master类型) 或者: Could not load file or assembly ’App_Web_e9dbmaj, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null’ or one of its dependencies. The system cannot find the file specified. (无法装载文件或程序集“App_Web_e9dbmaj, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”或它的依赖向。系统找不到指定的文件。) 或者: Compiler Error Message: CS0006: Metadata file ’C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\cms.web\44e73607\b028acb3\App_global.asax.fakktchx.dll’ could not be found (编译错误信息:CS0006:找不到元数据文件“C:\WINDOWS\Microsoft.NET\Framework\v2.0. 50727\Temporary ASP.NET Files\cms.web\44e73607\b028acb3\App_global.asax.fakktchx. dll”。) 或者: System.InvalidOperationException: The resource class for this page was not found. Please check if the resource file exists and try again (System.InvalidOperationException: 找不到当前页面的资源类。请检查资源文件确实存在,然后再试。) 这些问题的临时解决方案: 如果你有一个应用开始抛出上面这些错误中的某一个时,你通常可以马上施用一个临时解决方案,打开你应用的web.config文件,将 <compilation> 节的 batch 属性设置成false: <configuration>    <system.web>       <compilation debug=”false” batch=”false”></compilation>   </system.web> </configuration> 这告诉ASP.NET把单个的 .aspx/.ascx 文件动态编译成单独的程序集,这会避免触发异常的循环引用的问题。 你也可以使用下列步骤,删去“Temporary ASP.NET Files”缓存里的文件,来临时解决这个问题: 点击Windows开始按钮,点击运行,输入 [...]

Posted in 未分类 | Tagged , , , | 7 Comments

新Orcas语言特性:Lambda表达式

【原文地址】New “Orcas” Language Feature: Lambda Expressions 【原文发表日期】 Sunday, April 08, 2007 4:21 PM 上个月我开始了一个贴子系列,讨论作为Visual Studio和.NET框架Orcas版本一部分发布的一些新的VB和C#语言特性。下面是这个系列的前2篇贴子: 自动属性,对象初始化器,和集合初始化器 扩展方法 今天的贴子讨论另一个基础性的新语言特性:Lambda表达式。 什么是Lambda表达式? 随VS 2005发布的C#2.0引进了匿名方法的概念,允许在预期代理(delegate)值的地方用“行内(in-line)”代码块(code blocks)来做替代。 Lambda表达式为编写匿名方法提供了更简明的函数式的句法,但结果却在编写LINQ查询表达式时变得极其有用,因为它们提供了一个非常紧凑的而且类安全的方式来编写可以当作参数来传递,在以后作运算的函数。 Lambda表达式的例子: 在我以前的扩展方法博客贴子里,我演示了你如何可以象下面这样声明一个简单的Person类: 然后,我示范了你可以如何使用一些值来生成一个List<Person>集合的实例,然后使用由LINQ提供的新的Where和Average扩展方法来返回集合中的人的一个子集,以及计算这个集合中的人的平均年龄: 上面高亮标记的红色 p => 表达式就是Lambda表达式。在上面的例子里,我用第一个lambda来指定获取特定人时所用的过滤条件,用第二个lambda来指定在计算平均年龄时该用Person对象的哪个值。 详解Lambda表达式 理解Lambda表达式最容易的方法是把它们设想成编写简明的行内方法的方式。譬如,我上面编写的例子可以使用C#2.0的匿名方法来编写,象这样: 上面两个匿名方法都接受一个Person类型的参数。第一个匿名方法返回一个布尔值,表示Person的LastName是否是Guthrie,第二个匿名方法返回一个整数值(返回那个人的年龄)。我们前面使用的lambda表达式的作用是一样的,两个表达式都接受一个Person类型的参数。第一个lambda表达式返回一个布尔值,第二个返回一个整数。 在C#里,一个lambda表达式在句法上是写成一个参数列表,随后是 => 符号,随后是表达式在调用时要运算的表达式或者语句块: params => expression 所以,当我们编写这样的lambda表达式时: p => p.LastName == “Guthrie”  我们是想表示,我们在定义的Lambda接受一个参数p,要运行的代码表达式返回p.LastName的值是否等于“Guthrie”。 我们将参数命名为p是不相干的,我也可以很容易地将其命名为o,x,foo,或者我想要的任何名字。 不象匿名方法要求参数类型是明确地指明的,Lambda表达式允许省略参数类型,而允许它们根据用法来推断出类型。譬如,当我编写 p=>p.LastName == “Guthrie” 这个lambda表达式时,编译器推断出p参数属于Person类型,因为当前的Where扩展方法的对象是个范型的List<Person>集合。 Lambda参数的类型可以在编译时和被Visual Studio的intellisense引擎推断出来,这意味着在编写lambda时你将获得完全的intellisense 和编译时检查。譬如,注意当我在下面健入 [...]

Posted in 未分类 | Tagged , , , | 37 Comments

技巧和诀窍:在IIS 7.0上使用自签证书来启用SSL

【原文地址】Tip/Trick: Enabling SSL on IIS 7.0 Using Self-Signed Certificates 【原文发表日期】 Friday, April 06, 2007 12:31 AM SSL允许浏览器与web服务器在一个安全的通道上交换信息,以防范窃听,篡改和消息伪造。你应该总是在登录页面(用户在上面输入用户名和密码),以及网站上其他所有安全敏感的网页上使用SSL,譬如,那些显示财务或个人信息的帐号网页。 在Windows早期的IIS版本上配置SSL很痛苦,搞清楚如何安装和管理证书,然后如何将证书与一个网站相关联,我敢说是大多数web开发人员并不知道怎么做的事情。 好消息是,IIS 7.0使配置和启用SSL成为小菜一碟。IIS 7.0现在对创建“自签证书(Self Signed Certificates)”也有内置的支持,自签证书允许你轻松地创建测试或个人证书,然后你可以用之来为开发或测试目的对一个网站快速启用SSL。 使用IIS 7.0的话,你可以在30秒内对一个现有的网站完成启用SSL。下面的教程示范该怎么来做。 第一步:创建一个新网站 我们先使用新的IIS 7.0管理工具创建一个新的网站。这个管理工具是对以前IIS管理工具的完全重写的结果(是使用Windows Forms全部用托管代码写成的),提供了对web特性更逻辑的组织。它对所有的ASP.NET和IIS设置提供了一个GUI管理体验:   要在机器上创建一个新的网站,在左手的树形视图窗口里右击“网站(Web Sites)”节点,选择“添加网站(Add Web Site)”上下文菜单选项。输入适当的细节创建一个新的网站: Windows Vista上IIS7的一个很棒的特性是,你现在可以在本机上拥有的网站数目不再受限制(早期Windows客户机上IIS版本只允许一个网站)。早期Windows客户机IIS版本的10个并发请求的限制在IIS 7.0上也不再存在。 我们完成上面的步骤后,在我们的IIS web服务器上就有一个崭新的网站在运行了。 第二步:创建一个新的自签证书 在把SSL规则绑定到我们的新网站之前,我们首先需要引入和建立一个安全证书来用于SSL绑定。 在IIS 7.0中,可以这么来管理证书,点击左手树形视图管理器里的根机器节点(root machine node),然后在右边的特性视窗里选择“服务器证书(Server Certificates)”图案: 这会列出在机器上注册了的所有证书,并允许你引入或者创建新的证书。 我也可以去象Verisign这样的证书机构购买一个证书,然后用这个管理界面来引入。或者,我也可以创建一个“自签证书”,这是个测试证书,我可以在开发期间用来测试我的网站。可以这么做,在管理工具的右手边点击“创建自签证书(Create Self-Signed Certificate)”链接: 给证书输入一个名字 (譬如:“test”),点击OK. 然后IIS7就会自动为你创建一个自签加密证书(self-signed crypto certificate),同时与机器注册该证书: [...]

Posted in 未分类 | Tagged , , , | 3 Comments

JSON劫持以及ASP.NET AJAX 1.0是如何避免这些攻击的

【原文地址】JSON Hijacking and How ASP.NET AJAX 1.0 Avoids these Attacks【原文发表日期】 Wednesday, April 04, 2007 11:39 AM 最近,由安全研究人员发表的一些报告描述了一些方法,可以被黑客通过利用为绝大多数流行的AJAX框架所用的JSON线上格式来试着利用(exploit)浏览器中的跨域脚本。具体来说,这些攻击使用通过 HTML <script src=””> 包含(include)元素来调用的HTTP GET请求来绕过由浏览器强制执行的“同源策略(same origin policy)”(同源策略限制了象XmlHttpRequest这样的JavaScript对象只能调用当前页面来自的同一域上的URL),然后寻找利用(exploit)JSON负载内容的方法。 ASP.NET AJAX 1.0 包括了许多默认设置和内置特性,可以防范它免受这些类型的JSON劫持攻击。下面是它如何缓和这些攻击的一些细节: ASP.NET AJAX Web方法在默认情形下是禁止HTTP GET请求的 通过浏览器中的HTML <script src=””> 元素来装载的脚本文件只能通过HTTP GET动词请求来获取。 在默认情形下, ASP.NET AJAX的web服务层不允许web方法通过HTTP GET 动词来调用。譬如,假如一个开发人员编写了象下面这样的web服务方法: [WebMethod]public StockQuote[] GetQuotes(string symbol) { } ASP.NET只允许上面的GetQuotes方法通过HTTP POST动词来调用,会拒绝通过HTTP GET动词调用该方法的任何尝试。 要使一个ASP.NET AJAX web方法可以通过HTTP GET来访问,开发人员必须明确地使用ASP.NET的ScriptMethod 特性来标记每个web方法(同时设置UseHttpGet属性为true): [WebMethod] [ScriptMethod(UseHttpGet=true)]  public StockQuote[] GetQuotes(string symbol) {  }  虽然这类改动很容易做,但它要求一个开发人员有意识地启用web服务的GET调用。ASP.NET AJAX [...]

Posted in 未分类 | Tagged , , , | 2 Comments