我在Silverlight中使用ASP.NET(.asmx)Web服务.由于无法在Silverlight中找到客户端IP地址,因此我必须在服务端登录.这些是我尝试过的一些方法:
Request.ServerVariables("REMOTE_HOST") HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"] HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; Request.UserHostAddress() Request.UserHostName() string strHostName = Dns.GetHostName(); string clientIPAddress = Dns.GetHostAddresses(strHostName).GetValue(0).ToString();
以上所有方法在我的本地系统上运行正常,但是当我在生产服务器上发布我的服务时,它开始给出错误,
错误:对象引用未设置为对象的实例.堆栈跟踪:
在System.Web.Hosting.ISAPIWorkerRequestInProc.GetAdditionalServerVar(Int32索引)
在System.Web.Hosting.ISAPIWorkerRequestInProc.GetServerVariable(String name)
在System.Web.Hosting.ISAPIWorkerRequest.GetRemoteAddress()
在System.Web.HttpRequest.get_UserHostAddress()
John Saunder.. 5
你应该试着找出它的确切NullReferenceException
来源.更改代码以了解某些内容可以返回null.例如,在
HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]
HttpContext.Current
可以.Request
返回null,或者.ServerVariables["REMOTE_ADDR"]
可以返回null ,或者可以返回null.另外,在
string clientIPAddress = System.Net.Dns.GetHostAddresses(strHostName).GetValue(0).ToString();
在GetHostAddresses(strHostName)
可以返回null,或者.GetValue(0)
可以返回null.
如果方法或属性可以返回null,那么在解除引用之前应检查null.例如,
IPAddress[] hostAddresses = System.Net.Dns.GetHostAddresses(strHostName); string clientIPAddress; if (hostAddresses != null) { object value = hostAddresses.GetValue(0); if (value != null) { clientIPAddress = value.ToString(); } }
PS我不知道你为什么要用GetValue(0)
.请hostAddresses[0]
改用.
你应该试着找出它的确切NullReferenceException
来源.更改代码以了解某些内容可以返回null.例如,在
HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]
HttpContext.Current
可以.Request
返回null,或者.ServerVariables["REMOTE_ADDR"]
可以返回null ,或者可以返回null.另外,在
string clientIPAddress = System.Net.Dns.GetHostAddresses(strHostName).GetValue(0).ToString();
在GetHostAddresses(strHostName)
可以返回null,或者.GetValue(0)
可以返回null.
如果方法或属性可以返回null,那么在解除引用之前应检查null.例如,
IPAddress[] hostAddresses = System.Net.Dns.GetHostAddresses(strHostName); string clientIPAddress; if (hostAddresses != null) { object value = hostAddresses.GetValue(0); if (value != null) { clientIPAddress = value.ToString(); } }
PS我不知道你为什么要用GetValue(0)
.请hostAddresses[0]
改用.