有一个方法,根据IP获取城市信息,然后根据不同的城市信息做不同的处理
现在是单独测试这个方法没有问题,但是访问量大了就不准确了
现在是单独测试这个方法没有问题,但是访问量大了就不准确了
解决方案 »
- webservice中调用一个com组件的问题
- GridView影响性能?
- 类库项目里能加web页?不同网站项目如何互相访问web页?
- VS2003中如何改变Treeview中图标的大小???
- 如何在本站的表单提交到外站,并将外站的结果截取过来?用HttpWebRequest或XMLhttp?
- VS.net不推柬用<font>,用什么 来代替呢?
- 这个问题怎么解决?
- http://keyaplastic.com/lxwm.htm
- 测试连接失败,因为初始化提供程序时发生错误,[DBNETLIB][ConnectionOpen(Connect()
- 如何合并datagrid页脚的单元格?
- 数据同步
- linq如何写?
string aid = "5";
IpLimitBiz biz = new IpLimitBiz();
if (biz.IsPopByIP(aid))
{
//显示
}
else
{
//不显示
}
//IpLimitBiz类的方法 判断是否显示
public bool IsPopByIP(string aid)
{
bool isPop = true;
Entity.IpLimit limit = ACache.GetLimitaidInfo(aid);
if (limit != null)
{
string ip = IPAccess.GetClientIP().Split(',')[0];
string ipnum = IPAccess.IPtoNum(ip).ToString();
DataTable dt = ACache.GetIPInfo(ipnum);
if (dt.Rows.Count > 0)
{
string province = dt.Rows[0]["province"].ToString();
string[] provinces = limit.Province.Replace(",", ",").Split(',');
for (int i = 0; i < provinces.Length; i++)
{
if (province.IndexOf(provinces[i]) == -1)
{
isPop = false;
}
else
{
isPop = true;
break;
}
}
}
}
return isPop;
}
//ACache类的方法在IsPopByIP中调用
public static Entity.IpLimit GetLimitaidInfo(string aid)
{
Entity.IpLimit limit = null;
string key = "IpLimitList";
DataTable dt = (DataTable)HttpContext.Current.Cache.Get(key);
if (dt == null)
{
string sql = "select * from IpLimit";
dt = SqlHelper.ExecuteDataset(SqlHelper.DBCONN, CommandType.Text, sql).Tables[0];
HttpContext.Current.Cache.Insert(key, dt.Copy(), null, DateTime.Now.AddMinutes(10.0), TimeSpan.Zero);
}
if (dt.Rows.Count > 0)
{
DataRow[] dr = dt.Select("aid='" + aid + "'");
if (dr.Length > 0)
{
limit = new Entity.IpLimit();
limit.ID = int.Parse(dr[0]["id"].ToString());
limit.aid = int.Parse(dr[0]["aid"].ToString());
limit.Province = dr[0]["Province"].ToString();
}
}
return limit;
}
//ACache类的方法在IsPopByIP中调用
public static DataTable GetIPInfo(string ipnum)
{
string sql = "select * from dbo.IpSource where ipnum1<=" + ipnum + " and ipnum2>=" + ipnum;
DataTable dt = SqlHelper.ExecuteDataset(SqlHelper.DBCONNLOG, CommandType.Text, sql).Tables[0];
return dt;
}
//IPAccess类的方法在IsPopByIP中调用 获取客户端IP
public static string GetClientIP()
{
string ipString = "";
if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
{
ipString = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}
else
{
ipString = HttpContext.Current.Request.UserHostAddress;
}
return ipString;
}
//IPAccess类的方法在IsPopByIP中调用 将IP 地址转化为数字
public static long IPtoNum(string Ip)
{
string[] stringip = new string[4];
stringip = Ip.Split('.');
long ipnum = Convert.ToInt64((stringip[0])) * 16777216 + Convert.ToInt64(stringip[1]) * 65536 + Convert.ToInt64(stringip[2]) * 256 + Convert.ToInt64(stringip[3]);
return ipnum;
}
上面是代码,帮忙分析一下,多谢