CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  Web Services

WebService中的类在客户端调用问题,(分不够在加)

楼主yumanqing(笨鸟)2006-12-02 20:44:55 在 .NET技术 / Web Services 提问

我有个项目是这样做的,打算用WebService做跨B/S结构,看了相关资料,为了速度,准备把业务逻辑层和数据处理层都放在服务器端,那么在WebService中添加了三个类库,分别是BLL层,DAL层和MODEL实体.  
  那么我在客户端怎么调用这些这些类中的方法呢?能否直接调用呢?  
  如果通过[Webmethod]   做接口调用的话,那WebService中不是要定义太多的方法.这样的设计合理吗?望做过类似的人指点.谢谢! 问题点数:100、回复次数:32Top

1 楼kyle315(给我个支点,我能翘起地球仪)回复于 2006-12-02 20:48:39 得分 10

理论上应该是这样的?你只有通过[Webmethod]公开你的方法,在客户端才可以调用。Top

2 楼xiaoqhuang(人生就象在拉屎,有时你很努力了可出来的只是一个屁。)回复于 2006-12-02 21:15:55 得分 10

远程当然只能调用[Webmethod]声明的方法了。  
   
  准备把业务逻辑层和数据处理层都放在服务器端  
   
  ==============  
  在部署上来说,这2个层不就是2个.dll文件Top

3 楼califord(远方)回复于 2006-12-02 21:42:23 得分 10

要是没有特别要求,我想分层不分层无所谓,只要功能实现Top

4 楼charles_y(每天上网一小时)回复于 2006-12-03 16:12:21 得分 8

只把bll层暴露给最终的客户就行  
  所以只要把bll做成WebService就行了。  
  Top

5 楼jijl2001(jijl2001)回复于 2006-12-03 16:21:37 得分 5

做一个业务外观,把需要暴露给客户的声明为Webmethod,不需要整个bll。Top

6 楼yumanqing(笨鸟)回复于 2006-12-03 21:05:44 得分 0

 
  感谢几位的建议!!  
   
  做一个业务外观,把需要暴露给客户的声明为Webmethod,不需要整个bll。  
   
  ----------------------------------------------------------------------  
   
  这样的话如果有几十张表的话,那么WebService中的Webmethod方法岂不是太多了,且整个程序的业务逻辑调用的接口都在一起,不是有些乱吗?有些迷茫...  
  望有经验的人士提提建议....感谢....Top

7 楼charles_y(每天上网一小时)回复于 2006-12-03 21:47:11 得分 10

跟表的多少没有关系,只跟需要暴露给客户的方法有关系。  
   
  我上面没有说清楚,其实并不是把所有的bll层都做成webmethod,上面一位朋友说的好,把需要暴露的做成业务外观,即把bll层分为   business   rules   和   business   facades,   facades   层做成webmethod,所谓facade,就是把一组描述相似的方法放在一起,具体可以参见外观模式。  
   
  如果对具体应用还没有多少感性认识的话,可以看看微软的例子   duwamishTop

8 楼yumanqing(笨鸟)回复于 2006-12-04 08:40:08 得分 0

我明白了一些,把BLL层的必须暴露的给做成webmethod,可是如果客户添加一条记录,可以用实体类的对象做参数吗?还有?可以返回给界面层对象集合吗?这是跨B/S的。  
  等待。。。。Top

9 楼yumanqing(笨鸟)回复于 2006-12-04 08:53:06 得分 0

顶一下,关注中。。。。。Top

10 楼yumanqing(笨鸟)回复于 2006-12-04 09:25:39 得分 0

真的就沉了吗?5555555Top

11 楼michael_zy(枫林)回复于 2006-12-05 11:30:29 得分 10

我做过基于webservice的b/s+c/s的项目.bll层应该在客户端,dal业务逻辑层放在服务器端.  
  webservice中定义几个方法就足够了,bll层调用webservice,通过webservice执行指定的dal中的某个类的方法(工厂模式).  
   
  而且,dataset是可以序列化的,也很方便传递参数,如果你认为dataset不好用,  
  你可以自定义一个参数的类,然后传递arraylist也可以,数组也行.....Top

12 楼yu_sunny(地域使者)回复于 2006-12-05 11:34:34 得分 10

Dim   xmlhttp   As   New   MSXML2.xmlhttp  
  Dim   xmldom   As   New   MSXML2.DOMDocument  
  Dim   str   As   String  
  Dim   nodelist   As   IXMLDOMNodeList  
  Dim   xml   As   Variant  
  str   =   ""  
  str   =   "<?xml   version='1.0'   encoding='utf-8'?>"  
  str   =   str   &   "<soap:Envelope   xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'   xmlns:xsd='http://www.w3.org/2001/XMLSchema'   xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>"  
  str   =   str   &   "<soap:Body>"  
  str   =   str   &   "<GetFlexWeather24TimeInfo   xmlns='http://tempuri.org/'>"  
  str   =   str   &   "<p_strCityName>"   &   "上海"   &   "</p_strCityName>"  
  str   =   str   &   "</GetFlexWeather24TimeInfo>"  
  str   =   str   &   "</soap:Body>"  
  str   =   str   &   "</soap:Envelope>"  
  xmlhttp.open   "post",   "http://webservice.k-zone.cn/GetFlexWeatherService/GetFlexWeatherService.asmx?op=GetFlexWeather24TimeInfo",   False  
  xmlhttp.setRequestHeader   "Content-Type",   "text/xml;   charset=utf-8"  
  xmlhttp.setRequestHeader   "Content-Length",   Len(str)  
  xmlhttp.setRequestHeader   "SOAPAction",   "http://tempuri.org/GetFlexWeather24TimeInfo"  
  xmlhttp.send   (str)  
  If   (xmlhttp.readyState   =   4)   Then  
      If   (xmlhttp.Status   =   200)   Then  
          xml   =   xmlhttp.responseXML.xml  
          xmldom.loadXML   (CStr(xml))  
          Set   nodelist   =   xmldom.getElementsByTagName("GetFlexWeather24TimeInfoResult")  
          MsgBox   nodelist(0).Text  
      End   If  
  End   IfTop

