Business Contact Manager: MSSMLBIZ instance starts automatically even if start mode is set to Manual

Are you an Outlook 2007 with Business Contact Manager user? If you are, you might have experienced that the local SQL Server 2005 Express instance (named MSSMLBIZ) starts by default when your OS starts up. I found this to be quite annoying, because I don’t use BCM all the time. BCM will start the MSSMLBIZ instance if it’s stopped and the user navigates to a view where BCM data is required. That behaviour is completely sufficient and it seems pointless to start MSSMLBIZ at boot time. So, how to handle this issue?

Surprisingly, setting the start mode of MSSMLBIZ to Manual in SQL Server Configuration Manager does not change anything. After looking in the event log I realized that BCM comes with another service that handles SQL Server startup. The service is called Business Contact Manager SQL Server Startup Service (BcmSqlStartupSvc.exe). When you disable the automatic startup of this service, the OS boot time will return to normal and you will only experience a slight delay when you navigate to BCM data in Outlook, because from now on this will be the startup moment for MSSMLBIZ.

Posted in Office, Windows. Tags: , . 2 Comments »

Windows 7/Vista and Reporting Services 2008 – HTTP 404 or no connection

This issue might occur when Reporting Services is using the default port (80 or 443) to run Report Server and Report Manager on your workstation. I’ve reproduced this issue on Windows 7 and Vista, but Windows XP is probably also affected by the issue.

What’s the big deal? You install SSRS on your workstation, everything goes fine, the service starts, but the URLs for Report Server and Report Manager just don’t work (either throwing a HTTP 404 or just refusing to connect). You might also encounter the issue a few days (weeks/months etc.) after the initial installation.

We need to investigate the issue. The SSRS logs will come in handy (their default location is: C:\Program Files\Microsoft SQL Server\MSRS10.[INSTANCE_NAME]\Reporting Services\LogFiles). You should look for something similar to:

rshost!rshost!1120!12/12/2009-22:21:33:: e ERROR: Failed to register url=http://+:80/ReportServer/ for endpoint 2, error=20.
rshost!rshost!1120!12/12/2009-22:21:33:: w WARN: Endpoint 2 is enabled but no url is registered for vdir=/ReportServer, pdir=c:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services\ReportServer.
servicecontroller!DefaultDomain!1200!12/12/2009-22:21:33:: e ERROR: Error creating HTTP endpoint. System.IO.FileLoadException: The process cannot access the file because it is being used by another process. (Exception from HRESULT: 0x80070020)
   at Microsoft.ReportingServices.HostingInterfaces.IRsUnmanagedCallback.CreateHttpEndpoint(RsAppDomainType application, String[] urlPrefixes, Int32 cPrefixes, String virtualDirectory, String filePath, Int32 authType, Int32 logonMethod, String authDomain, String authRealm, Boolean authPersist, Boolean enabled)
   at Microsoft.ReportingServices.Library.ServiceAppDomainController.SetWebConfiguration(RunningApplication rsApplication, Boolean enabled, String folder)
rshost!rshost!ca4!12/12/2009-22:21:33:: e ERROR: Failed to register url=http://+:80/Reports/ for endpoint 3, error=20.
rshost!rshost!ca4!12/12/2009-22:21:33:: w WARN: Endpoint 3 is enabled but no url is registered for vdir=/Reports, pdir=c:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services\ReportManager.
servicecontroller!DefaultDomain!1200!12/12/2009-22:21:33:: e ERROR: Error creating HTTP endpoint. System.IO.FileLoadException: The process cannot access the file because it is being used by another process. (Exception from HRESULT: 0x80070020)
   at Microsoft.ReportingServices.HostingInterfaces.IRsUnmanagedCallback.CreateHttpEndpoint(RsAppDomainType application, String[] urlPrefixes, Int32 cPrefixes, String virtualDirectory, String filePath, Int32 authType, Int32 logonMethod, String authDomain, String authRealm, Boolean authPersist, Boolean enabled)
   at Microsoft.ReportingServices.Library.ServiceAppDomainController.SetWebConfiguration(RunningApplication rsApplication, Boolean enabled, String folder)

Changing the port in Reporting Services Configuration Manager to an unused port (like 8080, but that might not be true on your workstation) resolves the issue. So we have another service blocking the default port.

Now we need to find the culprit. A quick netstat will show the PID of the blocking process:

netstat -ano -p tcp
 
Active Connections
 
  Proto  Local Address          Foreign Address             State           PID
  ...
  TCP    0.0.0.0:80             0.0.0.0:0                   LISTENING       5340
  ...

Now we can find out more about the offending process (PID 5340 in this example). Task Manager can be used (after checking PID on View->Select Columns) or we can use tasklist here:

tasklist /FI "PID eq 5340"
 
Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
Skype.exe                     5340 Console                    1     66 488 K

Surprised? Well, I didn’t expect Skype here. But under Tools->Options->Advanced->Connection you can find the source of our problem:

This is the problematic option that blocks SSRS from creating HTTP endpoints

Clearing this option and restarting SSRS also resolves the whole issue. Even if it’s not Skype, the idea remains the same – close the offending process, change the port it’s listening on or change the ports for Report Server and Report Manager.