delphi , webservice 与三层

qufo 2009-12-07 07:57:49
加精
三层程序一直在讨论,但无论我看哪个三层,都觉得不对劲,唯一对劲的就是 WebService实现的三层。

三层程序中,我们有一个数据管理层,这一层大家都交给DBMS了,如Sqlserver,Oracle.

一层是业务逻辑,这一层我们要考虑,要编码的。

还有一层是表现层。

三层应是相互独立的。

也就是说,逻辑层不知道下面的表现层是用delphi的win32表现还是Web形式的表现,反正只要符合一定的规则,就可以交流。

逻辑层负责逻辑完了,与数据库交流,不管数据是什么系统,他都要能交流得上(比如用标准sql与数据库系统连接)

这样一来,逻辑层只好用WebService了。


各位,我理解的三层与大众的理解不一定是一致的,这只是我的想法,欢迎拍砖。

Ps,拍完砖顺便告诉我一下一直困扰我的 WebService 执行验证,大家是怎么解决的。。
...全文
1971 86 打赏 收藏 转发到动态 举报
写回复
用AI写文章
86 条回复
切换为时间正序
请发表友善的回复…
发表回复
qufo 2010-04-22
  • 打赏
  • 举报
回复
不好意思,搞了个跨年贴.
山东蓝鸟贵薪 2010-01-15
  • 打赏
  • 举报
回复
看的头都大了,不过先谢谢了>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


luoyanqing119 2010-01-10
  • 打赏
  • 举报
回复
中间层也用过JAVA+TOMCAT+Axis2,但是JAVA写的中间层有点变态,占用次源太高。
luoyanqing119 2010-01-10
  • 打赏
  • 举报
回复
如果中间层用webservice,客户端转输比较大数据时,可以压缩后,做BASE64运算,在封包,这样就不会存在安全问题了。-------如果服务器端的SOAP通过一定的运算转换,那么一般人也得不到实际的结口。(安不安全不是架构的问题,应该是人的问题)
haitao 2009-12-23
  • 打赏
  • 举报
回复
lz、楼上也不用这么激动吧

sessionid机制,是有这个被“暂时”盗用的可能,如果后台怕它一直刷新以便失效,可以把失效机制改为:登录n个小时,不管是不是还有请求,一律失效

我认为这个机制好,是因为:如果帐号、密码被截取,损失更大

另外,防止截取方面,还有一次性过程密钥、另外渠道获取附加校验码之类的做法(这个做法对于sessionid还是帐号密码都是适用的),就看是不是值得
qufo 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 56 楼 sz_haitao 的回复:]
2、状态无关的,也不用 为了通过验证,到哪里都得把口令贴在脑门上

安全性的实现:

由于HTTP协议的上下文无关特性,任何B/W或C/W模式的应用,都离不开如何“以上下文无关的协议实现上下文有关的逻辑”的问题。如:正常的应用流程是“先用户登录,合法用户才可以进行内容访问操作”,而HTTP协议的上下文无关,使得用户登录与内容访问操作不存在必然的关系,即非法用户只要知道了内容访问操作的URL,也可以绕开用户登录而直接进入内容访问操作,这显然是一个很严重的安全漏洞!

笨拙的解决办法是:要求内容访问操作也附加用户合法性验证的信息,但是每次操作都附加用户合法性验证的信息,一则数据冗余,二则增加了不安全因素。

幸亏B/W模式的应用有了一个巧妙的通用解决措施:通过一次有效的SessionID。服务器维护一个“合法登录用户信息—随机码”的对照表,对于经过用户登录被验证为合法的用户,服务器生成一个随机码(可以是纯数字,也可以是字符串,只要足够长度以致非法用户难以伪造冒认),并将此随机码与该用户信息一起存入“合法登录用户信息—随机码”的对照表,同时将此随机码发给前端(浏览器),以后前端(浏览器)的内容访问操作必须附加这个随机码(而不是原本的用户合法性验证的信息)以供服务器验证,没有随机码或随机码不存在于“合法登录用户信息—随机码”对照表的请求被视为无效请求。“合法登录用户信息—随机码”对照表的内容,在对应用户显式退出或超过指定时间没有操作请求后,自动被服务器删除。

