【翻译】WCF4.5:更少的配置和ASP.NET更好的支持
原文地址:
http://www.infoq.com/news/2012/02/WCF-4.5
Ido Flatow发表了一些列的博客,来讲述.NET4.5中关于WCF的更新
链接地址:
(有时间的话我会陆续翻译)
出于削减复杂性的目的,WCF自动生成的配置文件将会变得非常、非常的小。自从第一个版本的WCF以来,开发人员发现他们需要维护一个大概有30个配置节的app.config文件,而这些配置节都可以用默认值来代替。谁都知道删除这些多余的设置比较好,但不幸的是,谁都没有学会这一招!在WCF 4.5中配置文件只需要设置绑定的类型和名称即可!
当然这导致了另一个问题:“我怎么知道这些设置是什么呢?”为了回答这个问题,我们必须知道配置文件后端的代码(与配置信息相关的代码),并且配置文件的提示并不在是基于schema的智能提示。如果你正在编辑一个endpoint,你需要知道一个behavior的名字,这个时候开发工具会把可用的behavior的名字都给你列出来。在编译时一些配置文件的错误,如契约类型(contract type)行为名称(behavior name)的错误都会被提示出来。
对于那些直接使用WSDL的开发人员来说,也有好消息。WCF 4.5将会在一个单独的请求中返回一个完整的WSDL。在此之前,只会包含一部分WSDL,这将需要一系列的XSD文件来匹配这个WSDL。使用?singleWsdl查询字符串取代?singleWsdl可以使用这个改进
把WCF服务寄宿到系统服务内是完全可行的。但大多数开发人员继续在IIS下完成大量的工作。为什么呢?因为IIS提供了很多内置的支持功能,比如身份验证,状态管理和进程回收等。但在IIS下开发WCF服务仍然有一些限制,微软也正在解决这些问题。比如:必须通过配置才能解决在两个地方的身份认证服务,如果他们由于异常而没有同步,那么这个WCF服务就会停止运行。WCF4.5通过允许服务按IIS的方式来进行身份认证(设置身份认证的方式为“继承自宿主InheritedFromHost”)除掉了此类型的BUG
不幸的的是这只是一个局部修复,如果IIS激活了多个身份验证类型,那么客户端只会知道第一个。当然客户端开发人员会找到另一种方法解决这个问题:他们可以使用另一种类型重写这个身份验证类型。
在为基于HTTPS的服务构造URIs对象时,在WSDL信息中显示了一个BUG,在.net 4中WCF有自动选择端口的特性(针对各种类型的绑定,TCP,HTTP等)不幸的是,HTTPS在那是还没有被包括进来。在.NET4.5中这些疏忽将被纠正。Ido Flatow认为HTTPS 版本是在为主机名做广告而不是访问WSDL的宿主名(host name),这些可能将成为使用web form时的问题。
另一个bug是关于WCF传输流数据的,Ido Flatow:
当你把WCF服务寄宿在IIS上时,即使你没有使用asp.net兼容模式,你也一样会得到asp.net处理管线的一部分。可以在MSDN文档:WCF服务和ASP.NET(查找PostAuthenticateRequest Event部分)找到相关内容。在.Net 4中,ASP.NET里有一个设计缺陷,对WCF的请求会在ASP.NET中缓冲,这些缓冲行为会引起一些副作用
这不仅仅造成处理请求的延时,更严重的是,相当大的一部分内容溢出到硬盘上了。
在WCF 4.5中解决了这个问题。