容错处理:怎样在当前应用服务器无法联结时,自动联结到另一台应用服务器(200分)

你在三层中使用scktsvr.exe的话,要判断应用服务器能否使用的话你可以模仿ping的方式
来处理,因为scktsvr.exe使用的是TCP/IP协议,至于错误处理的代码你觉得多处写麻烦的话。
何不考滤将数据库访问的代码写成一个类呢?
 
to tomljh
ping得通并不表示应用服务器可以使用啊
可能由于应用服务器程序的原因使服务器无法正常运做
这样又怎么处理呢
将数据库访问的代码写成一个类只能解决数据库访问的异常处理
对应用服务器方法的调用又怎么处理呢
 
你可检查应用服务器上scktsvr.exe的帧听端口就行了,默认端口号好象是113,你可以查一下
(当然你可以修改它)应用服务器开启的它应该可以建立套接字的连接,在这里你可以设置超时。
注:使用TServerSocket和TClientSocket这两个控件来实现。
对应用服务器方法的调用你可以再封装到数据库的访问类中啊,当然传统的方法也可以实现,这样
做的好处是你的代码后期易于维护。
 
to tomljh
应用服务器开启的它应该可以建立套接字的连接,在这里你可以设置超时。
注:使用TServerSocket和TClientSocket这两个控件来实现。

能否说得详细一点,对此我不是很了解
第二点对我的帮助很大,非常感谢!
 
其实很简单:
不过我的是C++builder 的代码:),Delphi的代码好久不写,语法记不住了。
bool bFlag=false;
try
{
ClientSocket1->Address=ip地址;/ClientSocket1->Host=主机名;//指明是那一台机器上
ClientSocket1->Port=端口号;//指明是哪一台机器上的服务,例如:113
ClientSocket1->Open();
bFlag=true;//服务正常
ClientSocket1->Close();
}
catch(...)//服务失败的出理
{
bFlag=false;
Application->MessageBox("连接失败","提示",MB_OK);
}
但是这段代码有副作用,就是当服务器比较忙的时候反映过快,没有足够的延迟时间,
它反倒会提示连接失败。

 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=946305
参加这个讨论啊:)
 
to tomljh
ClientSocket1->Address=ip地址;/ClientSocket1->Host=主机名;//指明是那一台机器上
ClientSocket1->Port=端口号;//指明是哪一台机器上的服务

这里的地址和端口应该都是在ServerSocket里设定的吧
那这个ServerSocket是否是放在scktsvr.exe里呢,而端口就是scktsvr.exe占用的端口
这样会不会引起冲突呢,而且这样无法判断应用服务器程序是否出现异常啊
 
ServerSocket你不用设了,它已经是scktsvr.exe提供的服务了。
就是说你只用使用ClientSocket端的代码就行了。
 
谢谢大家的参与
 
顶部