The server was a brand new 2012R2 machine. The AD forest was brand new and composed entirely of 2012R2 Domain Controllers. Due to an issue they had they completely deleted the entire environment and recreated it. All servers were installed from the 2012R2 ISO and all Windows Updates applied. The following problem occurred in both the original environment and the rebuilt one.
After installation the Application Eventlog was full of event 1310 from source asp.net 4.0.30319.0. This was logged every few seconds. EAC/OWA was not accessible and simply returned the "Something Went Wrong :-(" error message. The event was logged for each of the virtual directories, e.g. OWA/Autodiscover/EWS etc. Details of the event related to "The file specified could not be found", each referring to a different module that was referenced in the web.config file related to each virtual directory, e.g. AntiXSS.
I spent over a day investigating, including the following and much,much more:
- The DLLs referenced did in fact exist
- Permissions on the file system matched another working system
- ASP.Net was installed correctly
- All Application Pools were configured correctly
- IIS was working
I compared the web.config for each of the Virtual Directories with a CU5 server and noticed a big difference. In CU5 at the end of the web.config there is a list of paths detailing where to find each of the DLL files referenced earlier in the web.config file. In CU6 these paths are not present. However, I noticed a reference to c:\program files\microsoft\exchange server\v15\clientaccess\sharedwebconfig.config. This sharedwebconfig.config file did not exist on the two CU6 servers experiencing the problem.
After building yet another CU6 server, which worked correctly, I located the sharedwebconfig.config file. Copying this to the broken servers and executing an IISRESET fixed the issue.
It would seem that MS have moved from repeating the same paths in every web.config to a shared model, reducing duplication of configuration items in multiple files. For some reason, on both occasions, setup did not create this file and hence IIS didn't know where to load the modules from.
These are the lines in the web.config that references the shared web config file:
<linkedConfiguration href="file://C:\Program Files\Microsoft\Exchange Server\V15\ClientAccess\SharedWebConfig.config" />
And here an extract of the contents of that shared file. I can't post the whole file due to the size.
<assemblyIdentity name="AntiXssLibrary" publicKeyToken="d127efab8a9c114f" culture="neutral" />
<codeBase version="18.104.22.168" href="file:///C:\Program Files\Microsoft\Exchange Server\V15\bin\AntiXssLibrary.dll" />
<assemblyIdentity name="AsyncDnsManaged" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<codeBase version="1.1.5274.28150" href="file:///C:\Program Files\Microsoft\Exchange Server\V15\bin\AsyncDnsManaged.dll" />