smithsson68@gmail.com
Jul 4, 2011
visibility 7460
star star star star star
(1 votes)

Automatically Updating the Geo-IP Database

Last week, David Knipe blogged about how to update the MaxMind GeoIP database that ships with the EPiServer Framework.

This inspired me to create an EPiServer Scheduled Job to do this automatically:

image

As the job needs to download a file from the internet, which could be a lengthy operation, I made it a ‘stoppable’ job. You can read more about stoppable scheduled jobs here.

The job also has a settings page where you can adjust the URL of the downloadable database file as well as a couple of other settings:

image

It seems that MaxMind update their ‘Lite’ database on the 1st of every month so it’s probably a good idea to schedule the job for the 2nd of every month.

You can obtain a Deployment Center Zip Module here to add the functionality to a site or if you want the source code then download the EPiServer.Extensions.GeoIPUpdate.1.0.nupkg package from nuget.episerver.com.

The code has been tested but of course if you find any bugs or have any suggestions for improvements then please let me know.

Happy updating!

Jul 04, 2011

Comments

Jul 4, 2011 08:02 PM

Great stuff! Thanks Paul. I've updated my original post :)

Jeff Wallace
Jeff Wallace Jul 18, 2011 11:06 PM

Nice! We had a question about this shortly after the R2 release and now a more complete answer.

Jørgen Helgheim
Jørgen Helgheim Mar 12, 2014 11:02 AM

Nice.

One fix to the code:
You should replace the line _liveDatabaseFileName = maxmindProviderConfig.Parameters["databaseFileName"]; with _liveDatabaseFileName = Web.VirtualPathUtilityEx.RebasePhysicalPath(maxmindProviderConfig.Parameters["databaseFileName"]); in the property LiveDatabaseFileName in the file UpdateDatabase.cs. To take acount of the appdata path.

For thoose wanting to use this code in CMS 7 or 7.5 you should make GeoIPUpdateAdmin.aspx.cs inherit WebFormsBase instead of SystemPageBase. and then you do not need to override Page_PreInit to set MasterPageFile, because this is already part of the WebFormsBase class.

valdis
valdis Jan 27, 2015 05:54 PM

Is it open sourced?

error Please login to comment.
Latest blogs
Finding Thomas Part 3 - The Moment of Recognition

Remember Thomas? In digital landscape, Thomas is the returning visitor who reads everything, opens every email, converts on nothing. In standard...

Ritu Madan | Jun 26, 2026

Add more scheduled job settings from the Optimizely CMS 12 admin UI -- with OptiScheduledJob.ExtraParameters

  Optimizely (EPiServer) CMS 12 ships a great scheduled-jobs framework, but it has one frustrating gap: a job has nowhere to store its own...

Binh Nguyen Thi | Jun 25, 2026

Automated Search & Navigation to Graph Migration with Claude Code

A Claude Code plugin that scans your S&N codebase, applies Graph SDK transformations, and validates the result. Install once, run one command. CMS ...

Connor Fortin | Jun 24, 2026

Migrating from Find to Graph: Lessons Learned from a Real CMS 13 Project

While migrating a search solution from Optimizely Search & Navigation (Find) to Optimizely Graph in CMS 13, I encountered several issues that were...

Binh Nguyen Thi | Jun 24, 2026

Optimizely: Upgrade Opti-ID and .NET 10 in CMS 12

Many Optimizely customers are planning their roadmap around a future migration to Optimizely CMS 13. As a result, upgrades such as Opti ID adoption...

Madhu | Jun 23, 2026 |

Understanding Optimizely Graph: Caching, Webhooks & Avoiding Stale Content (Optimizely SaaS CMS)

📌 Scope: This post covers Optimizely CMS (SaaS) only — using the official @optimizely/cms-sdk and @optimizely/cms-cli packages with Next.js 15. If...

Kiran Patil | Jun 23, 2026 |