这样,即使某个有效的随机码被非法用户截获,那么这个非法用户也只能盗用一段时间,下一次就仍然会拒之门外。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sz_haitao/archive/2009/09/10/4539228.aspx
[/Quote]

扯鸡8蛋。 我一直占着 这个 SessionID,一直发心跳包,不就可以不拉屎啦,这个盗用“一段时间”,从历史的长河中看,还真是一段。
fsse2000 2009-12-22
  • 打赏
  • 举报
回复
使用 Delphi + WebService + DBMS
這中模式比較好, 可以跨平臺服務, 中間層用java些,
利用XML 壓縮傳輸,速度嘛,還比較可以的,我從上海傳遞1萬條數據 到深圳,
1、20秒吧。具體沒有測試研究。

主要是 中間層的java強大 ,使用 java 比較靈活, 而客戶端使用Delphi 那是不爭的事實。

兩者優點相互結合,我趨向于這中模式,至于使用socket 或者 ini什么的,我沒有試驗過。
XML是通用網絡傳輸標準語言,還是跟標準走好。
lyguo 2009-12-22
  • 打赏
  • 举报
回复
socket 技术比较成熟
另外也可以用Soap + WebService + COM+ 数据库
tristan1212 2009-12-19
  • 打赏
  • 举报
回复
嗯,写的不错,学到不少东西,我现在需要做个Web应用程序,可是不会
lyhoo163 2009-12-18
  • 打赏
  • 举报
回复
up
nanchangfantasy 2009-12-18
  • 打赏
  • 举报
回复
顶,学了不少东西
aipeli 2009-12-18
  • 打赏
  • 举报
回复
谢谢,下次在做项目选择架构方式时,又多了种可选的方案。你哪里有没有相关的DEMO呢?可不可以发份给我学习下呢? 邮箱:aipeli at 163 dot com 。
haitao 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 71 楼 aipeli 的回复:]
引用 70 楼 sz_haitao 的回复:
引用 68 楼 aipeli 的回复:
看了sz_haitao的这篇贴子受益非浅,学习到了另一种架构方式,但我比较关心的是数据转输速度,同在互联网的环境下可能速度相当,但如果在局域网内的INI@HTTP与DCOM的方式哪个速度快些,如果传输数据量在10W级,客户端等待数据转输会不会引起超时,有没有好的解决办法,如:分页传输数据等。

谢谢!


我的实际应用遇到过最大:3万条记录,7M字节的ini数据,压缩后为2M,异地(同省)接收,客户端等待大约5-15秒,服务器为5M的adsl,客户端是4M的adsl


哪局域网内呢?同样的是3万记录,大概耗时多少呢?
[/Quote]

局域网只会更快,因为一般都是100M的连接。比上面的实例快了10倍。当然仅仅是传输快10倍,数据库的io、组包、压缩的速度是一样的
大肚肥肥 2009-12-18
  • 打赏
  • 举报
回复
这个帖子好。。
aipeli 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 70 楼 sz_haitao 的回复:]
引用 68 楼 aipeli 的回复:
看了sz_haitao的这篇贴子受益非浅,学习到了另一种架构方式,但我比较关心的是数据转输速度,同在互联网的环境下可能速度相当,但如果在局域网内的INI@HTTP与DCOM的方式哪个速度快些,如果传输数据量在10W级,客户端等待数据转输会不会引起超时,有没有好的解决办法,如:分页传输数据等。

谢谢!


我的实际应用遇到过最大:3万条记录,7M字节的ini数据,压缩后为2M,异地(同省)接收,客户端等待大约5-15秒,服务器为5M的adsl,客户端是4M的adsl
[/Quote]

