在RemObjects webservice中获取客户端IP地址

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

有什么建议吗? 谢谢

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

2个回答

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,这样我就可以在后续调用中随时获取它。


它可以工作。我只需要Supports函数来加载tcpInfo对象。非常感谢。 - user1151835
目前,TRORemoteDataModule实现了一个Transport属性,因此您不必在OnGetDispatchInfo中编写这样的代码。您可以从服务器函数中直接执行它。 - gabr

0

我找到了,但是它没有用。我没有IServerChannelInfo。也许在Delphi中略有不同。 - user1151835
不幸的是,我没有安装RemObjects,所以我只能根据RemObjects提供的糟糕文档来帮助您。http://wiki.remobjects.com/wiki/Server_FAQs_%28RemObjects_SDK%29#How_can_I_log_details_.28IP_address.2C_method_name.2C_parameters.2C_duration.2C_etc..29_of_every_call_made_to_a_server.3F - RBA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接