WCF 4.5:配置文件更小,对 ASP.NET 的支持更好

  • Jonathan Allen
  • 侯伯薇

2012 年 3 月 2 日

话题:.NET语言 & 开发

Ido Flatow 最近发布了一篇文章,其中讲述了一系列WCF 将在.NET 4.5 中做出的变更

由于减少了噪音,WCF 自动生成的配置文件会大大减小。从 WCF 的第一个版本开始,开发者就发现他们需要维护有接近 30 种设定的 app.config 文件,而事实上都只是默认值。了解配置文件的人会删除冗余的设定,但是遗憾的是很多人都没有学到这项技巧。有了 WCF 4.5,配置文件默认只会有绑定类型和名称。

当然,这会引出相关的培训问题,“我怎么知道设定都是什么呢?” 为了回答这个问题,我们还会在配置文件中看到消息提示和自动完成的功能。这不仅仅是基于 schema 的提示;如果你在配置终端,要行为或者配置的名称,它就会非常智能地帮你列举出来。如果配置项、契约类型或者行为名称的拼写有误,这甚至会包括对编译器警告的支持。

对于那些直接使用 WSDL 的人,也有好消息。WCF 4.5 现在会在单独的请求中返回完整的 WSDL。而之前,它只会包括部分 WSDL,还需要获取一系列匹配的 XSD 文件。想要使用这种方法,你需要使用?singleWsdl 查询字符串而不是?singleWsdl。

尽管把 WCF 部署在Windows 服务中是完全可以接受的,但是大多数开发者会在工作中继续使用 IIS。为什么不呢,IIS 提供了对很多特性的内建支持,像身份验证、状态管理以及过程回收等。但是在这个模型中还有一些微软正在努力解决的限制。例如,当前开发者需要在两个地方配置哪种身份验证方式能够得到支持。如果他们意外忘记了 sync,那么服务就会停止运行。WCF 4.5 让开发者可以把验证方式类型设置为“InheritedFromHost”,让服务遵从 IIS 的方式,从而避免了这类特定的缺陷。

遗憾的是,这只是部分的修正。如果 IIS 正好启用了多种身份验证类型,那么客户端只会承认第一个。客户端开发者可以对其重写以使用另一种类型,但前提是他们可以找到另一种方式。请注意这完全是客户端工具的问题,WSDL 会列出所有选项。

在 WSDL 中存在的缺陷在于为 HTTPS 服务端口创建 URI 的方面。从.NET 4.0 开始,WCF 就有了为每种绑定类型(HTTP、TCP 等)自动生成端口的选项。遗憾的是,HTTPS 并没有在那次包含进来,这个疏忽会在.NET 4.5 中改正。Ido Flatow 提到,HTTPS 的版本会发送机器名而不是用来请求 WSDL 的主机名。当使用 web 场的时候这会导致问题。

另一种缺陷在于 WCF 使用流数据的方式。Ori 认为,

当你把 WCF 服务部署在 IIS 中时,即便你不使用 ASP.NET 兼容模式,也会占用一些 ASP.NET 的管道,这在 MSDN 的文章《WCF 服务和 ASP.NET》中有记录(你需要查找关于 PostAuthenticateRequest 事件的部分)。在.NET 4 中存在 ASP.NET 方面的设计缺陷,它会导致传送给 WCF 的请求缓存在 ASP.NET 中。这种缓存行为会导致多种主要的副作用:

这不仅会让处理请求产生延迟,特别庞大的内容甚至会溢出到硬盘上。这也会在 WCF 4.5 中得到修正。

查看英文原文:Lighter Configuration Files and Better ASP.NET Support with WCF 4.5
.NET语言 & 开发