13 楼yumanqing(笨鸟)回复于 2006-12-06 09:43:42 得分 0

感谢以上几位的指导,受益非浅,我也明白了许多,可是还是有一点不太明白。就是如果用webservice做业务外观层的话,那么webservice中的方法好像有点太多了,有什么简便的方法没有,谢谢。在加50分Top

14 楼yumanqing(笨鸟)回复于 2006-12-06 11:02:03 得分 0

在顶一下,不要沉了,等着开工呀Top

15 楼charles_y(每天上网一小时)回复于 2006-12-06 13:38:41 得分 8

上面一位朋友说   business   放在客户端,这也是可以的,关键是看你的webservice是干什么用的,如果只是为了存取数据,当然是可以的。比如你用的系统是两个不同的business,只是使用相同的数据源,这样就可以使用webservice来做DAL。  
   
  把business   放在webservice分离的是表示层,这样你的表示层(画面显示,用户输入)不管使用的是webform还是winform,都不需要重复做一遍business。  
   
   
  To   yumanqing(共同学习(学习ing)),  
  你怕webservice中的方法太多,那不用webservice难道方法就少了?方法的多少用不用webservice应该都是一样的吧,只不过一个写在webservice中另一个不写在webservice中罢了。  
  或者是我理解错了,你是想把所有的webmethod都写在一个webservice中?这当然是万万不可取的。如果是用外观模式的话,一个webservice应该也就负责一组外观吧  
   
  还是那个建议,看看duwamish   之类的例子  
   
   
  Top

16 楼yumanqing(笨鸟)回复于 2006-12-07 09:02:49 得分 0

非常感谢   charles_y(每天上网一小时)  
   
  你是说一个webservice拥有多个webservice服务,不同组的业务外观调用不同得webservice吗?  
  这也是个不错的方法,在顶一下。还有那位大侠指导指导。TKSTop

17 楼yumanqing(笨鸟)回复于 2006-12-07 14:06:37 得分 0

在UP一下。。。。Top

18 楼yumanqing(笨鸟)回复于 2006-12-08 08:44:49 得分 0

upTop

19 楼ruide205(蓝色河流)回复于 2006-12-08 09:31:59 得分 1

帮顶Top

20 楼Radar2006(中华英雄)回复于 2006-12-09 20:51:43 得分 1

upTop

21 楼hansyswin()回复于 2006-12-10 21:01:48 得分 1

ding  
  Top

22 楼yumanqing(笨鸟)回复于 2006-12-11 14:51:32 得分 0

在UP一下,高人请指点,TKSTop

23 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2006-12-11 21:30:57 得分 1

不合理。不要学三层,那只是一个入门概念。  
   
  举个例子,如果三个人要上厕所,他们各自占一个位置方便就好了。如果只有一个人负责给三个人脱裤子,只有一个人负责给三个人擦屁股,只有一个人负责给三个人洗手,那么反而干不成事!Top

24 楼yumanqing(笨鸟)回复于 2006-12-12 11:35:27 得分 0

哈哈,sp1234(今天的我绝对不是明天的我。)   强,  
  不过,当代码和界面分离的时候,不分层显的多乱呀,Top

25 楼chenjunhui(熊猫哥哥)回复于 2006-12-13 09:16:48 得分 2

顶是硬道理Top

26 楼yumanqing(笨鸟)回复于 2006-12-14 15:04:43 得分 0

怎么这个区的人气这么差,好几天了,没有顶也没有沉,也没有人回答。Top

27 楼shilei831115(柔石)回复于 2006-12-15 08:41:33 得分 1

那就顶一下Top

28 楼yumanqing(笨鸟)回复于 2006-12-18 14:51:45 得分 0

upTop

29 楼midymidy()回复于 2006-12-19 13:22:08 得分 1

支持Top

30 楼midymidy()回复于 2006-12-19 13:22:14 得分 1

upTop

31 楼lxsfg(飞飞)回复于 2006-12-19 16:54:28 得分 5

你只要把BLL中需要提供给客户端调用的方法在Webservice中包装一下就OK了,至于实体你不用担心,因为实体只有属性所以只要你在Webservice返回或参数中调用了某个实体那么Webservice会自动序列化该实体并返给客户端,不过需要提醒的是如果实体类里包含方法的话是不能直接调用的。Top

32 楼chenjunhui(熊猫哥哥)回复于 2006-12-21 18:32:58 得分 5

俺就是来顶滴Top

相关问题

关键词

得分解答快速导航

  • 帖主:yumanqing
  • kyle315
  • xiaoqhuang
  • califord
  • charles_y
  • jijl2001
  • charles_y
  • michael_zy
  • yu_sunny
  • charles_y
  • ruide205
  • Radar2006
  • hansyswin
  • sp1234
  • chenjunhui
  • shilei831115
  • midymidy
  • midymidy
  • lxsfg
  • chenjunhui

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo