In a previous post I explored various options of hosting RavenDB. While using RavenDB as a Windows Service or hosted in IIS is probably the best way to go in most cases there are a number of cases where the embedded option is great. And one of the places where I really like the embedded option of hosting RavenDB is when doing simple standalone websites. And with the new Azure website option that is a great way to host them.
The code is real straightforward and just like before. I am using a DataDirectory option when creating the EmbeddableDocumentStore here but that does the same thing as I did before using the connection string.
The example code from my previous blog posts will just work except for one gotcha. By default RavenDB will search for a post to use by itself. However that means scanning the available posts and that isn’t permitted by default. The result is an exception:
System.Net.NetworkInformation.NetworkInformationException: Access is denied
With a stack trace like this:
[NetworkInformationException (0x5): Access is denied]
Raven.Database.Util.PortUtil.GetPort(String portStr) +133
Raven.Database.Config.RavenConfiguration.LoadConfigurationAndInitialize(IEnumerable`1 values) +307
Raven.Client.Embedded.EmbeddableDocumentStore.set_DataDirectory(String value) +40
The fix is simple. Instead of letting RavenDB search for a port by itself just specify one in the web.config. The setting required is “Raven/Port”.
That is all there is to it :-)
Want to see for yourself?