两层应用如何迅速转换为三层应用?300分 急急!! ( 积分: 200 )

  • 主题发起人 主题发起人 tgzhong
  • 开始时间 开始时间
T

tgzhong

Unregistered / Unconfirmed
GUEST, unregistred user!
1、现有两层开发的应用,多用过程、函数和带参数的长长的SQL语句,请问如何迅速转换为三层;
2、两层和三层数据库都是ORACLE,可以用SOCKET连接。
3、只求最快转换好,不求效率和逻辑分配合理。
 
1、现有两层开发的应用,多用过程、函数和带参数的长长的SQL语句,请问如何迅速转换为三层;
2、两层和三层数据库都是ORACLE,可以用SOCKET连接。
3、只求最快转换好,不求效率和逻辑分配合理。
 
好象要重写吧
 
那就只有采用WebService技术了,
应该很快的
将 ADOQuery变成ClientDataSet
然后做一个WebService服务器
我这么做过,应该是最好的办法了
 
前台一定要重写了.
 
前台(客户端)要将数据集组件换成ClientDataSet控件或其他.
至于服务器端, 要做一个服务器, 可以使用ADOconnection连接方式.连接ORACLE数据库
 
把你的邮箱给我,我给你发一份我自己写的WebService教程,浅显易懂!
 
to : wanghaiou
也给我一份您写的WebService教程, 我拜读一下.谢谢.
jangill@sina.com
 
我的邮箱tuo2003@163.com.
谢谢
 
to : wanghaiou
麻烦也给我一份您写的WebService教程,谢谢.
zb_railway@qingdaonews.com
 
to : wanghaiou
麻烦也给我一份您写的WebService教程,谢谢.
jiangxiang863@163.com
 
我晕,先给点分呀!
要不然我没有动力呀!~
 
wanghaiou兄:
现要做WebService,用kylix3开发,web服务为Apache。
我先是在Windows上开发,工具Delphi7,其间基于Apache1.*、Apache2.*都试过,Apache版本分别为1.2.38和2.0.53。
新建一WebService工程,Apache2.* Shared Module(DLL),命名为helloWorldP,修改apache_module name 'helloWorld_module';
Delphi提示“Create Interface for SOAP module”选择“yes”,Service name为helloWorld。在创建出的helloWorldImpl.pas和helloWorldIntf.pas中加入function GetMyStrs: String;
stdcall;简单返回一个字符串
编译后copyhelloWorldP.dll文件到Apache的modules目录下,修改conf目录下的http.conf文件,加入如下文字:
LoadModule helloWorld_module "D:/dev/Apache Group/Apache2/modules/helloWorldP.dll"
<Location /helloWorld2>
SetHandler helloWorldP-handler
</Location>
重起Apache2服务(Apache1类似)
打开IE,地址栏输入“http://127.0.0.1/helloWorld2”,可以看到WSDL等信息,其接口GetMyStrs可以被其他客户端调用。


现在要转移到Linux上。从网上下载httpd-2.0.53.tar.gz,解压后,进入该目录编译安装
./configure -enable-so
make
make install
将HTTPD2、ApacheTwoHTTP和ApacheTwoApp源码copy到kylix的source/internet下。同样建立WebService工程,将引用的ApacheApp改为ApacheTwoApp,但其他HTTPD2、ApacheTwoHTTP两个文件我没有用到。compile(HTTPD2、ApacheTwoHTTP和ApacheTwoApp,这三个pas文件没有对应的dpu文件,我是先建了一个pakage,把这三个pas加进去,编译,生成dpu,但会有警告)工程编译通过,Build会有警告:
[Warning] xdom.pas(16372): Error converting locale string 'im fentlichendo
kument ' to Unicode. String truncated. Is your LANG environment variable set correctly?
不知该警告是否影响到Apache无法装载该模块?
copy生成的libhelloWorldP.so到apache2的modules目录下,修改conf目录下的http.conf文件,加入如下文字:
LoadModule helloWorld_module modules/libhelloWorldP.so
<Location /helloWorld2>
SetHandler helloWorldP-handler
</Location>
重起apache服务,报错:“../bin/apachectl: line 100: 5162 Segmentation fault $HTTPD -k $ARGV”
看到有帖子讲要修改HTTPD2.pas文件,但我没有引用该文件,还是试了一下:
//MODULE_MAGIC_NUMBER_MAJOR = 20020612;这句注释掉,改为
MODULE_MAGIC_NUMBER_MAJOR = 20020903;
{ Apache 2.0.51..54 }
//MODULE_MAGIC_NUMBER_MINOR = 1;这句注释掉,改为
MODULE_MAGIC_NUMBER_MINOR = 9;
conn_rec = {$IFDEF LINUX}packed{$ENDIF} record这句之前加了
ap_conn_keepalive_e = (AP_CONN_UNKNOWN, AP_CONN_CLOSE, AP_CONN_KEEPALIVE);
找到
(** Are we still talking? *)
flags: Cardinal;
{ The following are in the flags bitset:
unsigned aborted:1;
(** Are we going to keep the connection alive for another request?
* -1 fatal error, 0 undecided, 1 yes *)
signed int keepalive:2;
(** have wedo
nedo
uble-reverse DNS? -1 yes/failure, 0 not yet,
* 1 yes/success *)
signed intdo
uble_reverse:2;
}
这一段,改为:
(** Are we still talking? *)
flags1: Cardinal;
{ The following are in the flags bitset:
unsigned aborted:1;
}
(** Are we going to keep the connection alive for another request?
* @see ap_conn_keepalive_e *)
keepalive: ap_conn_keepalive_e;
还是不行,请指教
另:我的linux版本为Red Hat Enterprise Linux 3.0
apache为2.0.53
kylix为Enterprise Version3.0(Build4.186)
是否和系统环境、开发工具有关?
 
很遗憾的告诉你,我没有试验过在Linux下开发过WebSerivice服务
不过有一点是可以肯定,WebSerivice服务无论在哪种操作系统下都可以被调用
他的接口是通用的
 
先给100分。
有没有更好的方法
 
可以试试ASTA控件
 
如果原来你的应用不是表和查询堆起来的话,两层改三层应该不是太费劲。
客户端Table、Query均改为clientdataset,中间服务器把这些Table、Query重建。
原来客户端的SQL语句改为clientdataset.commandtext,参数也还可以加上。
 
多人接受答案了。
 
后退
顶部