首页 新闻 会员 周边 捐助

关于WCF的一些疑问

0
悬赏园豆:20 [已解决问题] 解决于 2007-12-28 09:31
<FONT face=宋体>&nbsp; 利用<SPAN lang=EN-US>WCF</SPAN>,不同系统之间可以进行通信,同时层与层之间也可以基于<SPAN lang=EN-US>WCF</SPAN>来进行通信。对于<SPAN lang=EN-US>UI</SPAN>层与<SPAN lang=EN-US>BLL</SPAN>层之间的通信,如果是基于<SPAN lang=EN-US>WPF</SPAN>或<SPAN lang=EN-US>WinForm</SPAN>的<SPAN lang=EN-US>C/S</SPAN>架构,那么基于<SPAN lang=EN-US>WCF</SPAN>是非常方便的,但是如果是<SPAN lang=EN-US>B/S</SPAN>的架构,<SPAN lang=EN-US>ASP.NET</SPAN>页面与业务逻辑层可能部署在同一个<SPAN lang=EN-US>IIS</SPAN>中,</FONT><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN style="FONT-FAMILY: 宋体">以前可以直接基于<SPAN lang=EN-US>API</SPAN>来调用业务逻辑层,现在有无必要也基于<SPAN lang=EN-US>WCF</SPAN>来实现?<BR></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp; 由以上问题也引入了另一个问题,对于一个业务逻辑层的接口,是直接将其声明为一个<SPAN lang=EN-US>ServiceContract</SPAN>,<SPAN lang=EN-US>(</SPAN>对于一个<SPAN lang=EN-US>ServiceContract</SPAN>,外部系统如何知道?外部系统怎样生成客户端?如果没有那个什么<SPAN lang=EN-US>util</SPAN>工具的话<SPAN lang=EN-US>.)</SPAN>还是引入一个新的接口,然后再将这个新的接口声明为一个<SPAN lang=EN-US>Service Contract</SPAN>?如果这样做的话,则对于<SPAN lang=EN-US>B/S</SPAN>架构来说,<SPAN lang=EN-US>ASP.NET</SPAN>的页面则直接调用业务逻辑层的接口来获取数据,而对于<SPAN lang=EN-US>C/S</SPAN>或移动设备上的程序,则通过对外提供的<SPAN lang=EN-US>ServiceContract</SPAN>来进行访问?同样对于业务逻辑层与数据访问层之间是否也可以如此?<BR></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">&nbsp;&nbsp; 对于一些系统来说,各层是部署在同一台机器上还是部署在不同的机器上,是在部署阶段才确定的,而不是在设计阶段确定的,</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">如果各层都分别部署在不同的机器上,则利用<SPAN lang=EN-US>WCF</SPAN>是非常方便的,如果在同一台机器上,则<SPAN lang=EN-US>WCF</SPAN>不适合?那么可否做到如下:如果在同一台机器上,则希望直接通过接口调用,而如果在不同的机器上,则希望基于<SPAN lang=EN-US>WCF</SPAN>调用。可否做到?</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">又该如何做<SPAN lang=EN-US>?<?xml:namespace prefix = o /><o:p></o:p></SPAN></SPAN></SPAN> <P class=MsoNormal><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p><SPAN style="FONT-FAMILY: 宋体">&nbsp;</SPAN></o:p></SPAN></P>
中尉的主页 中尉 | 菜鸟二级 | 园豆:252
提问于:2007-12-12 19:42
< >
分享
最佳答案
0
刚学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个服务包装生成新的服务。因此,你是否建立新的服务契约,看你的需求了。
G yc {Son of VB.NET} | 老鸟四级 |园豆:2006 | 2007-12-13 14:37
其他回答(1)
0
若系统不是十分庞大,不是分布式应用的话,没有必要引入wcf,那样只会增加不必要的复杂性,而且也会拖慢系统的速度,加大服务器的负载。 WCF和WebService一样都是有自描述的功能,所以外部系统可以通过这个自描述来得知ServiceContract的定义。 系统是不是分布式不可能等到布署时才确定,就好像建大楼时候,是不可能先建好上面的楼层,才来确定地基要怎么打。 对于最后的问题,个人认为应该是先做好简单的先,等到真有需要为外部系统提供功能,或者升级为分布式应用的时候才引入WCF,如果只是简单地为外部提供一些服务,比如说,支持客户端管理之类,则完全可以通过WCF将原来写好的业务逻辑暴露出来。。 分布式应用没实践过,就不讲太多了。
Klesh Wong | 园豆:780 (小虾三级) | 2007-12-12 21:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册