<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>John Gallardo's Weblog : SQL Server</title><link>http://blogs.msdn.com/jgalla/archive/category/10339.aspx</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Hiding parameter area when viewing reports</title><link>http://blogs.msdn.com/jgalla/archive/2009/03/23/hiding-parameter-area-when-viewing-reports.aspx</link><pubDate>Tue, 24 Mar 2009 00:19:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9502604</guid><dc:creator>jgalla</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jgalla/comments/9502604.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jgalla/commentrss.aspx?PostID=9502604</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jgalla/WindowsLiveWriter/Hidingparameterareawhenviewingreports_C939/image_2.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="344" alt="image" src="http://blogs.msdn.com/blogfiles/jgalla/WindowsLiveWriter/Hidingparameterareawhenviewingreports_C939/image_thumb.png" width="581" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;When rendering reports, oftentimes the application would like to minimize as much of the non-report area of the viewer control as possible.&amp;#160; This is easily accomplished when rendering the report through the built-in report viewer control hosted in the ReportServer web site (http://servername/reportserver).&amp;#160; &lt;/p&gt;  &lt;p&gt;There are two parameters which control the rendering of the viewer control area:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;rc:Parameters&lt;/li&gt;    &lt;li&gt;rc:Toolbar&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;rc:Parameters can have 3 values:&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="400" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="200"&gt;On&lt;/td&gt;        &lt;td valign="top" width="200"&gt;Displays the parameter area as in the screenshot above.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Off&lt;/td&gt;        &lt;td valign="top" width="200"&gt;Completely hides the parameter area.&amp;#160; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Collapsed&lt;/td&gt;        &lt;td valign="top" width="200"&gt;Renders the parameter area initially minimized, so a user can expand it if they need to view/change the parameters for a report.&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Here is an example URL which demonstrates rendering a report with rc:Parameters=Collapsed:&lt;/p&gt;  &lt;p&gt;https://servername/ReportServer?%2fSamples%2fSQL+2008+Samples%2fAdventureWorks2008+Sample+Reports%2fEmployee+Sales+Summary+2008&amp;amp;rs:Command=Render&amp;amp;rc:Parameters=Collapsed&lt;/p&gt;  &lt;p&gt;The other way of hiding the parameter area is to render the report with rc:Toolbar=false.&amp;#160; For many applications though, there are side-effects of this approach which I don’t think are desireable.&amp;#160; These are:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;It disables the automatic ping-mechanism to keep the user’s report session alive.&amp;#160; This can lead to rsExecutionNotFound errors if the user leaves the page inactive for several minutes.&lt;/li&gt;    &lt;li&gt;It also removes the navigation (next page, find, etc…) UI.&lt;/li&gt;    &lt;li&gt;By default, it will cause every page of the report to be returned to the client.&amp;#160; For long reports, this is typically not desireable.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;So if you are in a situation where you want to minimize the amount of extraneous UI initially presented to the user, while still allowing flexibility in having the end user change the parameter values, consider using rc:Collapsed=true when rendering the report.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9502604" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jgalla/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/SSRS/default.aspx">SSRS</category></item><item><title>Hiding Rendering Extensions</title><link>http://blogs.msdn.com/jgalla/archive/2009/02/05/hiding-rendering-extensions.aspx</link><pubDate>Thu, 05 Feb 2009 21:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9399392</guid><dc:creator>jgalla</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jgalla/comments/9399392.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jgalla/commentrss.aspx?PostID=9399392</wfw:commentRss><description>&lt;p&gt;This is documented behavior, but we see lots of questions on it.&amp;#160; A good mechanism for preventing users from accidently exporting reports to a format that you don’t want (for example, you might know that the report doesn’t render quite right in a particular format) is to mark the extension as “invisible” in the Report Server config file.&amp;#160; &lt;/p&gt;  &lt;p&gt;This MSDN documentation explains how to configure a rendering extension:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms154516.aspx" href="http://msdn.microsoft.com/en-us/library/ms154516.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms154516.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The important one here is the Visible attribute:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Visible&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;A value of &lt;strong&gt;false&lt;/strong&gt; indicates that the rendering extension should not be visible in user interfaces. If the attribute is not included, the default value is &lt;strong&gt;true&lt;/strong&gt;.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;By setting this attribute to false for a given extension, it will hide the extension from being visible in the Report Viewer control as well as in the delivery configuration pages.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9399392" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jgalla/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/SSRS/default.aspx">SSRS</category></item><item><title>Scaling out the Viewer Control and rsExecutionNotFound</title><link>http://blogs.msdn.com/jgalla/archive/2008/08/08/scaling-out-the-viewer-control-and-rsexecutionnotfound.aspx</link><pubDate>Fri, 08 Aug 2008 19:26:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8843777</guid><dc:creator>jgalla</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jgalla/comments/8843777.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jgalla/commentrss.aspx?PostID=8843777</wfw:commentRss><description>&lt;p&gt;One of the criteria that the report server uses to match the provided SessionID with a stored report is that the SessionID has to be provided by the same user that initially created the session.&amp;nbsp; Usually, this is the case.&amp;nbsp; Someone browses the report in IE, they click around to paginate or expand toggles, and things just work because they are the same user they were when they initially ran the report.&lt;/p&gt; &lt;p&gt;Sometimes though, things go wrong.&lt;/p&gt; &lt;p&gt;One way that this can happen is when you are hosting the ASP.Net Viewer Control in your own application and you are not impersonating the incoming user all the way to the backend report server.&amp;nbsp; This is a totally supported configuration, however there is a little caveat that you have to keep in mind.&amp;nbsp; Since the report server requires that the user names match across session retrievals, you have to ensure that the viewer control is impersonating the same user.&amp;nbsp; Sounds easy, right?&amp;nbsp; Well not so fast if you are using a machine specific account for your application pool which is hosting the viewer control.&amp;nbsp; The specific topology that can get you into trouble is something like the following:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jgalla/WindowsLiveWriter/ScalingouttheViewerControlandrsExecution_8052/image%7B0%7D%5B12%5D.png" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="232" src="http://blogs.msdn.com/blogfiles/jgalla/WindowsLiveWriter/ScalingouttheViewerControlandrsExecution_8052/image%7B0%7D_thumb%5B10%5D.png" width="405" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;In this scenario you have the following:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Client machines accessing multiple web frontends hosting the report viewer control via a load balancer.&lt;/li&gt; &lt;li&gt;The web frontend machines are using a machine-specific account to communicate with the report server (for example they are using the builtin NETWORK SERVICE account).&lt;/li&gt; &lt;li&gt;You are &lt;strong&gt;not &lt;/strong&gt;impersonating the incoming user in the viewer control when accessing the backend report server.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The sequence of operations that can lead to trouble are:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;The initial request from ClientA is routed to MachineA.&amp;nbsp; &lt;/li&gt; &lt;li&gt;The viewer control in MachineA instantiates a session with the report server.&amp;nbsp; Since the $MachineA credentials are sent, the session is associated with this user.&amp;nbsp; Keep in mind at this point the report server actually has no idea that there is some other logical user beyond the web frontend that is actually making the request.&lt;/li&gt; &lt;li&gt;The user views the first page of the report, and navigates to the second page.&lt;/li&gt; &lt;li&gt;The request for the second page is actually routed to MachineB by the load balancer.&lt;/li&gt; &lt;li&gt;The viewer control in MachineB attempts to load the user session, however this fails since the request to the report server is actually from $MachineB user and not the original $MachineA user.&amp;nbsp; The report server generates an rsExecutionNotFound error and returns that, resulting in an error being displayed to the user.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;There are a couple of ways to address this problem:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Architect your application such that you can flow credentials from the client all the way to the report server.&amp;nbsp; -- Or --&lt;/li&gt; &lt;li&gt;Ensure that your web frontend nodes can impersonate the same user when accessing the report server regardless of which machine the request is routed to (so use something like domain credentials to access the report server).&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8843777" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jgalla/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/SSRS/default.aspx">SSRS</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/rsExecutionNotFound/default.aspx">rsExecutionNotFound</category></item><item><title>Scaling Up: SSRS 2008 vs. SSRS 2005 (spoiler: 2008 wins)</title><link>http://blogs.msdn.com/jgalla/archive/2008/07/10/scaling-up-ssrs-2008-vs-ssrs-2005-spoiler-2008-wins.aspx</link><pubDate>Thu, 10 Jul 2008 18:59:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8717463</guid><dc:creator>jgalla</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jgalla/comments/8717463.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jgalla/commentrss.aspx?PostID=8717463</wfw:commentRss><description>&lt;p&gt;The &lt;a href="http://sqlcat.com/"&gt;SQL Customer Advisory Team&lt;/a&gt;&amp;nbsp;just released a Technical Note comparing SQL Server Reporting Services 2008 vs. 2005 from a scale-up perspective.&amp;nbsp; Its good to see that a lot of the work that we did over this release focusing on performance and scalability (across the board, from the core server/processing infrastructure to specific rendering extensions) has really paid off.&amp;nbsp; You can read the entire article here:&lt;/p&gt; &lt;p&gt;&lt;a title="http://sqlcat.com/technicalnotes/archive/2008/07/09/scaling-up-reporting-services-2008-vs-reporting-services-2005-lessons-learned.aspx" href="http://sqlcat.com/technicalnotes/archive/2008/07/09/scaling-up-reporting-services-2008-vs-reporting-services-2005-lessons-learned.aspx"&gt;http://sqlcat.com/technicalnotes/archive/2008/07/09/scaling-up-reporting-services-2008-vs-reporting-services-2005-lessons-learned.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Quoting from the summary (emphasis is mine):&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Reporting Services 2008 was &lt;strong&gt;able to respond to 3–4 times the total number of users and their requests on the same hardware&lt;/strong&gt; without HTTP 503 Service Is Unavailable errors compared with Reporting Services 2005, regardless of the type of renderer. In stark contrast, Reporting Services 2005 generated excessive HTTP 503 Service Is Unavailable errors as the number of users and their requests increased, regardless of the report renderer.  &lt;p&gt;Our tests clearly show that &lt;strong&gt;the new memory management architecture of the report server enables Reporting Services 2008 to scale very well&lt;/strong&gt;, particularly on the new four-processor, quad-core processors. With our test workload, Reporting Services 2008 consistently outperformed SQL Server 2005 with the PDF and XLS renderers on the four-processor, quad-core hardware platform (16 cores) both in terms of response time and in terms of total throughput. Furthermore, with these renderers on this hardware platform, Reporting Services dramatically outperformed other hardware platforms regardless of Reporting Services version, responding to 3–5 times the number of requests than when running on either of the other hardware platforms. As a result, we recommend that you scale up to four-processor, quad-core servers for performance and scale out to a two-node deployment for high availability. Thereafter, as demand for more capacity occurs, add more four-processor, quad-core servers.&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8717463" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jgalla/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/SSRS/default.aspx">SSRS</category></item><item><title>All those temporary files (RSTempFiles)</title><link>http://blogs.msdn.com/jgalla/archive/2008/06/30/all-those-temporary-files-rstempfiles.aspx</link><pubDate>Mon, 30 Jun 2008 21:04:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8672098</guid><dc:creator>jgalla</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jgalla/comments/8672098.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jgalla/commentrss.aspx?PostID=8672098</wfw:commentRss><description>&lt;p&gt;When you install Reporting Services, we create a few directories:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;LogFiles&lt;/li&gt; &lt;li&gt;ReportManager&lt;/li&gt; &lt;li&gt;ReportServer&lt;/li&gt; &lt;li&gt;RSTempFiles&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Most of these are fairly self explanatory.&amp;nbsp; LogFiles... well we put our log files in there.&amp;nbsp; ReportManager contains the Report Manager application (what you get when you browse to &lt;a href="http://&amp;lt;server&amp;gt;/reports"&gt;http://&amp;lt;server&amp;gt;/reports&lt;/a&gt;) and ReportServer contains the Report Server application which is the proper 'Report Server' which implements our Web Service and HTTP handler endpoints... it is what you get when you go to &lt;a href="http://&amp;lt;server&amp;gt;/reportserver"&gt;http://&amp;lt;server&amp;gt;/reportserver&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;So what about that RSTempFiles thing?&amp;nbsp; Well it contains files that are temporary of course!&lt;/p&gt; &lt;p&gt;These temporary files can be broken down into a few categories:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Temporary Report Snapshot files.&lt;/li&gt; &lt;ul&gt; &lt;li&gt;These files are only created if you have &lt;a href="http://msdn.microsoft.com/en-us/library/ms157273.aspx"&gt;opted into using temporary file storage&lt;/a&gt;&amp;nbsp;(see the WebServiceUseFileShareStorage).&lt;/li&gt; &lt;li&gt;&lt;strong&gt;For RS2000/2005&lt;/strong&gt;, snapshots are more or less completely independent and each is contained in its own directory (identified by a GUID).&amp;nbsp; Each snapshot contains a set of files (internally, they are referred to as "chunks").&amp;nbsp; &lt;/li&gt; &lt;li&gt;&lt;strong&gt;For RS2008&lt;/strong&gt;, snapshots oftentimes contain some shared data.&amp;nbsp; The folder-per-snapshot hierarchy used in RS2000/2005 is replaced by a single directory called "Chunks."&amp;nbsp; Each chunk is a discrete file in this directory.&lt;/li&gt; &lt;li&gt;These files are automatically cleaned up by the Report Server on a time-based interval (same as snapshot data stored in ReportServer and ReportServerTempDB catalog databases).&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Output/Intermediate Streams&lt;/li&gt; &lt;ul&gt; &lt;li&gt;These files are all created directly within the the RSTempFiles directory.&amp;nbsp; There is no way to differentiate between these two sub-categories of files currently.&lt;/li&gt; &lt;li&gt;Output streams - these streams are generated as output from the renderers.&amp;nbsp; The server spools them to disk if they grow large enough.&amp;nbsp; RS has an output cache that may cause these streams to survive beyond the lifetime of the request so that subsequent accesses can be served directly from the cache.&amp;nbsp; &lt;/li&gt; &lt;li&gt;Intermediate files - these files contain results of intermediate calculations during report processing and rendering.&amp;nbsp; Generally, these contain data which is never returned to the client, but rather holds temporary results in order to relieve memory pressure.&amp;nbsp; These files are cleaned up when the&amp;nbsp;request completes (no caching across requests).&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Conversion files&lt;/li&gt; &lt;ul&gt; &lt;li&gt;These are stored under a folder named _Conversion.&amp;nbsp; &lt;/li&gt; &lt;li&gt;Our compression format for snapshots changed between RS2000 and RS2005.&amp;nbsp; This folder would contain temporary files supporting the on-demand one-time upgrade of these persisted snapshots.&amp;nbsp; Unless you are upgrading from an RS2000 instance, you should never see this directory or files created.&amp;nbsp; &lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Shadow Copy Files&lt;/li&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;This is only for RS2008.&lt;/strong&gt;&lt;/li&gt; &lt;li&gt;After the CTP6 release of RS2008, we enabled shadow copy for our ASP.Net worker domains under the new hosting model.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8672098" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jgalla/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/SSRS/default.aspx">SSRS</category></item><item><title>Where has John been?</title><link>http://blogs.msdn.com/jgalla/archive/2008/03/11/where-has-john-been.aspx</link><pubDate>Tue, 11 Mar 2008 20:35:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8156067</guid><dc:creator>jgalla</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jgalla/comments/8156067.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jgalla/commentrss.aspx?PostID=8156067</wfw:commentRss><description>&lt;p&gt;Ok, it has been a little while.&amp;nbsp; But I have been &lt;a href="http://sjuptq.bay.livefilestore.com/y1pxstORRmEScKpPOTgKFYW0XmKcDMytVjHQo2jCwpoprzO0VHRuI1fgCbwN7rY-w5P6lJv2qjRSkpOd2fBM5dLI95mw6Cq1rSQ?PARTNER=WRITER" target="_blank"&gt;pretty&lt;/a&gt; &lt;a href="http://ffihwg.bay.livefilestore.com/y1puBTiCHvEa1SQwWEBq_i53uG9lJVv8qG60KBwBSjedljFL3b1_zG9f-qHSaB_yw-_P6aYte0koWmgc9Ra116TPw"&gt;busy&lt;/a&gt; &lt;a href="http://4d1ftw.bay.livefilestore.com/y1puBTiCHvEa1TRe7YiYPlkdAu_m_PQzeoBNnzGkTLwrQLLU1jk5mDorW59kQD5MFVVhWHY1V5ereR5cGZ3I8JiPQ"&gt;lately&lt;/a&gt;.&amp;nbsp; His name is Christopher.&lt;/p&gt; &lt;p&gt;We have also been pretty busy locking down Katmai to get CTP6 (aka known as the "February CTP") out the door and working bugs.&amp;nbsp; I recommend that people head over towards the &lt;a href="http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=1624&amp;amp;SiteID=1"&gt;"Katmai" forum on MSDN for Reporting Services&lt;/a&gt; if you have any questions.&amp;nbsp; There are lots of people there willing to answer questions and otherwise help out.&lt;/p&gt; &lt;p&gt;So what now?&amp;nbsp; I owe a part two post on some of the memory management stuff we are introducing in Reporting Services 2008.&amp;nbsp; I'm getting all of the info put together now, and the post should be up shortly.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8156067" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jgalla/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/Personal/default.aspx">Personal</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/SSRS/default.aspx">SSRS</category></item><item><title>SQL Server 2008 (Katmai) and Reporting Services</title><link>http://blogs.msdn.com/jgalla/archive/2007/06/04/sql-server-2008-quot-katmai-quot-amp-reporting-services.aspx</link><pubDate>Mon, 04 Jun 2007 23:59:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3085908</guid><dc:creator>jgalla</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jgalla/comments/3085908.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jgalla/commentrss.aspx?PostID=3085908</wfw:commentRss><description>&lt;p&gt;Today the first public release of SQL Server 2008 is shipping.&amp;nbsp; Of course, Reporting Services is still there in the box.&amp;nbsp; You can find general information about the release here:&lt;/p&gt; &lt;p&gt;&lt;a title="https://connect.microsoft.com/SQLServer/content/content.aspx?ContentID=5395&amp;amp;wa=wsignin1.0" href="https://connect.microsoft.com/SQLServer/content/content.aspx?ContentID=5395&amp;amp;wa=wsignin1.0"&gt;https://connect.microsoft.com/SQLServer/content/content.aspx?ContentID=5395&amp;amp;wa=wsignin1.0&lt;/a&gt;&lt;/p&gt; &lt;p&gt;There are also some &lt;a href="http://forums.microsoft.com/MSDN/default.aspx?ForumGroupID=428&amp;amp;SiteID=1"&gt;Katmai specific MSDN forums&lt;/a&gt;, and a &lt;a href="http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=1624&amp;amp;SiteID=1"&gt;Katmai Reporting Services MSDN forum&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3085908" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jgalla/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/SSRS/default.aspx">SSRS</category></item><item><title>Diagnosing Reporting Services Issues</title><link>http://blogs.msdn.com/jgalla/archive/2007/03/29/diagnosing-reporting-services-issues.aspx</link><pubDate>Thu, 29 Mar 2007 19:36:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1989453</guid><dc:creator>jgalla</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jgalla/comments/1989453.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jgalla/commentrss.aspx?PostID=1989453</wfw:commentRss><description>&lt;p&gt;I was poking around some other SSRS blogs from folks here on the product team, and I found &lt;a href="http://blogs.msdn.com/lukaszp/archive/2007/01/31/how-to-diagnose-issues-when-running-reports-in-the-report-server.aspx" target="_blank"&gt;this post from Lukasz about troubleshooting Reporting Services&lt;/a&gt;.&amp;nbsp; It is a great overview of some of the guidance we have given in the form of whitepapers, KB artciles, and a bunch of other sources.&amp;nbsp; I highly recommend you give it a read and bookmark it so you can use it is your "playbook" when running into problems.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1989453" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jgalla/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/SSRS/default.aspx">SSRS</category></item><item><title>ReportServerTempDB IO Saturation</title><link>http://blogs.msdn.com/jgalla/archive/2007/03/21/reportservertempdb-io-saturation.aspx</link><pubDate>Wed, 21 Mar 2007 21:09:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1926994</guid><dc:creator>jgalla</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jgalla/comments/1926994.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jgalla/commentrss.aspx?PostID=1926994</wfw:commentRss><description>&lt;p&gt;Reporting Services uses a temporary database for storage of objects which are, well, &lt;em&gt;temporary&lt;/em&gt;.&amp;nbsp; For example, report snapshots which are associated with a particular user session as the result of a live execution.&amp;nbsp; Cached report snapshots are also stored here because they begin life as a result of a live report execution.&amp;nbsp; This means that in systems where there are a lot of live report executions happening, we are churning through a lot of data in the ReportServerTempDB.&amp;nbsp; As your system scales out or up, you will undoubtedly experience&amp;nbsp;a problem where you will begin to saturate the IO subsystem hosting the ReportServerTempDB.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Do I have an IO throughput issue?&lt;/strong&gt;&amp;nbsp; &lt;/p&gt; &lt;p&gt;There are lots of really great articles written about this topic, but&amp;nbsp;in general there are a couple of things which I look at:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Perfmon counters for Physical Disk Usage:  &lt;ul&gt; &lt;li&gt;Avg. Disk Sec/Read  &lt;li&gt;Avg. Disk Sec/Write&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Check SQL Server&amp;nbsp;Wait types  &lt;ul&gt; &lt;li&gt;sys.dm_os_wait_stats  &lt;li&gt;Look for high counts of wait stats like IO_COMPLETION, ASYNC_IO_COMPLETION, and the PAGELATCH_* class of waits&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Ideally, you want to see Avg Disk Sec/Read or Write to be &amp;lt; 10ms.&amp;nbsp;If you start seeing these counters creep over 50ms, then you are probably getting into a situation where the disk is not keeping up with the incoming rate of IO requests and this is causing waits.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;So how do I deal with it?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The answer is pretty straightforward.&amp;nbsp; You start adding more disks to handle the IO load on the ReportServerTempDB.&amp;nbsp; Doing this is actually pretty easy.&amp;nbsp; From within Management Studio, find the ReportServerTempDB database in the Object Explorer.&amp;nbsp; Right click and go to properties.&amp;nbsp; From the tabs on the left side of the Database Properties dialog, you will see a "Files" section, go to that guy and start adding files.&amp;nbsp; Of course, you will want to spread the files across multiple disks if you are trying to increase IO performance.&amp;nbsp; Additionally, I would recommend sizing the files to an appropriate value rather than relying on autogrowth since autogrowth can cause performance issues when SQL Server actually has to grow the files.&amp;nbsp; The exact value will be a function of how much data is incoming.&amp;nbsp; An important fact to keep in mind though is that the ReportServerTempDB database should automatically remove "stale" data as user sessions and cached reports expire, so the data shouldn't in general continuously grow.&lt;/p&gt; &lt;p&gt;Once you have created the additional data files, SQL Server will automatically begin to load balance IO operations across the various files, so there shouldn't be anything else you have to do.&amp;nbsp; Nice!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1926994" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jgalla/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/SSRS/default.aspx">SSRS</category></item><item><title>Aggregating rsExecutionNotFound Posts</title><link>http://blogs.msdn.com/jgalla/archive/2007/02/01/aggregating-rsexecutionnotfound-posts.aspx</link><pubDate>Thu, 01 Feb 2007 20:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1574381</guid><dc:creator>jgalla</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jgalla/comments/1574381.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jgalla/commentrss.aspx?PostID=1574381</wfw:commentRss><description>&lt;P&gt;The posts about things dealing with rsExecutionNotFound seem to be what people find most interesting these days.&amp;nbsp; In order to aggregate the posts into one place, I will be adding links that deal with this error here. &lt;/P&gt;
&lt;P&gt;Maybe I will add a tag as well...&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A title="Careful when using rc-Toolbar=false" href="http://blogs.msdn.com/jgalla/archive/2007/01/31/careful-when-using-rc-toolbar-false.aspx" mce_href="http://blogs.msdn.com/jgalla/archive/2007/01/31/careful-when-using-rc-toolbar-false.aspx"&gt;Careful when using rc-Toolbar=false&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A title="Session Timeout during execution" href="http://blogs.msdn.com/jgalla/archive/2006/10/11/session-timeout-during-execution.aspx" mce_href="http://blogs.msdn.com/jgalla/archive/2006/10/11/session-timeout-during-execution.aspx"&gt;Session Timeout during execution&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1574381" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jgalla/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/SSRS/default.aspx">SSRS</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/rsExecutionNotFound/default.aspx">rsExecutionNotFound</category></item><item><title>Careful when using rc:Toolbar=false</title><link>http://blogs.msdn.com/jgalla/archive/2007/01/31/careful-when-using-rc-toolbar-false.aspx</link><pubDate>Thu, 01 Feb 2007 02:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1568185</guid><dc:creator>jgalla</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jgalla/comments/1568185.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jgalla/commentrss.aspx?PostID=1568185</wfw:commentRss><description>&lt;P&gt;I'm in the middle of reinstalling Visual Studio, and so I thought I would share an interesting story from a couple of weeks ago.&amp;nbsp; An internal customer (Microsoft-speak for some other team at Microsoft) of Reporting Services was encountering seemingly random rsExecutionNotFound errors when navigating around their application.&amp;nbsp; Of course, things like this are never random and there was a perfectly good explanation.&amp;nbsp; After digging through their application for a little while, and with the help of &lt;A href="http://www.fiddlertool.com/fiddler/" mce_href="http://www.fiddlertool.com/fiddler/"&gt;Fiddler&lt;/A&gt;, I stumbled upon the problem.&amp;nbsp; They were rendering the same report in two different contexts, one of them was specifying rc:Toolbar=false, and the other wasn't.&amp;nbsp; Basically, their call to the report server looked something like this in the two places:&lt;/P&gt;
&lt;P&gt;http://reports/reportserver/?/myreport&amp;amp;rs:Command=Render&amp;amp;rc:Toolbar=false&lt;/P&gt;
&lt;P&gt;http://reports/reportserver/?/myreport&amp;amp;rs:Command=Render&lt;/P&gt;
&lt;P&gt;Now, there is actually a subtle little problem with rendering using rc:Toolbar=false against the ReportServer virtual directory.&amp;nbsp; When this happens in a default installation, the Report Server sends a cookie back to IE to identify the session.&amp;nbsp; This cookie is then passed back to the report server to load up the appropriate snapshot, parameter, data source information, etc to view subsequent pages and images from the report.&amp;nbsp; What would happen is the user would navigate to the page where the report being rendered w/rc:Toolbar=false was sitting, which would give IE the cookie.&amp;nbsp; The user would navigate away from the page, and eventually head to the page where rc:Toolbar=false &lt;STRONG&gt;was not&lt;/STRONG&gt; specified.&amp;nbsp; However, even in this case if the cookie is there, we try to use it to load the user session, which would fail because the session had timed out in the time between the two requests.&amp;nbsp; The user would be greeted with an "Execution Not Found" error message and would have to close and restart IE to get things working again.&lt;/P&gt;
&lt;P&gt;The moral?&amp;nbsp; Don't render against the ReportServer virtual directory using rc:Toolbar=false unless you really know what you are doing, because it is tricky to get right.&amp;nbsp; If you want to render using the ReportServer virutal directory (so you don't have to roll your own &lt;A href="http://www.gotreportviewer.com/" mce_href="http://www.gotreportviewer.com/"&gt;Report Viewer Control ASP.Net application&lt;/A&gt;) then you &lt;A href="http://msdn2.microsoft.com/en-us/library/ms345247.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms345247.aspx"&gt;should build a stylesheet which removes the toolbar, and use that&lt;/A&gt;.&amp;nbsp; &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1568185" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jgalla/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/SSRS/default.aspx">SSRS</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/rsExecutionNotFound/default.aspx">rsExecutionNotFound</category></item><item><title>Load Testing Reporting Services</title><link>http://blogs.msdn.com/jgalla/archive/2007/01/15/load-testing-reporting-services.aspx</link><pubDate>Tue, 16 Jan 2007 04:52:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1474462</guid><dc:creator>jgalla</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jgalla/comments/1474462.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jgalla/commentrss.aspx?PostID=1474462</wfw:commentRss><description>&lt;p&gt;This question came across one of our internal discussion aliases, and it wasn't the first time I had seen it... so I thought it might be interesting to other people as well. &lt;/p&gt; &lt;p&gt;Oftentimes, when people configure a load testing tool they set it up so that all of the connections come from the same logical user.&amp;nbsp; However, in Reporting Services we have a feature which prevents an authenticated user from performing a denial-of-service attack against the server.&amp;nbsp; We do this by limiting the number of operations that any given user (based on the user's name) can be performing at any given time.&amp;nbsp; When you hit this limit, you will get an error message like this:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;There are currently too many requests in progress for user: "ABC\XYZ". Please wait until the current requests have finished processing before issuing any more.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;At this point, there are basically two ways of resolving this issue:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Change your test scripts/application to spread the requests across multiple logical users.&lt;/li&gt; &lt;li&gt;Alter the rsReportServer.config file to extend the number of requests a user can have active.&amp;nbsp; The setting is the &amp;lt;Configuration&amp;gt; section and it is the "MaxActiveReqForOneUser" property.&amp;nbsp; The whole entry is this: &amp;lt;Add Key="MaxActiveReqForOneUser" Value="999999" /&amp;gt;.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Note that this setting can also be useful if your users are not talking directly to the server, but are instead going through an ASP.Net application which is always impersonating the same user when accessing SSRS.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1474462" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jgalla/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/SSRS/default.aspx">SSRS</category></item><item><title>Diagnosing rsInternalError</title><link>http://blogs.msdn.com/jgalla/archive/2006/12/05/diagnosing-rsinternalcatalogexception.aspx</link><pubDate>Tue, 05 Dec 2006 20:52:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1212369</guid><dc:creator>jgalla</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jgalla/comments/1212369.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jgalla/commentrss.aspx?PostID=1212369</wfw:commentRss><description>&lt;p&gt;You know the one.&amp;nbsp; You try to render a report and you end up hitting the dreaded "An internal catalog exception has occurred" error message.&amp;nbsp; Generally speaking, this is an indication that something very bad happened within the server which is not necessarily due to any particular action you performed, but rather due to some internal check which failed or an exception which we were unable to recover from was thrown.&amp;nbsp; We purposefully do not display the entire error message to prevent information disclosure.&amp;nbsp; Instead, we write some more detailed information into one of our log files.&lt;/p&gt; &lt;p&gt;Tracking down the log file which contains the error can be a little tricky if you have never done it before.&amp;nbsp; I am going to assume that the error was generated as a result of interaction with the SSRS Web server, which handles all interactive (non-subscription) requests.&amp;nbsp; This is what you see when you are using the Report Viewer control in server mode, Report Manager, or talking to the ReportServer virtual directory directly via either SOAP or URL Access.&amp;nbsp; &lt;/p&gt; &lt;p&gt;The log files for the web server are stored in %Program Files%\Microsoft SQL Server\&amp;lt;Instance&amp;gt;\Reporting Services\Log Files.&amp;nbsp; First thing you will want to do is head over there and look for the most recent file that look has a name like "ReportServer__&amp;lt;TimeStamp&amp;gt;".&amp;nbsp; There will be&amp;nbsp;a lot of files which almost look like this (such as ReportServerService__Timestamp) but we aren't interested in those just yet.&amp;nbsp; So crack open the log file which corresponds in time to when the internal catalog exception was thrown, and do a search for the string "InternalCatalogException".&amp;nbsp; Once you have found the exception, you will see a couple&amp;nbsp;of things:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;A call stack which shows where the exception occurred.  &lt;li&gt;Any previous exception which was handled and wrapped in our InternalCatalogException.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Here is an example:&lt;/p&gt; &lt;p&gt;w3wp!library!5!12/01/2006-15:36:47:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException: An internal error occurred on the report server. See the error log for more details., ;&lt;br&gt;Info: Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException: An internal error occurred on the report server. See the error log for more details. ---&amp;gt; System.Data.SqlClient.SqlException: Could not allocate space for object 'dbo.ChunkData'.'IX_ChunkData' in database 'ReportServerTempDB' because the 'PRIMARY' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.&lt;br&gt;at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)&lt;br&gt;at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)&lt;br&gt;at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)&lt;br&gt;at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)&lt;br&gt;at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)&lt;br&gt;at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)&lt;br&gt;at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)&lt;br&gt;at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()&lt;br&gt;at Microsoft.ReportingServices.Library.CancelableSqlCommand.ExecuteNonQuery()&lt;br&gt;at Microsoft.ReportingServices.Library.ChunkStorage.CopyImages(Guid fromSnapshotID, Boolean fromIsPermanent, Guid toSnapshotID, Boolean toIsPermanent)&lt;br&gt;at Microsoft.ReportingServices.Library.ReportSnapshot.CopyImageChunksTo(ReportSnapshotBase target)&lt;br&gt;at Microsoft.ReportingServices.Library.RSService.RenderAsLive(CatalogItemContext reportContext, ItemProperties properties, ParameterInfoCollection effectiveParameters, Guid reportId, ClientRequest session, String description, ReportSnapshot intermediateSnapshot, DataSourceInfoCollection thisReportDataSources, Boolean cachingRequested, Boolean isLinkedReport, Warning[]&amp;amp; warnings, ReportSnapshot&amp;amp; resultSnapshotData, DateTime&amp;amp; executionDateTime, RuntimeDataSourceInfoCollection&amp;amp; alldataSources, UserProfileState&amp;amp; usedUserProfile)&lt;br&gt;at Microsoft.ReportingServices.Library.RSService.RenderAsLiveOrSnapshot(CatalogItemContext reportContext, ClientRequest session, Warning[]&amp;amp; warnings, ParameterInfoCollection&amp;amp; effectiveParameters)&lt;br&gt;at Microsoft.ReportingServices.Library.RSService.RenderFirst(CatalogItemContext reportContext, ClientRequest session, Warning[]&amp;amp; warnings, ParameterInfoCollection&amp;amp; effectiveParameters, String[]&amp;amp; secondaryStreamNames)&lt;br&gt;--- End of inner exception stack trace ---  &lt;p&gt;Sometimes, this will be enough information for you to diagnose the situation and resolve it on your own.&amp;nbsp; For example, maybe the database where the RS catalog is being stored has run out of disk space.&amp;nbsp; Other times, things won't be particularly clear.&amp;nbsp; In those cases I recommend either contacting &lt;a href="http://support.microsoft.com/Default.aspx"&gt;Microsoft Support&lt;/a&gt;, or posting your question on the &lt;a href="http://forums.microsoft.com/MSDN/ShowForum.aspx?forumid=82&amp;amp;siteid=1"&gt;SSRS Forum at MSDN&lt;/a&gt;.&amp;nbsp; &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1212369" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jgalla/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/SSRS/default.aspx">SSRS</category></item><item><title>A Great Place to Ask a Question</title><link>http://blogs.msdn.com/jgalla/archive/2006/12/05/a-great-place-to-ask-a-question.aspx</link><pubDate>Tue, 05 Dec 2006 20:27:23 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1212253</guid><dc:creator>jgalla</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jgalla/comments/1212253.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jgalla/commentrss.aspx?PostID=1212253</wfw:commentRss><description>&lt;p&gt;Recently I have had a couple of people send questions directly to me via the "&lt;a href="http://blogs.msdn.com/jgalla/contact.aspx"&gt;Email&lt;/a&gt;" tab asking me for some specific one-on-one technical support for Reporting Services.&amp;nbsp; I thank you very much for your interest in our product, but unfortunately I am not the best person to direct specific questions towards.&amp;nbsp; Instead, I recommend you check out the &lt;a href="http://forums.microsoft.com/MSDN/ShowForum.aspx?forumid=82&amp;amp;siteid=1" target="_blank"&gt;SQL Server Reporting Services MSDN Forum&lt;/a&gt;.&amp;nbsp; There are lots of folks there both from the community and within the product group here at Microsoft that will be more than happy to answer your questions on the public forum.&amp;nbsp; The great thing there is that forums are also searchable by others, so your question may help out one of your peers.&amp;nbsp; How cool is that?&lt;/p&gt; &lt;p&gt;That said, if there is a topic which you think would be of general interest to others who are using Reporting Services, or if you just want to say "Hi", then feel free to &lt;a href="http://blogs.msdn.com/jgalla/contact.aspx"&gt;contact me via the contact page&lt;/a&gt;.&amp;nbsp; I can't guarantee that I will cover all topics that people ask, but I will make note of them all and if I feel that I cannot provide a good discussion of the topic, then I will forward it on to one of my colleagues who will.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1212253" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jgalla/archive/tags/SQL+Server/default.aspx">SQL Server</category></item><item><title>Transitioning between SOAP and URL Access</title><link>http://blogs.msdn.com/jgalla/archive/2006/11/17/transitioning-between-soap-and-url-access.aspx</link><pubDate>Sat, 18 Nov 2006 00:59:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1095883</guid><dc:creator>jgalla</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jgalla/comments/1095883.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jgalla/commentrss.aspx?PostID=1095883</wfw:commentRss><description>&lt;p&gt;The SSRS Web Server supports two basic protocols, SOAP and URL Access.&amp;nbsp; The SOAP API is great for managing the catalog and doing some session management within the context of a report session, but is generally not the greatest thing in the world when actually rendering a report.&amp;nbsp; The problem is that since the SOAP API returns a byte[] from the Render() and RenderStream() methods, your client application has to hold the entire contents in memory.&amp;nbsp; In addition, because of how ASP.Net's SOAP serialization works on the server, there is some additional memory overhead when rendering a report through the SOAP API.&amp;nbsp; For this reason, I recommend that you consider using our URL Access API to render reports via a simple HTTP GET request.&amp;nbsp; The problem with this though is that if your report contains many parameters or data source credentials or if you need some other kind of interactivity then using pure URL Access can be a bit cumbersome.&amp;nbsp; A nice solution for this problem is to mix usage of both the SOAP API and URL Access.&amp;nbsp; The key is simply communicating the proper execution id for all of the requests.&amp;nbsp; &lt;/p&gt; &lt;p&gt;For some background on how to use URL Access and the SOAP API please check out these links:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms152787.aspx" target="_blank"&gt;Report Server Web Service&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms153586.aspx"&gt;Report Server URL Access&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The easiest way to show this is by way of an example.&amp;nbsp; In my scenario I want to render a report to PDF, but I want to specify the data source credentials via the SOAP API.&amp;nbsp; &lt;/p&gt; &lt;p&gt;The first step is to create the session and bind it to a report.&amp;nbsp; This is done via the &lt;a href="http://msdn2.microsoft.com/en-us/library/microsoft.wssux.reportingserviceswebservice.rsexecutionservice2005.reportexecutionservice.loadreport.aspx" target="_blank"&gt;ReportExecutionService.LoadReport&lt;/a&gt; method.&amp;nbsp; We then query the returned ExecutionInfo object to determine which data sources need credentials and provide the credentials.&amp;nbsp; Once that is complete, we are good to go and we can construct the URL to render to the report from, including the output format and the session id which was returned as part of the ExecutionInfo.&amp;nbsp; It is also possible to retrieve the ExecutionId property from the SOAP header on the ReportExecutionService object.&lt;/p&gt; &lt;p&gt;In this example, the report that I rendered turned out to be ~ 1MB in length.&amp;nbsp; Rather than having to allocate that entire byte[] in memory, I am instead able to stream the results from the WebResponse object in 4KB buffers.&lt;/p&gt; &lt;p&gt;The complete code for this example is here:&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:b4661e84-825e-4201-9b46-749ceea4d4fc" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:#D8D8D8;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #0000FF; "&gt;using&lt;/span&gt;&lt;span style="color: #000000; "&gt; System;
&lt;/span&gt;&lt;span style="color: #0000FF; "&gt;using&lt;/span&gt;&lt;span style="color: #000000; "&gt; System.Collections.Generic;
&lt;/span&gt;&lt;span style="color: #0000FF; "&gt;using&lt;/span&gt;&lt;span style="color: #000000; "&gt; System.IO;
&lt;/span&gt;&lt;span style="color: #0000FF; "&gt;using&lt;/span&gt;&lt;span style="color: #000000; "&gt; System.Text;
&lt;/span&gt;&lt;span style="color: #0000FF; "&gt;using&lt;/span&gt;&lt;span style="color: #000000; "&gt; System.Net;
&lt;/span&gt;&lt;span style="color: #0000FF; "&gt;using&lt;/span&gt;&lt;span style="color: #000000; "&gt; Example.ReportExecution;

