ASP.NET MVC - 加载 Maxmind dat 文件

Posted

技术标签:

【中文标题】ASP.NET MVC - 加载 Maxmind dat 文件【英文标题】:ASP.NET MVC - Loading Maxmind dat file 【发布时间】:2010-08-09 23:05:20 【问题描述】:

我计划使用 Maxmind 的 DAT 文件在我正在开发的 ASP.NET MVC 应用程序中提供一些基本的地理定位功能。 DAT 文件大约 17mb,我想知道在我的应用程序中加载它的最佳方法是什么 - 显然我不想在每次需要一些地理信息时都加载它,我认为最好的做法是在应用程序启动时将其加载到共享变量中。

其他人是如何处理这个问题的?有什么建议吗? 谢谢

日本

【问题讨论】:

【参考方案1】:

缓存是一个糟糕的地方来存储它。它可能会在没有通知的情况下被清除,因此您必须在它被删除时重新加载它。

Maxmind supplies a .NET API 处理他们的 DAT 文件。打包为 tar.gz(描述为“用于 GeoIP 城市、国家、ISP 等的开源 C# API”)已经有一个选项可以有效地将数据加载到私有缓存中,例如:

var lookupService = new LookupService("path.to.my.dat", LookupService.GEOIP_MEMORY_CACHE);

【讨论】:

我已成功使用此 API。真的很快。 代替原来的 MaxMind C# API 版本(位于maxmind.com/app/csharp),你可以尝试使用code.google.com/p/geoipsharp的稍微修改的版本【参考方案2】:

在我看来,HttpRuntime.Cache 是保存这些数据的最佳位置。有关如何从缓存中添加和删除内容的信息,请参阅 here。

【讨论】:

+1 - 正是我所建议的。事实上,这种机制可以根据您的需要简单或功能齐全。在我的应用程序中,我已经将它发展到这样一个阶段,即 lambda 和匿名函数会处理我所有的“强类型”对象,因此对缓存的请求要么填充它,要么获取给定键的内容。这是一个绝对需要计划的策略,但是一旦确定了您的“关键”计划,那就不费吹灰之力了。我可以删除一个指向我的实现的链接(可单元测试,因为它使用到包装器的接口)

以上是关于ASP.NET MVC - 加载 Maxmind dat 文件的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 4 异步加载控制器

ASP.NET Mvc开发之EF延迟加载

Asp.Net Core MVC 不加载视图

加载 ASP.Net MVC JSONResult jQuery DataTables

模态视图重新加载内容 (Bootstrap MVC ASP.NET)

ASP.NET MVC 强类型部分视图,给出无法加载类型错误