我将使用Firebird Events的强大功能以及带有 TIBEvents 组件的 delphi 应用程序。
问题是防火墙,并不是每次都有正确的角色,当我尝试注册事件时,应用程序停止响应,我必须等待......
我能怎么做?
我还尝试在单独的线程中调用寄存器函数,但结果相同。
function RegisterEvents(data : Pointer) : Integer;
begin
with Form1 do begin
DBOspitiEvent.Registered := true;
end;
end; //<-- AFTER THIS, APPLICATION IS BLOCKED (for a while)
procedure TForm1.Button2Click(Sender: TObject);
var
ThreadId : Cardinal;
ThreadHandle : Integer;
begin
ThreadHandle := BeginThread(nil,0,@RegisterEvents,nil,0,ThreadId);
if ThreadHandle = 0
then ShowMessage('Error');
end;
Run Code Online (Sandbox Code Playgroud)
对于事件,客户端需要建立一个单独的连接,默认情况下 Firebird 使用随机端口。与防火墙结合使用时,这会导致问题,因为例如,不允许使用该端口。
您可以将 Firebird 配置为使用固定端口,方法是编辑 firebird.conf 并将其设置RemoteAuxPort为固定值(例如 3051),然后重新启动 Firebird。然后,您可以配置防火墙以允许此端口。
另请参阅如何使用防火墙配置事件?