Say Goodbye to IIS, Say Hello to HTTP.SYS!
With all the issues IIS caused in the previous versions of SSRS, specially to configure it to interact with other applications (such as SharePoint) hosted in IIS , in SSRS 2008, Microsoft made a major architectural shift to move toward to a *real* Single Service Architecture that would eliminate dependency on IIS.
You no longer require having IIS installed on the RS box and, even nicer; you don’t have to install SQL on that RS box! Well, let me rephrase what I just said above. SSRS doesn’t require IIS to function, but this only applies when you configure it in native mode. In integrated mode and since you have to join the SSRS machine to the farm, you have to install SharePoint WFE components on RS machine and this means dependency on IIS, but again that’s the dependency SharePoint has on IIS , not SSRS!
This shifting architectural decision took care of two very serious issues bugging customers constantly:
- SSRS trying to take over port 80 which was in control of SharePoint and subsequently throwing an unrelated exception that tipped many people over the edge when configuring SSRS in integrated mode.
- Hosting IIS on the database server and potentially exposing security threats.
In the previous version of SSRS, there were two services (Web Service and Windows Service) that worked hand-to-hand and collaborated (Collab sounds familiar eh? 😉 ) to execute the reports, but in the new version they rearchitected and abstracted everything to a SINGLE service – SSRS Windows service. Obviously, WMI APIs are still available for configuration tools, third party apps and your enterprise deployment scripting fun, but Windows service is just serving as the main entry into all of the background and foreground services SSRS offers!
Well, finding a suitable host to support the shifting decision was not that difficult. They just shoved everything into the common architectural layer as with SQL Server uses, but the idea of hosting ASP.NET inside SQL CLR inside SSRS service process was extremely intuitive. I was like WOW when I first saw it (my jar hitting the floor kind a) – SSRS team literally came up with their own mini IIS with many similar characteristics. Wait! It doesn’t mean that you have another web server hosted in SQL CLR. It’s just there for them to serve incoming HTTP requests using SQL Server networking interface and again mainly for departing from IIS land.
Why am I using the word mini IIS here is because, first SSRS uses the same underlying network layer as IIS 6 and higher uses, built right into the operating system– a.k.a HTTP.SYS layer. Secondly, SSRS 2008 has all the IIS components it requires to function without having any dependencies on IIS. Moving away from IIS, called for two major actions to be taken care of by SSRS team:
- Disabling some of the functionalities IIS handles which there are no equivalent in SSRS 2008 , such as anonymous, client certificate and ISAPI crap. (I have allergy to ISAPI – sorry!)
- Enabling some of the functionalities that IIS used to handle for SSRS before. Things such as ability to add virtual directory, port, SSL certificate, W3C compliant logging mechanism and so on so forth.
A lot of new IIS-Like settings are configured by Reporting Service Configuration Manager (picture below) , a tool that is significantly changed since the previous version. In this tool, Web Service URL tab is a just a new (and a very important) tab that offers creating Virtual directory , assigning ports and applying SSL certificates, but there is this important drop down that has the same behavior as IIS: IP Address.
As you can tell, the recommended option is All Assigned. This means that any HTTP requests that come in the specified port (TCP Port text box) and uses the specified URL reservation and virtual directory name (Virtual Directory text box) should be served by Reporting Services. So if you see something like http://+:80/ReportServer , the wildcard sign (+) indicates that you are using port 80 and All assigned when configuring the URL reservations settings for your report server.
On the other hand All Unassigned indicates that if there are no other listeners (services) registered for a specific URL reservation , on this port , for this virtual directory then give me (not me , I mean SSRS 🙂 ) the request. As you can see it fully supports IPv4 and wild card IPv6 addresses and exactly like IIS you can load balance the incoming requests if your server happens to be using more than one NIC cards. Very nice, eh?
Let’s have some fun here:
Setup a SharePoint Web application on port 80 (let’s say http://mossdev) and then in configuration tool choose the same port for SSRS – for example http://mossdev/reportserver , with All Assigned option selected. If you note you can share the port with IIS hosted Web app. Then create a team subsite in SharePoint called ReportServer (http://mossdev/reportserver) – Once the proviosning of the site is finished, you will be redirected to SSRS – I laughed 🙂 !Change the SSRS virtual directory name or port number, issue is fixed. As you can see, understanding URL reservation is extremely important.
If you would like to see all of the URL reservations currently in place on your server , just be aware that HTTP.SYS comes with a set of command line utils. For example, by typing “netsh http show urlacl” command , you would get all of the URL reservations echoed for ya. If you note in this particular case I am using a different port (Heck!It can even be a different URL!) for Report Manager and Report Sever.
If any one of you understand what those security descriptor strings (SDDL) mean , please drop me a line and educate me as well 😉
These URL reservation must mach the URL Resevation node in the RS configuration file as shown below, otherwise when you start the Windows service , there are going to be some inconsistencies in services SSRS offer:
Great post, Reza! Thanks for sharing this!
Thanks Muhanand! more to come ….
Just a note — afaik the netsh http commands only work on Windows 2008, and are unavailable on earlier versions.
Jay,
Thanks for letting me know. I have switched my entire dev enviro to Win2k8 since it was RTMed , so I didn’t give it a try on any other Winodws server platofrms.
Looks like ISAPI is foreign for you. I used extensively, belive me it is really powerfull
Hi Reza,
I’m wondering if there’s a way to run SSRS 2008, or more specifically, configure the URL to eliminate the “/Reports” part of the URL… i.e. http:///Reports/Pages/Folder.aspx (is the Report Manager Home). Using the Config Manager, it forces a Virtual Directory. I just switched our company’s primary reports site from an old server running SSRS 2005, where we had configured it to not have the “/Reports” in the URL, to a new server (which took the old server’s name) running SSRS 2008 and I was trying to keep all my users who had IE favorites set up from having to change the URL.
At this point we’ve already switched everyone over, but I’m wondering if there was a way I could have saved all the trouble. Thanks!!
windows XP and 2003 use ‘httpcfg’ instead of ‘netsh http’, which can be downloaded as part of the “Windows XP Support Tools” / “Windows Server 2003 Support Tools”.
The syntax is “httpcfg.exe query urlacl”.
http://forums.iis.net/t/1149493.aspx
@Stogie
It’s been over a year since your post. I am replying for the sake of answering a question, regardless of the delay.
You could write a small web server service that uses http.sys, which forwards all requests to the SSRS virtual directory.
Very nice article and a great intro for SSRS 2008!
I’ve installed SSRS2012 syde-by-side to SSRS2008R2.
Under SSRS2008R2 I use rs.exe to start report with store in excel.
Due to 256 column limitation i have try to use SSRS2012.
I got next error:
—–Try to start rs.FireEvent(TimedSubscription)
!!!!!!!!!!!!!!!!!Got an Exception System.Web.Services.Protocols.SoapException: T
he permissions granted to user ‘box\myAccount’ are insufficient for pe
rforming this operation. —> Microsoft.ReportingServices.Diagnostics.Utilities.
AccessDeniedException: The permissions granted to user ‘box\myAccount’
are insufficient for performing this operation.
at Microsoft.ReportingServices.Library.ReportingService2005Impl.FireEvent(Str
ing EventType, String EventData, Guid batchId)
at Microsoft.ReportingServices.WebServer.ReportingService2005.FireEvent(Strin
g EventType, String EventData)
the match information in log:
library!ReportServer_0-2!1ed8!11/01/2012-13:54:51:: i INFO: Call to FireEventAction(TimedSubscription, , ).
library!ReportServer_0-2!1ed8!11/01/2012-13:54:51:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.AccessDeniedException: , Microsoft.ReportingServices.Diagnostics.Utilities.AccessDeniedException: The permissions granted to user ‘WIN-5PRKSLBIC68\soften3’ are insufficient for performing this operation.;
All security settings completed – user, folder – match to SSRS2008
it is possible that issue in IIS authorization – but there is HTTP.SYS!!!!!!
What way i can fix this issue?
Thanks
Say goodbye to IIS say hello to billions of broken web services that try to bind to port 80.