如何获得客户端的IP?

时间:2013-04-18 15:01:13

标签: servicestack

我已经编写了一个自托管服务堆栈服务器和一个客户端,这两个桌面应用程序。 在我非常基本的PING测试服务中,我试图检索客户端的IP。 服务器在192.168.0.87:82,客户端我在同一台计算机和另一台计算机上尝试过,但RemoteIp和UserHostAddress总是返回192.168.0.87:82。 XRealIp为空。 我也试过base.Request.RemoteIp,但仍然是192.168.0.87:82。

我做错了什么?

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;
    }

谢谢!

3 个答案:

答案 0 :(得分:6)

制作:

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

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

Request.RemoteIP一直给我服务器地址。

答案 1 :(得分:3)

ServiceStack.4.0.38

string IP = base.Request.RemoteIp;

答案 2 :(得分:2)

fwiw我必须做一些不同的事情:

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