Maxmind / geoip错误“数据库已关闭”

时间:2014-03-27 17:22:04

标签: c# maxmind

使用maxmind / geoip api我得出错误"数据库已关闭"任何人都有任何想法,为什么会这样?

我尝试了多种不同的方法(单线和多线解决方案等),但无法弄清楚它为什么不起作用。 在调试时我发现正在为LookupService代码行读取数据库,因为我可以看到它从数据库中检索了国家名称,但是当我尝试使用时

 string userIpAddress = HttpContext.Current.Request.UserHostAddress;
 string geoIpDbPath = "/App_Data/CMSModules/WebAnalytics/MaxMind/";
 string geoIpDb = geoIpDbPath + "GeoIP.dat";
 LookupService ls = new LookupService(geoIpDb, LookupService.GEOIP_MEMORY_CACHE);
 Country c = ls.getCountry(userIpAddress);

这变得非常令人沮丧,因为我可以看到数据库已被成功访问并且变量' ls'已被赋予适当的价值。

我的方法有什么问题?

2 个答案:

答案 0 :(得分:2)

old version of the api代码上隐藏了无法加载文件的事实:

    public LookupService(String databaseFile, int options){
        try {
            this.file = new FileStream(databaseFile, FileMode.Open, FileAccess.Read);
            dboptions = options;
            init();
        } catch(System.SystemException) {
            Console.Write("cannot open file " + databaseFile + "\n");
        }
    }

然后每个方法调用检查是否已设置this.file,引发您看到的异常

 public Country getCountry(long ipAddress){
            if (file == null) {
                //throw new IllegalStateException("Database has been closed.");
                throw new Exception("Database has been closed.");
            }

答案 1 :(得分:0)

事实证明我犯了一个错误,并且正在寻找服务器上错误位置的文件。那说geoip给出的错误消息并没有说清楚代码中的错误在哪里,并且告诉没有找到.dat文件并在'LookupService'行而不是错误中抛出错误会很有帮助来到'国家'线。 感谢那些试图帮助的人!