请大家讨论一下 web service + D6开发的客户端的技术优劣(附程序源码) ( 积分: 200 )

  • 主题发起人 主题发起人 flysand
  • 开始时间 开始时间
F

flysand

Unregistered / Unconfirmed
GUEST, unregistred user!
用delphi2005开发了一个简单的web service服务器,运行在Win2K IIS上,
该服务器只负责把客户端的SQL请求提交给MSSQL2000数据库(用ADO连接数据库),并把结果返回结客户端,
客户端用delphi6开发,用TSOAPConnection连接远程web service服务器,
主要的数据处理放在MSSQL2000数据库和客户端中执行,
该系统运行了一年,目前发现要是网络不好的时候,
客户端的请求不得及时反应,客户端程序就会停止响应,多久都不会报错,
关闭客户端再启动又没事了!
程序原码:www.flysand.com/webser.rar
fcService.dpr是服务器的源程序
test.dpr是客户端的例子(这个是在d2005开发的简单测试例子,和D6开发的没什么不同)
 
用delphi2005开发了一个简单的web service服务器,运行在Win2K IIS上,
该服务器只负责把客户端的SQL请求提交给MSSQL2000数据库(用ADO连接数据库),并把结果返回结客户端,
客户端用delphi6开发,用TSOAPConnection连接远程web service服务器,
主要的数据处理放在MSSQL2000数据库和客户端中执行,
该系统运行了一年,目前发现要是网络不好的时候,
客户端的请求不得及时反应,客户端程序就会停止响应,多久都不会报错,
关闭客户端再启动又没事了!
程序原码:www.flysand.com/webser.rar
fcService.dpr是服务器的源程序
test.dpr是客户端的例子(这个是在d2005开发的简单测试例子,和D6开发的没什么不同)
 
可试试用dotnet开发一个同样功能的Web Service,再在delphi6调用。
 
WebService的很重要一点就是无论你是什么开发工具开发的都可以互相调用,非常方便,虽然它的效率不是很高,但是在部署上它有着传统程序无法比拟的优势。
如果你们公司有存在多种开发平台,又要组成团队共同开发一个系统的话,WebService是不二选择。
 
目前客户反映,当服务器(P4至强1G*2CPU,1G内存)运行了几天后,
在客户端保存一条300字节左右的数据记录就慢了,要10多秒,
重起服务器后又OK了,
我想知道,这样设计的有什么缺陷
 
客户端应该增加超时的控制
如果出现性能问题,最好定位跟踪一下,看原因是什么
 
客户端很简单的啊,如下,
有是打开数据时,网络卡,得不到及时返回的数据,程序就会卡死;
procedure TForm1.FormCreate(Sender: TObject);
begin
clientdataset1.RemoteServer:=uclient.gParam.SoapCnt;
clientdataset1.ProviderName:='SQLProvider';
clientdataset1.commandtext:='select top 10 * from table1';
clientdataset1.open;
end;
 
说实在的,web service有优点,但它的缺点也很明显:速度太慢,如果是我做的话,我就选其他的三层结构。哪种都要比web service强。
 
web service的效率的确是个问题,不过我想通过优化程序结构,在访问量不是很大的话,应该没什么问题
 
xml 的串行化和反串行化, 都是要付出开销的
 
根据可种贴子综合结果是:Web service 结合COM+开发分布式应用程序是最好的方法,
Web service效率是问题,如版主所说,通过代码优化,便能提高效率,
如你所说,你的系统运行一年以后,便出现了问题,唯一的原因是你的系统不能支持大数据量,如你代码中所示:
procedure TForm1.FormCreate(Sender: TObject);
begin
clientdataset1.RemoteServer:=uclient.gParam.SoapCnt;
clientdataset1.ProviderName:='SQLProvider';
clientdataset1.commandtext:='select top 10 * from table1';
clientdataset1.open;
end;
这里的select top 10 * from Table1就有问题.
此语句应将 * 改为你客户端所需的列, 并加上Where ,那么你的系统的效率会有所提高
 
系统并非运行一年后才出现问题,是一直存在偶尔open打不开数据,使介面卡死,
以上的代码是个例子,我的系统每次open打开的数据都是很少的,最多不过15行,每行的数据也是很少的!
我想web service 的xml串行化和反串行化所需的开销,按目前的CPU运行速度,应该没什么问题,
数据打不开,应该是在internet的通信问题,如,我们平常用IE时也时常有打不开链接,但用停止,刷新的操作后,又可以打开了!
目前在想,有什么办法能在哪个地方增加一个如IE中的停止,刷新的方法,这样系统就更加出色了!
 
布署方便,但效率较低
 
樓主兄長,麻煩看一下小弟的貼呀,我是新新新手
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=3303185
 
看能否修改SOAP Client底层实现,增加超时控制
 
不要使用 Clientdataset1.ProviderName 的方式
而應該使用每次訪問後,關閉數據庫連接,和釋放內存
將DATASET以字符串的方式返回給客戶端,再由客戶端重新組織成DATASET
 
这样不是效率很低吗,可以考虑使用数据库连接池
 
web service 服务器中的对象是无模式状态,每次访问后,系统应该自动关闭并釋放內存,
长时间运行后,服务器的占用的内存并不增大,
客户端更新数据时,每次只提交一条记录,
服务器刚启动时,提交一条记录只需2--3秒,连续运行个把月后,提交数据要10秒以上,
服务器重起后又恢复原来的速度了!
 
后退
顶部