【问题标题】:Get clients ip address in a RemObjects webservice在 RemObjects Web 服务中获取客户端 IP 地址
【发布时间】:2012-04-23 08:11:43
【问题描述】:

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

有什么建议吗? 谢谢

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

【问题讨论】:

    标签: web-services delphi delphi-xe remobjects


    【解决方案1】:

    这就是我从超级频道获得它的方式:

    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,以便我可以在以后的调用中随时获取它。

    【讨论】:

    • 它有效。我只需要 Supports 函数来加载 tcpInfo 对象。非常感谢
    • 目前,TRORemoteDataModule 实现了一个Transport 属性,因此您不必在OnGetDispatchInfo 中编写这样的代码。您可以从服务器函数中执行它。
    【解决方案2】:

    【讨论】:

    • 我找到了,但没用。我没有 IServerChannelInfo。也许在 delphi 中略有不同
    • 不幸的是我没有安装 RemObjects,所以我试图根据 RemObjects 提供的糟糕文档来提供帮助。 wiki.remobjects.com/wiki/…