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
中文原文InfoQ:WCF 4.5:配置文件更小,对ASP.NET的支持更好