使用SimpleObjectBroker进行应用服务器切换的问题 (200分)

  • 主题发起人 主题发起人 blue_morning
  • 开始时间 开始时间
B

blue_morning

Unregistered / Unconfirmed
GUEST, unregistred user!
如果使用李维在书上的容错方法进行处理:
客户端连上应用服务器A后取得数据,手动关闭A,然后客户端再取数据此时将出现"RPC服务器不可用"
的异常。动态切换应用服务器的代码处理这个异常,从B服务器中进行取数据的操作是正常的。
但如果你再点一下按钮就会发现将出现一个AV异常,并且动态切换的代码就不会再有用。
也就是说切换的代码只会生效一次,请问这是什么原因?
 
倒,李维的书我昨晚才看到这一段,还没来得及试验
 
我们也在用SimpleObjectBroker,但AV操作我倒是没见过。
有一点要注意的是,如果服务器A“不可用”并切换了,如果要再用,
则需要把它在SimpleObjectBroker列表中的状态update一下,
如SimpleObjectBroker1.Server[0].Enabled := True
 
to szf:我的代码如下,另外我使用的是的delphi6+win2k server sp2。不知你用的是什么?
如果你的没有问题,是否可以看看代码。
try
scApp.AppServer.Add
except
on Exceptiondo
begin
scApp.Connected := False;
SimpleObjectBroker.SetConnectStatus(scApp.Address, False);
try
scApp.Address := SimpleObjectBroker.GetComputerForProgID(scApp.ServerName);
except
raise Exception.Create('所有的应用服务器都已经不能连接!请保存当前的数据然后退出程序。');
end;
scApp.Connected := True;
scApp.AppServer.Add
end;
end;
 
根本就无须去写这些代码。只要把XXXConnection的ObjectBroker属性设为某个SimpleObjectBroker,
而那个SimpleObjectBroker的Servers列表属性里有一系列的服务器地址信息,连接时,用XXXConnection
的Open方法或设置它的Connected属性为True,组件就会自动尝试Servers列表中的所有服务器,
如果某个服务器不可用,则它的Enabled将被置为False;如果列表中所有的服务器的Enabled都是False,
则抛出"No Server Avalible"的异常。
要写的代码就是:
1、加入Servers列表项,以指写有哪些服务器可用
2、要重新连接,写代码把服务器列表中所有Enable属性置为True。
 
to szf:
你好、可能我的问题表达不清楚。我是要在程序运行时能切换应用服务器,不是在一开始
启动的时候进行查找可用的应用服务器。不过我按照这个思路改了一下程序(如下)。仍不能
动态的切换应用服务器。
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
begin
try
SocketConnection1.AppServer.GetSvrTime(s);
Edit1.Text := s;
except
SimpleObjectBroker1.SetConnectStatus(SocketConnection1.Address, False);
SocketConnection1.Close;
SocketConnection1.Open;
Button1Click(Sender);
end;
end;
 
多谢szf。上面的代码在IDE中会出这个AV,在EXE中可以正确的进行切换。
 
我看你的代码还是在切换应用服务器,只是写法上显得自主控制了,但功能好象是一样的。
解决问题就好。
 
后退
顶部