在RemObjects Web服务中获取客户端IP地址

时间:2012-04-23 08:11:43

标签: web-services delphi delphi-xe remobjects

我有一个使用RemObjects通过Delphi XE实现的web服务,我想知道客户请求的IP地址。我的服务继承自TRORemoteDataModule,我没有找到任何方法或对象来做到这一点。

有什么建议吗? 谢谢

注意:我认为我需要的信息是在方法self.transport.GetTransportObject()中返回,但它返回一个TObject,我不知道如何提取这些信息

2 个答案:

答案 0 :(得分:4)

这是我从SuperChannel获取它的方式:

procedure TMyInterface.RORemoteDataModuleGetDispatchInfo(const aTransport: IROTransport; const aMessage: IROMessage);
var
  tcpinfo: IROTCPTransport; 
  Session: TCustomSession;
  szClientIP : String;
begin
  Session := TCustomSession(Self.Session);
  if Supports(aTransport, IROTCPTransport, tcpinfo) then
  begin
    szClientIP := tcpinfo.ClientAddress;
    if (not Session.ShownTCP) or (Session.TCPAddress <> szClientIP) then
    begin
      Session.TCPAddress := szClientIP;
      Session.Report(leInformation, 'TCP address ' + szClientIP); 
      Session.ShownTCP := True; 
    end; 
  end 
  else 
  begin 
    Session.Report(leInformation, 'TCP address not available');
  end;
end;

您使用它的具体细节取决于您,但您必须在设置时获取它,并将其存储在会话对象中(如果您想稍后再选择它)。我实现了一个自定义会话来保存客户端IP,以便我可以在进一步调用时随时获取它。

答案 1 :(得分:0)