Installing Skype for Business Server 2015 Core Components causes ZervicePoint to stop working

Problem

After installing Skype for Business Server 2015 Core Components on the same server as ZervicePoint, you receive a server error when trying to browse to ZervicePoint.

The reason for this is that Skype for Business Server 2015 Core Components installs an assembly, Newtonsoft.json.dll in the Global Assembly Cache, this assembly is also used by ZervicePoint but the one installed in the GAC is of an older version which causes ZervicePoint to stop working.

The following event log error may also appear

Exception

Event code: 3005
Event message: An unhandled exception has occurred.
Event time: 5/16/2018 11:56:51 PM
Event time (UTC): 5/16/2018 9:56:51 PM
Event ID: 26d734db88914c6a951ef29abfd685c1
Event sequence: 4
Event occurrence: 1
Event detail code: 0

Application information:
    Application domain: /LM/W3SVC/7/ROOT-2-131709814029467043
    Trust level: Full
    Application Virtual Path: /
    Application Path: C:\Program Files\Zipper\ZervicePoint\Web\WebApi\
    Machine name: LOCALHOST

Process information:
    Process ID: 4876
    Process name: w3wp.exe
    Account name: DOMAIN\ServiceAccount

Exception information:
    Exception type: HttpException
    Exception message: Method not found: 'Void Newtonsoft.Json.JsonSerializerSettings.set_StringEscapeHandling(Newtonsoft.Json.StringEscapeHandling)'.
   at System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app)
   at System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers)
   at System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context)
   at System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context)
   at System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)

Method not found: 'Void Newtonsoft.Json.JsonSerializerSettings.set_StringEscapeHandling(Newtonsoft.Json.StringEscapeHandling)'.
   at System.Web.Mvc.JsonHelper.JsonSerialize(Object o, Boolean ignoreReferenceLoops, JsonConverter[] converters)
   at Zipper.ZervicePoint.Common.Web.Globalization.SiteLocalizationManager.RefreshTranslationsHash()
   at Zipper.ZervicePoint.WebApi.WebApiConfig.RegisterSite()
   at Zipper.ZervicePoint.WebApi.WebApiConfig.Register(HttpConfiguration config)
   at Zipper.ZervicePoint.WebApi.WebApiApplication.Application_Start()

Request information:
    Request URL: https://zervicepoint.dev.local:30000/Store/api/process
    Request path: /Store/api/process
    User host address: 10.2.61.107
    User:  
    Is authenticated: False
    Authentication Type:  
    Thread account name: DOMAIN\ServiceAccount

Thread information:
    Thread ID: 9
    Thread account name: DOMAIN\ServiceAccount
    Is impersonating: False
    Stack trace:
        at System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app)
        at System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers)
        at System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context)
        at System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context)
        at System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)

Custom event details:

Solution

  1. Locate Newtonsoft.json.dll in the GAC (C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Newtonsoft.Json), should be version 4.5.6.14930.
    • Backup Newtonsoft.json.dll to another location
  2. Locate the Newtonsoft.json.dll used by ZervicePoint, you can find it for example in C:\Program Files\Zipper\ZervicePoint\Web\UserWeb\Bin\Newtonsoft.Json.dll, should be version 5.0.6.16206.
  3. Replace the Newtonsoft.json.dll in the GAC with the one used by ZervicePoint
  4. Restart the IIS Worker process
    • Open a command prompt and run IISReset