Maxmind/geoip 错误"Database has been closed"



使用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'已被赋予适当的值。

我的方法有什么问题?

旧版本的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");
        }
    }

每个方法调用检查是否。文件已设置并引发您看到的异常

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

结果证明我犯了一个错误,并且在服务器上的错误位置查找文件。也就是说,geoip给出的错误信息并不清楚代码中的错误所在,并且被告知没有。dat文件被定位并将错误抛出在"LookupService"行而不是"国家"行上。感谢那些试图帮助我的人!

相关内容

  • 没有找到相关文章

最新更新