现在的位置: 首页 > 综合 > 正文

SimpleObjectBroker

2012年11月06日 ⁄ 综合 ⁄ 共 2101字 ⁄ 字号 评论关闭
 

首先要设SimpleObjectBroker的loadBalanced的属性为True,并保证所有的应用服器已向
SimpleObjectBroker注册,当客户端应用程序查觉原来的应用服器出现故障后立刻调用
TSimpleObjectBroker的SetConnectedStatus(False)通知TSimpleObjectBroker应用服务器
发生故障,然后调用GetComputerForProgID要求TSimpleObjectBroker查找另外一台提供相同
服务的应用程序服务器给客户端应用程序

只要把XXXConnection的ObjectBroker属性设为某个SimpleObjectBroker,
而那个SimpleObjectBroker的Servers列表属性里有一系列的服务器地址信息,连接时,用XXXConnection
的Open方法或设置它的Connected属性为True,组件就会自动尝试Servers列表中的所有服务器,
如果某个服务器不可用,则它的Enabled将被置为False;如果列表中所有的服务器的Enabled都是False,
则抛出"No Server Avalible"的异常。

要写的代码就是:
1、加入Servers列表项,以指写有哪些服务器可用
2、要重新连接,写代码把服务器列表中所有Enable属性置为True。

procedure TForm1.btnApplyUpdatesClick(Sender: TObject);
begin
try
ClientDataSet1.ApplyUpdates(0);
except
on Exception do
begin
try
DCOMConnection1.Connected := False;
SimpleObjectBroker1.SetConnectStatus
(DCOMConnection1.ComputerName, False);
finally
try
DCOMConnection1.ComputerName := SimpleObjectBroker1.GetComputerForProgID
(DCOMConnection1.ServerName); // 取得可用应用程序服务器的机器名称
DCOMConnection1.Connected := True;
ClientDataSet1.ApplyUpdates(0);
except
on EBrokerException do
ClientDataSet1.SaveToFile('Sample.Dat'); // 保存数据
end;
end;
end;
end;
end;

procedure   TdmArchiveConnect.Connect;
var
    FIniFileName:   string;
begin
    //设置ini文件
    FIniFileName   :=   ExtractFilePath(Application.ExeName)   +   'PHYMIS.ini ';

    //载入可用的应用程序服务器
    ServerBroker.Servers.Items[0].ComputerName   :=   ReadIniString(FIniFileName,

        'Server ',   'Server1 ',   ' ');
    ServerBroker.Servers.Items[1].ComputerName   :=   ReadIniString(FIniFileName,

        'Server ',   'Server2 ',   ' ');
    ServerBroker.Servers.Items[2].ComputerName   :=   ReadIniString(FIniFileName,

        'Server ',   'Server3 ',   ' ');

    //设定应用程序服务器
    scktArchive.ServerName   :=   'pArchiveServer.ArchiveAgent ';
    scktArchive.ServerGUID   :=   '{0334ABD2-9792-459C-8036-3288678678F5} ';
    //载入端口设置
    scktArchive.Port   :=   StrToInt(ReadIniString(FIniFileName,   'Server ',   'Port ',

        '211 '));

    //连接应用程序服务器
    if   scktArchive.Connected   then
        scktArchive.Connected   :=   False;
    try
        scktArchive.Connected   :=   True;
        ServerCanUse   :=   True;
    except
        ErrBox( '无法连接到应用程序服务器,请检查网络设置 ');
        ServerCanUse   :=   False;
    end;
end;

抱歉!评论已关闭.