关于 WebService 的一些疑问 同时也是对无状态三层的一些疑问.(100分)

  • 主题发起人 主题发起人 QSmile
  • 开始时间 开始时间
Q

QSmile

Unregistered / Unconfirmed
GUEST, unregistred user!
关于 WebService 的一些疑问
以前做过 SocketConnection 的三层. 现在对 WebService 有些兴趣. 但同时也有更多的疑问.
因为与SocketConnection 方式比起来. 有很多不一样的地方.
1. 状态问题
我的 SocketConnection 是用长连接的方式. 也就是说: 客户端在进入系统时 SoctetConnection 就连接上了AppServer, 在操作期间不会断开. 这时 AppServer 对每个连接就会有一个 RemoteDataModule 与之对应. 我就用 RemoteDataMadule 来保存了一些状态. 比如: 用户是否已经登录, 用户身份, 用户权限等等, 这样的好处就是方便对用户操作权限进行管理. AppServer 中没有用到 DataSetProvider , 我不知道我这种方法是有状态三层,还是无状态的.
(问题一: 我现在用的方法,是"有状态"还是"无状态"
连接, 那"无状态"
连接是不是每次连了,操作了,马上就断开, 下次要用时, 再连? 如果这样效率不是比较低了? 在连接上比较耗时. 还有, 如何判断用户是否已登录? )


而现在看 WebService, 它是基于 HTTP. 这回是彻底的无状态的了. 因为 HTTP 每次连接都是新的. 需要数据时连接, 但连接了之后,马上就断开. 而我在 WebService 端的调试发现. 每次客户端调用服务器时, WebService 对象会创建. 但调用完成后, 服务器端的 WebSerivice 马上就释放了. 这样一来我就有疑问了. 那服务器如何检查客户端的身份呢? 如何判断这个客户权限呢? 不可能每次调用都加一个 UserID 与 Passwd 参数吧. 有没有别的方法? (问题二)
当然, 很多人提倡的无状态三层,我始终没太理解其精要,就是客户端用户身份如何得到检查?

2. 效率问题
用 WebService 时, WebSerivice对象 如何做成Pooling ? 因为如果频繁的创建释放,太浪费资源了. (问题三)
 
你的问题提的不错,我们的系统是用webservice这种架构,可以就我知道的告诉你一些,每次登陆的时候后台要返回一个可以标识的ID给客户端,客户端会把这个ID保存下来,下次再提交请求的时候把这个ID传到后台用以识别,后台的连接对象一般用连接池来管理。
 
另外再给你补充一点,soap中好像是可以设置连接最大时间的,例如为30秒,客户端连接成功后在30秒内如果没有做任何操作应该向客户端做一次空的请求,这样server端才能让你的连接ID继续存在,否则应该释放用以客户端连接的ID
 
李维有本书:《D6 SOAP_WEB SERVICE程序设计》讲的比较清楚了。
最近刚看完,也准备用WebService写点东西[:)]
 
李维有本书:《D6 SOAP_WEB SERVICE程序设计》讲的比较清楚了。
-----------------
清楚个屁。一到关键地方就没了。他的书都是这样。简单的地方讲很啰嗦,关键地方没了。
 
后台的连接对象一般用连接池来管理。
----------------
这里我比较关心的地方。还有就是如何布属自己的 WebService ?
如果方便安装呢? 最好能像 madias 三层一次,做成 setup.exe
 
靠!楼主没有仔细看就不要乱放屁[:(!]
 
我说的是事实
 
支持 踏浪99 的做法,登录成功后服务器返回一个SESSION ID给客户端,每次请求都带上这个SESSION ID,服务器就可以判断是之前的哪个客户端了。当然,除此之外还应该有一些其他的技巧来防止重放攻击
 
各位大哥说的具体点的吧。不要老高来高去说些纯理论的东东
 
最近我也在做WebService的东西,做法就是这样的,但遇到个问题,如果客户端会非法退出,服务端怎么释放这些SESSION ID呢?如果要说连接池的请具体点,怎么处理?
 
一般服务器端一个连接建立,应该每隔一段时间去检测这个连接是否有活动,如果在规定的时间内都没有活动,例如非法退出,这个时候这个连接就要被释放掉,当然客户端也有可能长时间不做任何操作,这个时候在客户端也应该也设置个时间间隔,在规定的时间内没有做任何操作的话应该向server端请求一次,否则的话server端会把这个连接释放掉,这下我说的够清楚了,还不懂只能贴代码了。
 
还是贴点代码吧。这样一看就明白了。
 
踏浪都说的这么清楚了还不明白啊?
 
方法确实不错,你们都用什么做的WebService啊,第三方的还是Delphi自带的?
 
给每个客户端分配一个固定的ID,客户端在调用WEBService服务时,WEBService把操作记录都保存下载 , 你可以随时查看操作记录来判断客户端的状态,至于防止攻击可以用WEBService和客户端相互配合传送加密后的数据
 
后退
顶部