November Happy Hour will be moved to Thursday December 5th.

EpiServer Search stopped working after updating minor version

Vote:
 

We updated one of our CMS site to the latest .NET Framework version in preperations to later migrate over to ASP.NET Core and CMS 12.x.
These are the packages we updated:

  • EPiServer.CMS.AspNet 11.12.0 => 11.21.3
  • EPiServer.CMS.Core 11.12.0 => 11.21.3
  • EPiServer.CMS.Framework 11.12.0 => 11.21.3
  • EPiServer.CMS.Framework.AspNet 11.12.0 => 11.21.3
  • EpiServer.CMS.UI 11.12.2 => 11.36.12
  • EpiServer.CMS.UICore 11.12.2 => 11.36.12

We are hosting the application in Azure on a single instance and have previously used the EpiServer Search with IndexingService.svc, this has now stopped working.
Searching by ID works, but not searching by page name or other attributes.

Here is our Web.Config configurations:

<webHttpBinding>
<binding name="IndexingServiceCustomBinding" maxBufferSize="2147483647" maxBufferPoolSize="1073741824" maxReceivedMessageSize="2147483647">
      <security mode="Transport">
      <transport clientCredentialType="None"></transport>
  </security>
<readerQuotas maxStringContentLength="10000000" />
</binding>
</webHttpBinding>
<episerver.search.indexingservice>
<clients>
<add name="local" description="local" allowLocal="true" readonly="false" />
</clients>
<namedIndexes defaultIndex="default">
<indexes>
<add name="default" directoryPath="[appDataPath]\Index" readonly="false" />
</indexes>
</namedIndexes>
</episerver.search.indexingservice>
<episerver.search active="true">
<namedIndexingServices defaultService="serviceName">
<services>
<add name="serviceName" baseUri="https://subdomain.domain.se/IndexingService/IndexingService.svc" accessKey="local" />
</services>
</namedIndexingServices>
<searchResultFilter defaultInclude="true">
<providers />
</searchResultFilter>
</episerver.search>

Content of IndexService.svc:
<%@ ServiceHost Language="C#" Debug="false" Service="EPiServer.Search.IndexingService.IndexingService" Factory="IndexingServiceHostFactory" %>

using System.ServiceModel;
using System.ServiceModel.Activation;

public class IndexingServiceHostFactory : WebServiceHostFactory
{
protected override ServiceHost CreateServiceHost(System.Type serviceType, System.Uri[] baseAddresses)
{
var host = base.CreateServiceHost(serviceType, baseAddresses);

WebHttpBinding binding = new WebHttpBinding("IndexingServiceCustomBinding");
var endpoint = host.AddServiceEndpoint(typeof(EPiServer.Search.IndexingService.IIndexingService), binding, "");

return host;
}
}

When accessing IndexingService/IndexingService.svc we get a 404 page:

Detailed Error Information:
Module       ManagedPipelineHandler
Notification       ExecuteRequestHandler
Handler       svc-Integrated-4.0
Error Code       0x00000000
Requested URL       https://azure-domain:80/IndexingService/IndexingService.svc
Physical Path       C:\home\site\wwwroot\IndexingService\IndexingService.svc
Logon Method       Anonymous
Logon User       Anonymous

In the database the table tblIndexRequestLog is filled with data when running a new index job.
We can also see an Index folder is created in App_Data.

When running locally we have noticed a few exceptions showing up:

