2012-04-23 7 views
5

Tengo un servicio web implementado usando RemObjects en Delphi XE y quiero saber la dirección IP de las peticiones de los clientes. Mi servicio hereda de TRORemoteDataModule y no he encontrado ningún método u objeto para hacer eso.Obtener dirección IP de clientes en un servicio web de RemObjects

¿Alguna sugerencia? Gracias

Nota: Creo que la información que necesito está volviendo en el método self.transport.GetTransportObject() pero devuelve un TObject y no sé cómo extraer esta información

Respuesta

4

Esta es la forma en que la recibe de un 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; 

Los detalles de lo que haga con ellos dependen de usted, pero debe obtenerlos tal como están configurados y guardarlos en el objeto de sesión si desea recuperarlos más tarde. Implementé una sesión personalizada para mantener el Ip del cliente para poder obtenerlo en cualquier momento en futuras llamadas.

+0

Funciona. Solo necesitaba la función Soporta, para cargar el objeto tcpInfo. Muchas gracias –

+0

Por el momento, TRORemoteDataModule implementa una propiedad de transporte, por lo que no tiene que escribir dicho código en OnGetDispatchInfo. Puede simplemente ejecutarlo desde una función de servidor. – gabr

0
+0

Lo encontré pero no es útil. No tengo IServerChannelInfo. Tal vez en Delphi es ligeramente diferente –

+0

, lamentablemente no tengo RemObjects instalado, por lo que estoy tratando de ayudar sobre la base de la escasa documentación proporcionada por 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

Cuestiones relacionadas