2012-04-23 40 views
5

Tôi có một dịch vụ web được triển khai bằng cách sử dụng RemObject trên Delphi XE và tôi muốn biết địa chỉ IP của các kiến ​​nghị của khách hàng. Dịch vụ của tôi được kế thừa từ TRORemoteDataModule và tôi không tìm thấy bất kỳ phương pháp hoặc đối tượng nào để thực hiện điều đó.Nhận địa chỉ IP của khách hàng trong dịch vụ web RemObjects

Bất kỳ đề xuất nào? Cảm ơn

Lưu ý: Tôi nghĩ rằng những thông tin mà tôi cần được trở về trong phương pháp self.transport.GetTransportObject() nhưng nó trả về một TObject và tôi không biết làm thế nào để trích xuất thông tin này

Trả lời

4

Đây là cách tôi nhận được nó từ một 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; 

Các chi tiết cụ thể về những gì bạn làm với nó tùy thuộc vào bạn, nhưng bạn phải lấy nó khi nó được thiết lập và lưu trữ nó trong đối tượng phiên nếu bạn muốn nhận nó sau này. Tôi đã triển khai một phiên tùy chỉnh để giữ IP máy khách để tôi có thể nhận được bất kỳ lúc nào trong các cuộc gọi tiếp theo.

+0

Nó hoạt động. Tôi chỉ cần chức năng Hỗ trợ, để tải đối tượng tcpInfo. Cảm ơn rất nhiều –

+0

Hiện tại, TRORemoteDataModule thực hiện một thuộc tính Transport, vì vậy bạn không phải viết một mã như vậy trong OnGetDispatchInfo. Bạn chỉ có thể thực hiện nó từ một chức năng máy chủ. – gabr

0
+0

Tôi đã tìm thấy nó nhưng không có gì ngạc nhiên. Tôi không có IServerChannelInfo. Có lẽ trong delphi là hơi khác nhau –

+0

tiếc là tôi không có RemObjects cài đặt, vì vậy tôi đang cố gắng để giúp dựa trên các tài liệu nghèo được cung cấp bởi 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

Các vấn đề liên quan