3

我编写了一个自托管的 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;
    }

谢谢!

4

3 回答 3

6

用:

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

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

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

于 2013-04-19T08:35:11.373 回答
3

服务堆栈.4.0.38

字符串 IP = base.Request.RemoteIp;

于 2015-05-05T19:19:32.600 回答
2

fwiw 我不得不做一些有点不同的事情:

HttpListenerRequest iHttpListenerRequest = (HttpListenerRequest)base.RequestContext.Get<IHttpRequest>().OriginalRequest;
string ip = iHttpListenerRequest.RemoteEndPoint.Address.ToString();
于 2013-05-04T03:29:52.043 回答