10、主持人:利用WCF,不同系统之间可以进行通信,同时,层与层之间也可以基于WCF来进行通信。对于UI层与BLL层之间的通信,如果是基于WPF或WinForm的C/S架构,那么基于WCF是非常方便的,但是如果是B/S的架构,asp.NET页面与业务逻辑层可能部署在同一个IIS中,以前可以直接基于API来调用业务逻辑层,现在有无必要也基于WCF来实现?
赵劼:“分布式应用的第一条准则就是不分布式”,分布式通信相对于进程间通信的确会带来较为明显的性能降低,像您说的情况,比如ASP.NET的Web层和业务逻辑,很可能就不应该使用WCF来通信。事实上,如果用Java一脉的技术来说,以前EJB远程访问横行,但是现在的互联网应用几乎都不太适用EJB了,而是使用Struct、Spring等轻量级框架,因为远程通信代价很高。
张逸:选择某种技术,首先要看其具体应用的场景和需求,而不是觉得这门技术好或者新就选用。对于B/S系统而言,如果需求没有要求其他系统采用服务的方式调用该 B/S系统,那就没有必要采用WCF技术。最合理的方式是,在B/S系统中,专门设计一个服务层,体现所谓面向服务的特点,这个服务层中的服务相对粒度较粗一点,而且应该是其他系统可能会调用的。我们可以事先考虑到这一层的设计。它并不一定是B/S系统内部调用,而是考虑未来的扩展。
11、网友提问:我还有一个问题,我觉得WCF还是没有一个明显的应用服务器。如果部署在iis的,那其实就是web service了吧!不知道WCF是否会有一个真正的应用服务器,就好像com+和ejb的应用服务器那样,提供完整的组件管理,调度,负载均衡等功能。
张逸:其实BizTalk就是很好的一个应用服务器。当然,我们也可以利用WCF开发一个轻量级的应用服务器。网上有这方面的文章。赵劼:当然,万事不能一概而论,对于一些企业应用,或者大规模的系统集成,很可能也是需要使用WCF将业务逻辑进行释放。这也就是为什么互联网应用大都不需要单独的应用服务器,而企业应用很多都会有独立的应用层。
12、网友提问:WCF程序现在的稳定程度如何?可以大规模在企业开发中应用吗?
张逸:目前WCF已经得到足够的发展,稳定性方面完全能够适用于企业开发。唯一美中不足的是,对于Internet场景,利用HttpBinding传输的方式,在性能上还存在一定的局限性。
13、网友提问:WCF有哪些扩展点?比如我自定义transfer sink,自己在传输链路中加入安全机制等?
赵劼:WCF提供了很灵活也很复杂的扩展。我没有理解您的意思,如果您只是说实现自己的安全机制,这个自然可以。但是如果您是指在TCP/IP协议级别(或类似的通信级别)的扩展,那么很明显WCF就无能为力了。
4、网友提问:WCF支持一个接口暴露成RSET服务吗?
赵劼:在.NET 3.5中提供了WCF HTTP Service,专为释放RESTful接口而设计。
张逸:目前WCF支持对绑定和行为的扩展。建议你阅读一下MSDN中Aaron Skonnard的文章,他对于这些内容已经做了很好的介绍。您可以看看这篇文章:http://msdn.microsoft.com/msdnmag/issues/07/12/ServiceStation/Default.aspx?loc=zh。另外,WCF 3.5支持REST服务。
15、网友提问:有人说WCF是Vista的组成部分,确实是这样吗?它们之间有什么关系?
赵劼:Vista包含了WCF,但是WCF是个可以独立于Vista的组件,例如您也可以在Server 2003中安装使用。
16、网友提问:Ajax调用WCF,会不会加重服务器的承受能力?
赵劼:WCF本身不会对服务器增大压力,带来压力的一般都是业务本身。也就是说,WCF很难成为性能瓶颈。不会因为AJAX调用WCF而造成性能问题。
17、网友提问:Remoting有一种工厂方式的创建边界对象的方法使用还很广泛,WCF中好像没找到对应的方式。WCF里有Duplex消息交换模式,但还是不能解决remoting客户端从一个简单接口批量获取一群边界对象的问题,至少不能完全代替。
张逸:不