After Microsoft announced their latest enhancements to the Windows Azure service catalog in the beginning of June (although still in a preview phase), I wanted to test the Azure Virtual Machines for running a Microsoft Dynamics CRM 2011 server instance in the Microsoft hosted cloud. Since we now have an excellent step-by-step tutorial available from Shan McArthur / AdxStudio, it was a breeze to get going with the installation process. You should also check out the Gold Coast blog by @devkeydet for some really helpful articles, such as Building a CRM 2011 dev box using a Windows Azure Virtual Machine. With high quality community content like this available, who wouldn’t want to build a CRM server in Azure?
Hopefully I’ll get a chance to write some of my own experiences on working with Windows Azure in the future, but the first issue I ran into is actually more related to SQL Server in general.
Side-by-side was not on my side
In addition to Azure, I also wanted to utilize the latest SQL Server 2012 version to investigate what new reporting capaibilities it might offer compared to the trusted old SQL 2008 R2. The SQL 2012 installation went through without any errors but after I tried to launch the CRM installation I discovered that Reporting Services was not running. In the application log I had the following errors:
Service cannot be started. System.IO.FileLoadException: Could not load file or assembly ‘ReportingServicesNativeServer, Version=22.214.171.124, Culture=neutral, PublicKeyToken=89845dcd8080cc91’ or one of its dependencies. The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail. (Exception from HRESULT: 0x800736B1)
File name: ‘ReportingServicesNativeServer, Version=126.96.36.199, Culture=neutral, PublicKeyToken=89845dcd8080cc91’ —> System.Runtime.InteropServices.COMException (0x800736B1): The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail. (Exception from HRESULT: 0x800736B1)
at Microsoft.ReportingServices.Library.ReportService.OnStart(String args)
Activation context generation failed for “F:\SQL\Microsoft SQL Server\MSRS11.MSSQLSERVER\Reporting Services\ReportServer\bin\ReportingServicesNativeServer.dll”.Error in manifest or policy file “C:\Windows\WinSxS\manifests\amd64_microsoft.vc80.atl_1fc8b3b9a1e18e3b_8.0.50727.4053_none_8a1a02152edb659b.manifest” on line 0. Invalid Xml syntax.
After a bit of googling I landed on a blog post on SQL Server VC++ Installation voes, which seemed to describe the exact same issue I was facing. I tested the sxstrace tool and the System File Checker (SFC) referenced in the post, reproducing the same results as the author was getting. It turned out that this side-by-side (SXS) error was caused by a manifest file that was empty. A similar discussion was also found in the Windows Azure Virtual Machines for SQL Server MSDN forum, so figured I must be on to something.
Just before I was about to start modifying the manifest file properties and copy pasting the content there, I noticed that there was one detail which stopped me from proceeding: both of the posts were referencing an x86 processor architecture file (x86_microsoft.vc80.atl_1fc8b3b9a1e18e3b_8.0.50727.4053_none_d1c738ec43578ea1.manifest), whereas my error was related to the amd64 version (amd64_microsoft.vc80.atl_1fc8b3b9a1e18e3b_8.0.50727.4053_none_8a1a02152edb659b.manifest). So, I needed to hunt down the correct manifest file content for the 64-bit version with the proper hash value, but unfortunately this was where my googling came up short.
After being a bit more creative with my search terms, I discovered the Microsoft knowledge base article 2688946: FIX: Error message when you install SQL Server 2012: “The identities of the manifests are identical but their contents are different”. The article also said that the fix for this issue was released in Cumulative Update 1 for SQL Server 2012. So, off to KB 2679368 then to request a download link for the CU1 file. Looks like MS doesn’t want just anyone installing these, so they make you fill in a form with your email address + captcha in order to get the file, but luckily that’s all there was to the process.
I was a bit puzzled by the fact that the CU1 installer said “This installation provides updates for the Community Technology Preview (August CTP)“, but apparently it’s fully valid for the RTM version, too. I guess the components in SQL tend to be less strict about versions, since the SQL Server 2012 Reporting Services Configuration Tool still has “SQL Server 2008” in the process description… Anyway, after applying CU1 I was able to start the Reporting Services service and proceed with the CRM installation. Success!
The lesson: there’s always an update hiding somewhere
When building your development or demo environment, it’s important to be aware of the fact that what you get from the MSDN subscriber downloads site is mostly RTM bits. Especially when going for SQL Sever 2012 as the database for Dynamics CRM 2011, you should not use these files at all, because the installation won’t work. Just grab the product key from MSDN, but go to Microsoft Download Center here (direct download link to CRM 2011 Server) to get the new version that includes Update Rollup 6. Otherwise you won’t be able to configure the Reporting Extensions and will get the error “Unable to validate SQL Server Reporting Services Report Server installation. Please check that it is correctly installed on the local machine.” See this thread on the CRM Forum for some more info.
Shortly after completing the CRM installation I discovered that there is in fact already a Cumulative Update 2 for SQL Server 2012, too. Wow, things move fast nowadays! Didn’t SQL 2012 get released just recently? Well, it turns out that actually the first cumulative update to SQL Server 2012 was released only 9 days after the general availability (GA) of SQL 2012. Let’s have a look at the Incremental Servicing Model of SQL Server in a bit more detail to understand what’s going on.
It looks like also the SQL Server team have adopted a fairly agile release policy that mirrors the Dynamics CRM release roadmap concepts to some extent. What they call a Cumulative Update (CU) seems to correspond to the Update Rollup (UR) in the Dynamics CRM lingo, meaning they are both collections of hotfixes, released on a bi-monthly target schedule. However, unlike CRM Update Rollups that are nowadays delivered through Windows Update / Microsoft Update, the SQL CU’s won’t be delivered through this mechanism, because those updates need to fall into the General Distribution Release (GDR) category as defined by Microsoft (you didn’t think it was going to be that simple, now did you?). So, that’s why after installing SQL 2012 + CRM 2011 on a new Windows server you’ll automatically get Update Rollup 8 for CRM, but no updates for SQL. If you need the latest hotfixes, you should acquired the Cumulative Update package through the KB pages.
Finally, yes, there will also be a Service Pack 1 for SQL Server 2012 released eventually, as many people will refrain from deploying a production database on a new version until this traditional MS software milestone has been reached. Whether the SP1 for SQL 2012 will be a similar release as the Q2 2012 Service Update for Dynamics CRM (to be released sometime in Q3) I’m not so sure, since in the world of CRM these Service Updates contain significant new functionality in addition to the previously released hotfixes. The latest information on SQL updates can be found from the SQL Release Serivces Blog. Note that there are no Service Packs available for Dynamics CRM, so the terminology used in describing the release policies will likely remain different from other Microsoft products like SQL or Windows. For a more detailed description of the CRM update terminology and delivery mechanisms, please see my previous post on the topic.