[已解决问题] 关于WCF的一些疑问
提问时间: 2007-12-12 19:42
悬赏分:20 浏览:916 次
  利用WCF,不同系统之间可以进行通信,同时层与层之间也可以基于WCF来进行通信。对于UI层与BLL层之间的通信,如果是基于WPFWinFormC/S架构,那么基于WCF是非常方便的,但是如果是B/S的架构,ASP.NET页面与业务逻辑层可能部署在同一个IIS中,以前可以直接基于API来调用业务逻辑层,现在有无必要也基于WCF来实现?
   由以上问题也引入了另一个问题,对于一个业务逻辑层的接口,是直接将其声明为一个ServiceContract(对于一个ServiceContract,外部系统如何知道?外部系统怎样生成客户端?如果没有那个什么util工具的话.)还是引入一个新的接口,然后再将这个新的接口声明为一个Service Contract?如果这样做的话,则对于B/S架构来说,ASP.NET的页面则直接调用业务逻辑层的接口来获取数据,而对于C/S或移动设备上的程序,则通过对外提供的ServiceContract来进行访问?同样对于业务逻辑层与数据访问层之间是否也可以如此?
   对于一些系统来说,各层是部署在同一台机器上还是部署在不同的机器上,是在部署阶段才确定的,而不是在设计阶段确定的,如果各层都分别部署在不同的机器上,则利用WCF是非常方便的,如果在同一台机器上,则WCF不适合?那么可否做到如下:如果在同一台机器上,则希望直接通过接口调用,而如果在不同的机器上,则希望基于WCF调用。可否做到?又该如何做?

 


最佳答案
刚学WCF,发表 一下自己的看法

WCF是一种基于SOA的架构建立,即理解 总是存在客户端和服务端,他们可以在同一个程序中,也可以分开。

我个人理解,一个Web客户端 等同于 一个WinForm客户端(或其他)。由于ASP.NET的限制只能使用HTTP绑定,即Web Services。那么可以借此,直接AJAX来应用这个。(值得说的是在VS2008中,提供了一个专门供AJAX的WCF服务)  
至于你说的,API我的理解是和服务放在一个机器上,这样做的话,有个问题是很难理解那个Web是服务端,还是客户端。 这方面,你还是参考一下使用Web Serivces的系统,看看。

对于服务契约来说,没有什么,可以通过配置发布元数据,来获取信息,那个Svcutil也是通过这个元素据而生成的代理类,实际上,也可以动态的生成代理和使用。(不过就是有点复杂而已).
对于服务契约来讲,一旦发布,将不能更改,这个即是限制也是规则。

至于数据层来说,这个虽然是逻辑上的,但实质是类库,没有实体的。所以,都是编译到服务中的。(也许有特例,但我目前了解到的都是这个样子)

对于部署,也是一个大话题,有很多总方式,不过,一般这种服务,都是可以分开部署,然后可以设置服务矩阵,来应用负载平衡。
一般,轻量的,可以部署在同一个机器上,而大量的话,可以通过分开部署,来提高吞吐量。(可以看看Team Foundation Server 这个使用 Web Services,并支持单机部署和多机部署)

对于在同一个机器上的客户端,可以考虑,使用不同的绑定,比如:对公网使用HTTP,对内网使用TCP等。 这样就可以获得很好的效率。但机制还是一样的。
当然,这些都给通过配置实现,这是WCF的提点, 可以通过修改配置文件,更改使用的协议。

至于楼主说的新服务契约,可以看看SOA的说法,在SOA中,允许为2个服务包装生成新的服务。因此,你是否建立新的服务契约,看你的需求了。
2007/12/13 14:37:57 回答者:G yc {Son of VB}


提问者对于答案的评价:真诚感谢两位的回答.有机会请多交流.再次感谢.
其它回答(1)
若系统不是十分庞大,不是分布式应用的话,没有必要引入wcf,那样只会增加不必要的复杂性,而且也会拖慢系统的速度,加大服务器的负载。

WCF和WebService一样都是有自描述的功能,所以外部系统可以通过这个自描述来得知ServiceContract的定义。

系统是不是分布式不可能等到布署时才确定,就好像建大楼时候,是不可能先建好上面的楼层,才来确定地基要怎么打。

对于最后的问题,个人认为应该是先做好简单的先,等到真有需要为外部系统提供功能,或者升级为分布式应用的时候才引入WCF,如果只是简单地为外部提供一些服务,比如说,支持客户端管理之类,则完全可以通过WCF将原来写好的业务逻辑暴露出来。。

分布式应用没实践过,就不讲太多了。
7个月前   回答者:Klesh Wong - 小虾三级
评论
   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除