请高人指点,三层自动升级?(200分)

  • 主题发起人 主题发起人 delphi8511
  • 开始时间 开始时间
D

delphi8511

Unregistered / Unconfirmed
GUEST, unregistred user!
需更新的部分做成了dll,放在服务端,客户端更新这些dll就可以了
(至于具体的更新过程,在这里不作讨论)。我现在的问题是,
在中间层如何将服务端的dll打包发送至客户端?说明一下,不想使用
ftp方式。
 
客户端登陆系统时检测客户端版本号,若版本号比服务器端版本号旧,则询问客户端是否更新。
 
兩種方法,一、放到數據庫裡,二、發送文件,第一種方法容易實現第二種方法,我沒有實現自動升級
 
谢谢两位的参与!
to Johnny_du:关于更新的方法,呵呵,在此不讨论;
to 文生:1、放到数据库中,我的dll有十几个,有的已有2M多,我认为这种方法不妥;
2、如何来发送文件呢?
 
用内存流读取文件,转化成字符串流,发送,客户端用字符串流接受,转化成内存流,保存到临时文件夹,保存完毕后替换旧文件
 
to weichao9999:
赞同您的看法!不过在中间层怎么来读取文件呢?这就是我碰到的最大的难点。我想通过存储过程来读取,并进行转化。望不吝赐教。
 
你可以把升级文件保存在数据库中,也可以保存在指定的地方,中间层接到客户端的升级命令的时候从数据库或指定的地方读取文件。
顺便问一下你的中间层用什么做的?
 
delphi端好像除了ftp就没有更好的方式了,还是在后台想办法吧,asp,jsp,.net都有文件上传下载的方法的
 
客户端模拟一个http的请求(包含文件名),中间层解析后,将服务器上对应的文件传到发出请求的客户端。至于服务器怎么在网络上传文件,随便找个jsp或者asp的程序员就能搞定
 
除了ftp还有有很多办法,ftp我也用过,我的升级文件传输使用web service + com+ 做的
 
其实FTP方式的自动升级,我已经做过了,想换个方式。
to weichao9999:
升级文件我不是保存在数据库中的,而是放在某个指定的地方。

就是说,现在我在存储过程中怎么来读取存放在指定地方的升级文件,怎么获取这些文件的路径呢?听说需写协议之类的东西,以前没接触到这方面,所以恳求大虾们指点,谢谢!
 
客户端编译一个exe 这个exe先检查更新并自动更新dll 更新完成后再调用shellexute运行您现在的exe就可以了
而这个用于更新的外壳可以直接连接到您的应用服务器,应用服务器将文件转换为流、流转换为olevariant传到外壳程序 外壳程序再将olevariant转换为流 流Savetofile就可以了
 
学习中...
 
to ball_cao:
更新的流程大致和你说的相同。我打算在中间层直接得到每个升级文件的文件名、大小和时间,返回客户端后就可以判断哪些文件需更新。可怎么去读取文件啊?
 
indy也可以阿,http协议
 
读取文件这么简单的事情怎么就把你难住了
1,你可以把升级文件保存在数据库中,等待调用。就像读取图片一样;
2,不用数据库,如果是放在某个地方,一般应该是服务器的某个地方,你可以直接用流取读取然后发送
 
to weichao9999:
呵呵,再次感谢!!
1、通过三层传送图片,我只能处理大小<=30几K的,超过了我没法处理的(能力有限);
2、采用读取服务器某个地方的文件的方法,因为我是在ORACLE的“Packages”里面写存储过程的,所以在存储过程里面怎么读取指定路径,如何使用流,我就不会了,您能告诉我么?
 
存储过程的做法没用过,不想乱说
如果用流,那就比较简单了
var
msm:TMemoryStream;
ssm:TStringStream;

begin
try
msm:=TMemoryStream.create;
msm.LoadFromFile(fileName);
//保存到内存流之后你可以把它存入到数据库中,TBold(fieldbyname('ziduan')).loadfrom(msm);
ssm:=TStringStream.create('');
msm.SaveToStream(ssm); //保存到ssm
//s:=ssm.DataString; -----此时文件被转化为了字符串形式你可以任意保存到数据库,也可以发送
//ssm.write() -----用这个方法可以可以把她写到缓冲里
finally
msm.free;
ssm.free;
end;
end;
你的数据库字段要定义为长字段,如image类型
保存和读取的过程是相反的
代码时随意写的,没有调试
 
谢谢weichao9999!
可你写的“流”在存储过程里面是没法这样来使用的,也许是我表述的 不清楚,我指的是所有的处理过程都是放在存储过程里面来写的,而客户端只是传递一些参数。呵呵,如果我采用的是两层,也许就不会这么麻烦了。再次感谢!
 
后退
顶部