2013-04-18 112 views
3

我寫了一個自託管的服務堆服務器和一個客戶端,都是桌面應用程序。 在我非常基本的PING測試服務中,我試圖檢索客戶端的IP。 服務器位於192.168.0.87:82,客戶端嘗試在同一臺計算機上和另一臺計算機上,但RemoteIp和UserHostAddress始終返回192.168.0.87:82。 XRealIp爲空。 我也試過base.Request.RemoteIp,但仍然是192.168.0.87:82。如何獲取客戶端的IP?

我在做什麼錯?

public RespPing Any(ReqPing request) 
    { 
     string IP = base.RequestContext.Get<IHttpRequest>().RemoteIp; 
     string MAC = request.iTransactionInfo.MAC; 

     Log(MAC,IP, base.RequestContext.Get<IHttpRequest>().RemoteIp + base.RequestContext.Get<IHttpRequest>().XRealIp + base.RequestContext.Get<IHttpRequest>().UserHostAddress); 

     RespPing response = new RespPing { Result = "PONG" }; 

     return response; 
    } 

謝謝!

HttpListenerRequest iHttpListenerRequest = (HttpListenerRequest)base.RequestContext.Get<IHttpRequest>().OriginalRequest; 

string IP = iHttpListenerRequest.RemoteEndPoint.ToString().Split(':')[0]; 

Request.RemoteIP不停地給我的服務器地址:

+0

'Request.RemoteIp'對我的作品 – jeffgabhart

+0

我相信這是一個最近修正了:https://github.com/ServiceStack/ServiceStack/commit/f7d2365bf9a115d45f9a774aefa8ed2226abe943 –

回答

6

與做到了。

+0

順便說一句,你可以在這裏使用類型推斷,只是寫: ' var iHttpListenerRequest =(HttpListenerRequest)base.RequestContext.Get ()。OriginalRequest;' – Zegar

2

FWIW我必須做一些事情只是一點點不同:

HttpListenerRequest iHttpListenerRequest = (HttpListenerRequest)base.RequestContext.Get<IHttpRequest>().OriginalRequest; 
string ip = iHttpListenerRequest.RemoteEndPoint.Address.ToString(); 
2

ServiceStack.4.0.38

串IP = base.Request.RemoteIp;

+0

也適用於我在ServiceStack 3.9.71.0 – steve