哪局域网内呢?同样的是3万记录,大概耗时多少呢?
haitao 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 68 楼 aipeli 的回复:]
看了sz_haitao的这篇贴子受益非浅,学习到了另一种架构方式,但我比较关心的是数据转输速度,同在互联网的环境下可能速度相当,但如果在局域网内的INI@HTTP与DCOM的方式哪个速度快些,如果传输数据量在10W级,客户端等待数据转输会不会引起超时,有没有好的解决办法,如:分页传输数据等。

谢谢!
[/Quote]

我的实际应用遇到过最大:3万条记录,7M字节的ini数据,压缩后为2M,异地(同省)接收,客户端等待大约5-15秒,服务器为5M的adsl,客户端是4M的adsl
亮剑_ 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 55 楼 hqhqhw 的回复:]
愿意交流下,delphi中三层的实现有四种方式,其中的一种走HTTP,也就是web了。前人具体做法又有:
1、自己写一个类似tomcat.exe/php.exe的文件来,自己玩一套。
2、webservice,这个是大家现在一直挂嘴边的。因为它是状态无关的,所以为了通过验证,到哪里都得把口令贴在脑门上。
3、再不济的,就用ActiveX了。
[/Quote]
ActiveX也算?
MIDAS/DataSnap算不?虽然性能和稳定性上总是被指责

对于分层设计,我想有架构设计和部署实现两个层面,两个层面有关联,但关注点不完全一致。
总得说没有最好的设计或实现,只有最适合的。

WebService作为一种实现方式最大的优势我想就是标准化。
hqhqhw 2009-12-18
  • 打赏
  • 举报
回复
re tjianliang

ActiveX也算?
MIDAS/DataSnap算不?虽然性能和稳定性上总是被指责

对于分层设计,我想有架构设计和部署实现两个层面,两个层面有关联,但关注点不完全一致。
总得说没有最好的设计或实现,只有最适合的。

WebService作为一种实现方式最大的优势我想就是标准化
-------------------------------------------------
不好意思,我01年开始delphi编程两年半就转了dotnet&java了,所以现在只记得大概做法。
ActiveX属于Internet编程,web上最直接的感受是flash player。我们当然可以用它来实现很多功能,因为能嵌入网页,所以偶尔也归于web。
最早称为MIDAS(Multi-tier Distributed Application Services Suite),后来称为DataSnap,那只是一个架构的大概念,具体在delphi开发环境里也就是控件组的名字而已。使用DataSnap组里面的WebConnection控件,其过程就如上我说的第一种,只是我用的话糙点。
不是信息本身累,而是交流方式累。看来我还要坚持“只看不说”的上网风格了,破例是想要点分还怀怀旧。我声明我什么都没说,也不要再有人就我的话回复,因为你一回我又得打字。
aipeli 2009-12-17
  • 打赏
  • 举报
回复
看了sz_haitao的这篇贴子受益非浅,学习到了另一种架构方式,但我比较关心的是数据转输速度,同在互联网的环境下可能速度相当,但如果在局域网内的INI@HTTP与DCOM的方式哪个速度快些,如果传输数据量在10W级,客户端等待数据转输会不会引起超时,有没有好的解决办法,如:分页传输数据等。

谢谢!
hqhqhw 2009-12-14
  • 打赏
  • 举报
回复
谢谢sz_haitao用非常专业词语补充。
当时我用了口令,而没有用帐号密码之类的的词汇,想它包括SessionID或者其他各种形式的key,或者是一句“芝麻开门”,我以为做过的人都能想到呢。