2024-07-02 09:28:10,912 [7] ERROR EPiServer.Search.Internal.RequestHandler: Update batch could not be sent to service uri 'https://subdomain.domain.se/IndexingService/IndexingService.svc/update/?accesskey=local'
System.Net.WebException: The remote server returned an error: (404) Not Found.
   at System.Net.HttpWebRequest.GetResponse()
   at EPiServer.Search.Internal.RequestHandler.MakeHttpRequest(String url, String method, IndexingServiceReference indexingServiceReference, Stream postData, Action`1 responseStreamHandler)
   at EPiServer.Search.Internal.RequestHandler.SendRequest(SyndicationFeed feed, String namedIndexingService)

Error Number:40615,State:1,Class:14
2024-07-01 16:36:43,910 [81ERROR EPiServer.Search.Internal.RequestHandlerCould not get search results for uri 'https://subdomain.domain.se/IndexingService/IndexingService.svc/search/?q=((EPISERVER_SEARCH_DEFAULT%3A(bygg*))+OR+(EPISERVER_SEARCH_TITLE%3A(%22bygg%5C*%22%5E5)))+AND+(EPISERVER_SEARCH_VIRTUALPATH%3A(43f936c9%5C-9b23%5C-4ea3%5C-97b2%5C-61c538ad07c9*))+AND+(EPISERVER_SEARCH_TYPE%3A(%22EPiServer.Core.PageData%2CEPiServer%22))+AND+(EPISERVER_SEARCH_CULTURE%3A(sv))&namedindexes=&offset=0&limit=50&format=xml&accesskey=local'MessageDTD är inte tillåtet i detta XML-dokument.   vid System.Xml.XmlTextReaderImpl.Throw(Exception e)
   vid System.Xml.XmlTextReaderImpl.ThrowWithoutLineInfo(String res)
   vid System.Xml.XmlTextReaderImpl.ParseDoctypeDecl()
   vid System.Xml.XmlTextReaderImpl.ParseDocumentContent()
   vid System.Xml.XmlReader.MoveToContent()
   vid System.Xml.XmlReader.IsStartElement(String localnameString ns)
   vid System.ServiceModel.Syndication.Atom10FeedFormatter.CanRead(XmlReader reader)
   vid System.ServiceModel.Syndication.SyndicationFeed.Load[TSyndicationFeed](XmlReader reader)
   vid System.ServiceModel.Syndication.SyndicationFeed.Load(XmlReader reader)
   vid EPiServer.Search.Internal.RequestHandler.<>c__DisplayClass6_0.<GetSearchResults>b__0(Stream response)
   vid EPiServer.Search.Internal.RequestHandler.MakeHttpRequest(String urlString methodIndexingServiceReference indexingServiceReferenceStream postDataAction`1 responseStreamHandler)
   vid EPiServer.Search.Internal.RequestHandler.GetSearchResults(String queryString namedIndexingServiceCollection`1 namedIndexesInt32 offsetInt32 limit)
#324801
Edited, Jul 02, 2024 11:56
Vote:
 

Hi Fredrik,

The recommended approach for search when hosting in azure would be to use 'Search and Navigation'.

You can grab a developer index for local development or if you are already using DXP then you will have been provided a development index as part of the setup process.

Would this be an option for you?

Thanks

Paul

#324805
Jul 02, 2024 13:50
Vote:
 

Business is not keen on starting to pay extra for an internal only CMS search used by editors. So that is not an option currently.
We already use Elastic and Algolia for customer searches.

#324806
Edited, Jul 02, 2024 14:14
Vote:
 

Hi Fredrick,

Just maybe something to try quicking to see if it helps:

  1. Stop the site in IIS / AppPool (presuming due to the subdomain setup).
  2. Delete the index from the App_Data folder.
  3. Clear / Delete Logs.
  4. Restart the site.
  5. Run site.
  6. Re-index the site.
#324807
Jul 02, 2024 14:29
Vote:
 

I've done that, the files are properly created and the tblIndexRequestLog count is 0.
It doesn't work locally either, hosting in IIS.

I'm now looking into creating a custom provider inheriting from PageSearchProvider and use our Elastic index instead, is this possible with CMS11?

#324811
Edited, Jul 02, 2024 14:41
Vote:
 

Hi Fredrick,

Yes it is, and a better approach as you are then only concerned with your elastic search index. 

The documentation is the same for CMS 11 as is for CMS 12 - Add search providers (optimizely.com)

The only thing to possibly look out for is that you are potentially only searching pages, what about blocks, images, pdfs, etc?

Epinova already has an elastic search implementation https://github.com/Epinova/Epinova.Elasticsearch

#324812
Edited, Jul 02, 2024 14:51
Vote:
 

Inside GetSearchResults method in RequestHandler I get a timeout on this call:

Edit:

It works locally for new pages and if I edit and re-publish an old page, but searching by name only works for these pages.
Could it be becuase of the minor update that there is some assembly diff between the old pages and the newly created/published?

#324824
Edited, Jul 02, 2024 19:08
Vote:
 

An update.

I have successfully indexed in Azure and I can search for Media and Blocks by name.
However, pages still doesn't work besides searching by ID, I've tried name and by * without any luck.

The call to WCF service https://subdomain.domain.net/IndexingService/IndexingService.svc/search/?q= returns a 500 status code in the logs.


Any ideas?

#324948
Edited, Jul 05, 2024 7:06
Vote:
 

Hi Fredrik

Do you have access to the logs for the IndexingService service? If you run it locally, does it throw exceptions on searching?

#325064
Jul 08, 2024 8:22
Vote:
 

Sorry for the late response, I've been on vacation and after that I've had other priorities. I'm ready to do some further debugging now.

I can see the IIS Detail error from Azure, but it doesn't give much information:


However the base request url is a bit odd, it's not the same that is used in the Web.config for the namedIndexingServices, it's the Azure app service domain.

I have no errors locally as the indexing works there. It doesn't work from Azure.

Edit:

In our test environment I can see a different error, we get a 403 on POST /IndexingService/IndexingService.svc.

In our production environment we get a 401 to https://domain.test.se/IndexingService/IndexingService.svc/update/?accesskey=123

Browsing the pages works fine:

Here is the call in Azure, I don't get any further details as of why it gets 403.

The table [tblIndexRequestLog] is filled with data, but the queue remains full. The Index folder is also not created in App_Data when I browse kudu in Azure.

#330941
Edited, Oct 04, 2024 9:55
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.