WebService中的类在客户端调用问题,(分不够在加)
我有个项目是这样做的,打算用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