加载更多回复(66)
技术文档 5 第一部分、ofbiz表现 5 一、理解MVC模式 5 1、MVC理论描述 5 2、系统设计 6 3、OFBiz中MVC模式体现 7 二、JPublish合成表示层 8 1、经典的合成器--JPublish 8 2、template + script 9 3、JPublish和MVC 9 三、区块(Region)指南 9 1、简介 9 2、定义区块 10 3、创建区块模板 11 四、JSP标签库指南 12 1、简介 12 2、URL标记 13 3、条件性标记 13 4、循环控制标记 14 5、数据表示标记 15 6、国际化标记 17 7、服务标记 18 8、其他标记 19 第二部分、ofbiz服务 19 一、服务引擎指南 19 1、简介 19 2、Service Dispatcher 20 3、Dispatch Context 20 4、服务引擎 20 5、服务定义 20 6、用法 21 二、高级特性 22 1、接口 23 2、ECAs 23 3、服务组 25 4、路由服务(Route services) 25 5、HTTP 服务 26 6、JMS 服务 26 三、服务引擎配置指南 26 1、简介 26 2、验证 26 3、线程池 26 4、引擎定义 27 5、资源加载器 27 6、全局服务 27 7、服务组 28 8、ECAs 28 9、JMS 28 三、编程指南 29 四、编程参考 29 第三部分、ofbiz实体 29 一、实体引擎配置指南 29 1、介绍 29 2、资源加载器 30 3、JTA元素 30 4、Delegator元素 31 5、实体模型XML文件 31 6、实体组XML文件 31 7、字段类型XML文件 31 8、数据源元素 32 二、实体应用指南 34 实体模型 35 View Entity Modeling 38 The Entity Engine API 40 JTA Support 42 Core Web Tools 43 1、介绍 44 二、编程指南 44 1、delegator对象的获取 44 2、 数据访问 44 三、编程参考 46 第四部分、工作流 46 一、工作流引擎指南 46 1、简介 46 2、XPDL扩展 46 3、客户端API 47 4、工作流任务 47 5、用法 48 6、文档注释 48 二、编程指南 48 三、编程参考 49 1、在定单管理中,若一个定单结束则定单进入流程控制, 49 2、流程的服务 53 3、 扩充属性 54 4、runtimeData怎样生成和调用 55 5、workflow是怎样执行的 55 6、程中控制操作 55 7、流程服务的编写方法 56 8、动态执行者 57 四、公文流转流程的做法 57 第五部分、特殊服务 57 一、JMS消息服务引擎 58 1、JMS消息服务引擎 58 2、消息服务引擎配置和使用 58 二、时间服务(job) 59 1、JobScheduler 60 三、利用OFBiz实现SingleSignOn单点登录 60 1、SSO简介 60 2、利用OFBiz建立简单有效的SSO机制 60 4、备注 62 第六部分、安全控制 62 一、认证 62 1、实体 63 2、应用 63 二、权限 63 1、权限的定义方法 63 2、权限的访问 64 三、CA认证 64 第七部分、会员管理 64 一、会员 64 三、关系 65 二、角色 65 第八部分、应用说明 65 一、 环境 65 二、 环境加载 66 1、JSP客户端 66 2、Servlet及Event环境加载 67 3、环境的引用。 67 第九部分、设计规范 67 一、设计规范 67 1、使用html设计用户界面, 67 2、应用分析与总体设计(用例,对象分析) 67 3、整体设计完成后进行详细设计 67 4、应用集成 68 二、开发规范 68 1、命名原则 68 2、界面显示 68 3、接口 68 第十部分、Ofbiz基础应用说明 69 一、介绍 69 二、主要的应用组件 69 1、CommonData 70 2、Content 70 3、Security 70 4、Party 70 5、Product 71 6、Order 71 7、Facility 72 8、Shipment 72 9、Marketing 72 10、WorkEffort 73 11、HumanResources 73 12、ArchitectureandSystemOrganization 73 13、EntitiesandServices 73 14、Workflow and Rules 74 15、Web Framework and XML Mini-Languages 74 16、webtools 75 第十一部分、OFBiz项目-特征列表 76 一、概述 76 二、应用 77 设置运行环境 83 OFBiz安装与设置 88 第十二部分:Soap的用法 91 一、soap应用的两种情况 91 1、ofbiz 将其他的webservice 封装成服务,这时ofbiz的应用系统可以直接调用该服务,以访问其他的Webservice: 92 2、其他的soap客户端可以通过soap访问ofbiz,这时ofbiz相当于Webservice服务器 92 二、Soap应用例子 92 1、ofbiz调用delphi7中的soap服务 93 2、delphi7调用ofbiz中的服务 93 3、ofbiz中Soap类型映射 94 第十三部分:JMX的用法 106

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