Keeping reliable test data in EPiServer content database for automated UI tests

In my current client’s EPiServer 9 website project we are using Selenium to run automated UI tests on our code. For this we keep an EPiServer content database backup which we restore before each execution of the test suite. This ensures that any alterations to the content made by the tests are reset before each run. In previous projects we’ve kept a somewhat fresh dump …

EPiServer 9.5 PageTree disappears on upgrade: Pages, Sites, Tasks moved to Blocks, Media area

We recently upgraded a client’s EPiServer 8.5 public multilanguage website to EPiServer 9.5 in production. Everything had worked just fine when going through both system testing as well as acceptance testing environments, but for this final step we hit a small snag. It seemed as if a few of our webeditor and webadministrator SQL user accounts had a problem introduced into their edit mode interfaces. …

Manage EPiServer global settings in multilanguage multisite environment

Previously I wrote an article about an Easy way to manage global settings in multilanguage EPiServer website, but have since then had the need to expand this functionality a little (If you feel this article lacks code, check the old one to get it). Together with my collegue Thomas Durrani from Atiendo Consulting I refactored the existing code to also work in a multisite EPiServer …

Problems with ImageVault’s Shadow Copy Cache after upgrade to ImageVault 4.8

We started to experience a problem with a clients ImageVault installation after doing an upgrade to version 4.8.219.113 of the product. Large images being stored on a network share started to cause the MediaStreamService to throw Internal Server Errors while being fetched by the website. The ImageVault Core itself is not load balanced, but the EPiServer installation is however distributed over a couple of front …

ImageVault Core service not working due to mismatch with database schema and code versions

Just as a note to self. We recently did a POC on upgrading to the latest EPiServer (8.5 to 9.5) and ImageVault (4.X to 4.8) versions for my current client’s website. Everything went as expected, there were a few things that wouldn’t build in Visual Studio which were easily fixed. After switching back to do work in another Git branch I returned to the POC …

Possible causes of 401 Unauthorized ImageVaultException: Unable to request access token @ https://localhost:9901/oauth/token

The last couple of weeks I’ve been fiddling alot with various ImageVault instances and certificates in different environments and found that a common source of annoyance is the ImageVaultException stating that it’s Unable to request access token @ https://localhost:9901/oauth/token. It’s not always straight forward what might be causing this problem. I’ve summarized a couple of possible culprits in this article. The ImageVault sdkIdentity secret The …

Simple functionality for hreflang metadata in EPiServer websites

The alternate hreflang tag is a way of letting search engines such as Google know about the different languages that your pages exist in. It’s a signal to the engines that they may use in order to serve more relevant content to users based on language. One place to put this information is directly in the markup as below (Other alternatives here). A translated page …

Reminders when changing user on ImageVault Core Windows Service

We needed to change the service account user running the ImageVault Core service in my current client’s production environment the other day. Here are a few reminders on what this actually means; that’ll likely also be useful setting up new environments. Changing user on ImageVault Host Service (MyInstance) ImageVault Core’s service needs access to your image files Why does half of my ImageVault images work, …

Easy way to manage global settings in multilanguage EPiServer website

There are many different ways to handle global settings in an EPiServer website. Common ones include keeping them in a separate tab on the EPiServer site’s start page, creating a separate settings pages, or using plugins for storing them directly in the EPiServer database. To make things more manageable for a client’s EPiServer website we recently did a little work migrating their global settings form …

ImageVault publishing sources and host names in a multisite EPiServer environment

We recently added a second website to a client’s EPiServer installation, and wanted to use the existing ImageVault installation here as well. We hit a few snags, but nothing really difficult to handle. ImageVault licenses and publishing sources While EPiServer counts the number of sites in an EPiServer installation for their licenses, ImageVault does a similar thing; they keep track of how many different publishing …

Changing NLog minLevel LogLevel at runtime in EPiServer

We moved from log4net to NLog in my current client’s EPiServer 8.5 website last year (see Using NLog with EPiServer and log4net for more information). Some time ago we received a request about being able to alter the log level at runtime, without editing configuration files on the servers. Reasonable enough; we already had read access to the generated logs, but no way of temporarily …

ImageVault Core unable to retrieve large files during load test

We did a series of load tests this morning on the client’s new public EPiServer website and found an issue with large files being supplied by ImageVault; that is, files large enough as not to be stored in the database but rather on the disk. Already at 5 concurrent requests to the same ImageVault resource, ImageVault Core starts producing IO Exceptions. Note that for single …

Encrypting connectionStrings for ImageVault Core

Encrypting sensitive information in configuration files seems rather obvious when working with web development. In my current project I got a chance to implement the use of ImageVault 4 in our EPiServer 8 website, and started looking into how I would go about encrypting the connectionStrings file. RSA encryption on ImageVault Core’s connectionStrings For a website’s connectionStrings you’d normally just have to run something like …

PowerShell script example for copying correct configs based on server machine name in multi server environment

As a complement to the previous article on Extending EPiServer MSBuild config transforms to provide server specific configuration for TCP EventReplication and Licenses I wrote a small Windows PowerShell script example on how you may copy the proper configuration files to the proper server automatically during deploy. This script is available at GitHub. Copying files with PowerShell based on environment computer name and regex The …

Extending EPiServer MSBuild config transforms to provide server specific configuration for TCP EventReplication and Licenses

I encountered an issue this week setting up the production environment for my current client, as it turned out that we would not be able to use EPiServer‘s UDP multicasting between our servers. Hence, we would have to configure the use of TCP for the EventReplication service; meaning different configuration files for each server. As we always strive to make our deploys as painless as …

ImageVault 4 MediaStreamService URL exposed on EPiServer 7.5 website

I ran into a small ImageVault 4 configuration error setting up a new testing environment for a client’s EPiServer 7.5 website the other day; all of our ImageVault pubished media URLs had stopped working. Or, actually they worked just fine as long as you tried accessing them from the server. In all of our old environments the image URLs rendered correctly as below: While on …

Database persisted translations with edit tools for language file resources in globalized EPiServer websites

A few years back I wrote a small tool allowing web administrators to update EPiServer CMS 6 R2 language files by themselves without the help of their website developers. There were of course a few downsides to this, such as updated deployment procedures as not to lose any new translations. I took a few hours and made a new one for EPiServer 7.5 that works …

Updated sitemap.xml generator functionality with bundle and batch support using sitemapindex

I updated the previous sitemap.xml generator functionality with new support for sitemapindex with batching and bundling of different types of sitemap URLs. My current client has the need to manually add sitemap.xml entries as a supplement to the generated ones through an administrator interface; hence the bundling functionality. Source code at GitHub.

Sitemap.xml generator engine for Multi language EPiServer 7.5 websites

A sitemap.xml file is a useful tool for helping search engines to find relevant pages on your website. This sitemap generator engine for EPiServer is based on loose strategies supporting globalized multilingual content; in other words, mysite.se/sitemap.xml and mysite.no/sitemap.xml will return swedish and norwegian URLs respectively. The strategy based pattern allows for easy custom additions of any kind to the xml file; for instance, apart …