&lt;/span&gt;&lt;span style="color: #0000FF; "&gt;class&lt;/span&gt;&lt;span style="color: #000000; "&gt; Program
{
    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;static&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;void&lt;/span&gt;&lt;span style="color: #000000; "&gt; Main(&lt;/span&gt;&lt;span style="color: #0000FF; "&gt;string&lt;/span&gt;&lt;span style="color: #000000; "&gt;[] args)
    {
        &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;try&lt;/span&gt;&lt;span style="color: #000000; "&gt;
        {
            &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;using&lt;/span&gt;&lt;span style="color: #000000; "&gt; (ReportExecutionService re &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;new&lt;/span&gt;&lt;span style="color: #000000; "&gt; ReportExecutionService())
            {                
                re.UseDefaultCredentials &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;true&lt;/span&gt;&lt;span style="color: #000000; "&gt;;
                Console.WriteLine(&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;Loading the report...&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;);
                ExecutionInfo execInfo &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; re.LoadReport(&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;/ProductCatalog&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;, &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;null&lt;/span&gt;&lt;span style="color: #000000; "&gt;);
                &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;if&lt;/span&gt;&lt;span style="color: #000000; "&gt; (execInfo.CredentialsRequired)
                {
                    List&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000; "&gt;DataSourceCredentials&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000; "&gt; credentials &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;new&lt;/span&gt;&lt;span style="color: #000000; "&gt; List&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000; "&gt;DataSourceCredentials&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000; "&gt;();
                    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;foreach&lt;/span&gt;&lt;span style="color: #000000; "&gt; (DataSourcePrompt dsp &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;in&lt;/span&gt;&lt;span style="color: #000000; "&gt; execInfo.DataSourcePrompts)
                    {
                        DataSourceCredentials cred &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;new&lt;/span&gt;&lt;span style="color: #000000; "&gt; DataSourceCredentials();
                        cred.DataSourceName &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; dsp.Name;
                        cred.UserName &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;asdf&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;;
                        cred.Password &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;mypassword&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;;
                        credentials.Add(cred);
                    }

                    Console.WriteLine(&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;Setting data source credentials...&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;);
                    execInfo &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; re.SetExecutionCredentials(credentials.ToArray());
                }

                &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;string&lt;/span&gt;&lt;span style="color: #000000; "&gt; format &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;PDF&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;;
                &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;string&lt;/span&gt;&lt;span style="color: #000000; "&gt; requestUri &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;string&lt;/span&gt;&lt;span style="color: #000000; "&gt;.Format(
                    &lt;/span&gt;&lt;span style="color: #000000; "&gt;@&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;http://localhost/reportserver/?{0}&amp;amp;rs:SessionId={1}&amp;amp;rs:Format={2}&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;,
                    execInfo.ReportPath,
                    execInfo.ExecutionID,
                    format
                    );
                WebRequest request &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; WebRequest.Create(requestUri);
                request.UseDefaultCredentials &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;true&lt;/span&gt;&lt;span style="color: #000000; "&gt;;                

                Console.WriteLine(&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;Request report...&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;);
                &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;using&lt;/span&gt;&lt;span style="color: #000000; "&gt; (WebResponse response &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; request.GetResponse())
                &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;using&lt;/span&gt;&lt;span style="color: #000000; "&gt; (Stream readStream &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; response.GetResponseStream())
                &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;using&lt;/span&gt;&lt;span style="color: #000000; "&gt; (FileStream writeStream &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;new&lt;/span&gt;&lt;span style="color: #000000; "&gt; FileStream(&lt;/span&gt;&lt;span style="color: #000000; "&gt;@&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;c:\output.pdf&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;, FileMode.Create))
                {
                    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;byte&lt;/span&gt;&lt;span style="color: #000000; "&gt;[] readBuffer &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;new&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;byte&lt;/span&gt;&lt;span style="color: #000000; "&gt;[&lt;/span&gt;&lt;span style="color: #000000; "&gt;4096&lt;/span&gt;&lt;span style="color: #000000; "&gt;];
                    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;int&lt;/span&gt;&lt;span style="color: #000000; "&gt; bytesRead &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #000000; "&gt;0&lt;/span&gt;&lt;span style="color: #000000; "&gt;;
                    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;while&lt;/span&gt;&lt;span style="color: #000000; "&gt; ((bytesRead &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; readStream.Read(readBuffer, &lt;/span&gt;&lt;span style="color: #000000; "&gt;0&lt;/span&gt;&lt;span style="color: #000000; "&gt;, readBuffer.Length)) &lt;/span&gt;&lt;span style="color: #000000; "&gt;!=&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #000000; "&gt;0&lt;/span&gt;&lt;span style="color: #000000; "&gt;)
                    {
                        writeStream.Write(readBuffer, &lt;/span&gt;&lt;span style="color: #000000; "&gt;0&lt;/span&gt;&lt;span style="color: #000000; "&gt;, bytesRead);
                    }
                }

                Console.WriteLine(&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;Request finished...&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; "&gt;);
            }
        }
        &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;catch&lt;/span&gt;&lt;span style="color: #000000; "&gt; (Exception e)
        {
            Console.WriteLine(e);
        }
    }
}
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1095883" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jgalla/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jgalla/archive/tags/SSRS/default.aspx">SSRS</category></item></channel></rss>