2014/01/28

REST Server 取得 Remote IP ( Client IP ) 的方法

有關這個問題,解法如下
procedure TWebModule.DSServerConnect(
  DSConnectEventObject: TDSConnectEventObject);
var _Session: TDSSession;
begin
  try
    if Assigned(DSConnectEventObject.ChannelInfo) then
    begin
      _Session := TDSSessionManager.GetThreadSession;
      if Assigned(_Session) then
      begin
        if _Session.GetData('RemoteAddr') = '' then
          _Session.PutData('RemoteAddr', DSConnectEventObject.ChannelInfo.Info);
      end;
    end;
  except
  end;
end;

今天測試大概是可以解決:
1. Request.RemoteAddr 不定時會存取失敗
2. REST 方法呼叫時,DSConnectEventObject.ChannelInfo 和 TDSSessionManager.GetThreadSession 必會存取失敗的問題

可能有人會問,如果使用 REST 方法時又想記錄 IP 的時候該怎麼處理?
目前原則上就只能避開使用 TDSSessionManage 。
至於什麼時候會修正這個 Bug ?
 嗯.
.
.
.
……我想應該是在不久的將來吧!

See also:


沒有留言:

張貼留言

How to use URLEncode in Delphi

URL編碼,也稱【百分號編碼(Percent-encoding)】 由於 URL 不能直接接受 UTF8 文字,所以要先轉成百分號編碼後,如此網址才能順利送給 HTTP Server 從 Indy 加入 Delphi 後,就可以用 IdURI.TIdURI 單元進行編碼 ...