EPiServer Search is integrated with CMS build-in search feature. It’s a very useful functionality that allows users find any content across whole website.
For many times I saw several forum threads and blog posts about solving the problems related to the installation of this service. In recent projects in which I was involved we faced some problems regarding empty results.
Majority of cases appears in new projects. Usually everything works on developments machines, but it crash on Test, Stage or even in Production environment. Search Service is a stable solution of course, but it’s easy to omit one of the web.config transformation attributes or set the improper Application Pool user.
Investigating the issue is usually time consuming. We need to check the application web.config settings, web service response, IIS settings and many other things. Those are settings from different areas of web server. It was hard for me to remember the list of all correct values and statuses. That’s why I decided to prepare an admin tool for checking all of those settings.
First I tried to read all blog posts, threads, comments on the web. I also talked with many peoples who had search issues. Then I analyze and collect all of the diagnostics actions that could be taken against solving the problem. Some of them could be verified automatically. The list of tasks:
- Configuration – check if web.config “episerver.search” sesction have “active” set to true.
web.config - episerver.search sectionXHTML123456789101112131415<?xml version="1.0" encoding="utf-8"?><!-- ... --><configuration><episerver.search active="true"><namedIndexingServices defaultService="serviceName"><services><add name="serviceName" baseUri="http://localhost:50379/IndexingService/IndexingService.svc" accessKey="local" /></services></namedIndexingServices><searchResultFilter defaultInclude="true"><providers /></searchResultFilter></episerver.search><!-- ... --></configuration>
- Configuration – serviceHostingEnvironment – check if web.config “system.serviceModel” section have “multipleSiteBindingsEnabled” attribute enabled.
web.config - multipleSiteBindingsEnabled enabledXHTML12345<system.serviceModel><!-- ... --><serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" /><!-- ... --></system.serviceModel>
- SSL – Configuration – check if web.config binding configuration for “IndexingServiceCustomBinding” has security mode set to transport. Setting should be configured when using SSL:
web.config - SSL configuration123456789<binding name="IndexingServiceCustomBinding"maxBufferPoolSize="1073741824"maxReceivedMessageSize="2147483647"maxBufferSize="2147483647"><security mode="Transport"><transport clientCredentialType="None"></transport></security><readerQuotas maxStringContentLength="10000000" /></binding>
- App Pool user name – The Application Pool user name used by application. You should double check if you use the correct one.
- App pool permissions – check if application pool account has access to index directory.
- Index SVC file exists – check if ‘IndexingService.svc’ files exists on the disk. I’m checking this because after one of the platform upgrade something happened with EPiServer.Search nuget package. The SVC file was removed.
- WCF service GET response – runs GET request to WCF search service and check the response. The result should be ‘Endpoint not found’ (404) and ‘Method not allowed’ (405). If you don’t get expected results, then try to reconfigure service to localhost, like localhost:112233/indexingservice/indexingservice.svc; Found this here
- EPiServer logs enabled – check if the log4net logging is enabled. The EPiServerLog.config should log serch service errors. Then it should be easier to solve the issues.
EPiServerLog.config - loging for search serviceXHTML12345678910<?xml version="1.0" encoding="utf-8"?><log4net><!-- ... --><logger name="EPiServer.Search.IndexingService.IndexingService"><level value="DEBUG" /></logger><!-- ... --></log4net>
- Search StartPage by Id – Check if searching by StartPage ID is working. It could be that search by ID is working while search-by text not.
- Search StartPage by Name – Check if searching by StartPage page name is working.
The tool execution result is a report:
I also included the link to “Index site content” tool. This tool is not available under admin menus.
I was thinking about creating a library or Nuget Package, but it’s just a ASPX web form and a couple of line with checkers algorithm. So just add those files to your solution and it should work. Code is available on Gist. The file structure in project should looks like:
After building the project tool is available under Admin->Tools->Search Monitor.
I you have an idea how could I improve the tool, what tests could I include please let me know and I’ll try to implement and share.