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.