<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>John Gallardo's Weblog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/jgalla/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/jgalla/feed.xml</link>
    <description>From Windows Phone</description>
    <lastBuildDate>Tue, 16 Apr 2019 05:12:44 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>DataContext.Log and Windows Phone</title>
      <link>https://docs.microsoft.com/archive/blogs/jgalla/datacontext-log-and-windows-phone</link>
      <pubDate>Fri, 27 May 2011 16:31:11 GMT</pubDate>
      <dc:creator><![CDATA[John Gallardo [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jgalla/2011/05/27/datacontext-log-and-windows-phone/</guid>
      <description><![CDATA[&#160;  Among the many features that are compatible between Linq To SQL on desktop Windows and on...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p>Among the many features that are compatible between Linq To SQL on desktop Windows and on Windows Phone is the support for capturing all of the generated SQL as it is being sent to the database. This can be a great way to both gain an understanding of how L2S works, as well as optimize query complexity. One of the challenges with using this feature is actually collecting the data. Extracting the log out of isostore can be problematic. Typically I like to visualize the output of my queries in the Debug Output Window. However the problem there is that there is no TextWriter in the platform that can write there.&#160; </p>  <p>The solution is to simply wrap Debug.WriteLine() in your own TextWriter implementation. </p>  <p>I am sure this has been done many times before, but here is my implementation:</p>  <pre class="code"><span style="color: blue">namespace </span>PhoneHelper
{
    <span style="color: blue">using </span>System;
    <span style="color: blue">using </span>System.Diagnostics;
    <span style="color: blue">using </span>System.IO;
    <span style="color: blue">using </span>System.Text;

    <span style="color: blue">public class </span><span style="color: #2b91af">DebugStreamWriter </span>: <span style="color: #2b91af">TextWriter
    </span>{
        <span style="color: blue">private const int </span>DefaultBufferSize = 256;
        <span style="color: blue">private </span><span style="color: #2b91af">StringBuilder </span>_buffer;

        <span style="color: blue">public </span>DebugStreamWriter()
        {
            BufferSize = 256;
            _buffer = <span style="color: blue">new </span><span style="color: #2b91af">StringBuilder</span>(BufferSize);
        }

        <span style="color: blue">public int </span>BufferSize
        {
            <span style="color: blue">get</span>;
            <span style="color: blue">private set</span>;
        }

        <span style="color: blue">public override </span>System.Text.<span style="color: #2b91af">Encoding </span>Encoding
        {
            <span style="color: blue">get </span>{ <span style="color: blue">return </span><span style="color: #2b91af">Encoding</span>.UTF8; }
        }

        <span style="color: blue">#region </span>StreamWriter Overrides
        <span style="color: blue">public override void </span>Write(<span style="color: blue">char </span>value)
        {
            _buffer.Append(value);
            <span style="color: blue">if </span>(_buffer.Length &gt;= BufferSize)
                Flush();
        }

        <span style="color: blue">public override void </span>WriteLine(<span style="color: blue">string </span>value)
        {
            Flush();

            <span style="color: blue">using</span>(<span style="color: blue">var </span>reader = <span style="color: blue">new </span><span style="color: #2b91af">StringReader</span>(value))
            {
                <span style="color: blue">string </span>line; 
                <span style="color: blue">while</span>( <span style="color: blue">null </span>!= (line = reader.ReadLine()))
                    <span style="color: #2b91af">Debug</span>.WriteLine(line);
            }
        }

        <span style="color: blue">protected override void </span>Dispose(<span style="color: blue">bool </span>disposing)
        {
            <span style="color: blue">if </span>(disposing)
                Flush();
        }

        <span style="color: blue">public override void </span>Flush()
        {
            <span style="color: blue">if </span>(_buffer.Length &gt; 0)
            {
                <span style="color: #2b91af">Debug</span>.WriteLine(_buffer);
                _buffer.Clear();
            }
        }
        <span style="color: blue">#endregion
    </span>}
}</pre>

<p>And the output:</p>


<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/47/22/metablogapi/5861.image_2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-47-22-metablogapi/5861.image_5F00_2.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/47/22/metablogapi/3113.image_thumb.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-47-22-metablogapi/3113.image_5F00_thumb.png" width="833" height="115" /></a></p>]]></content:encoded>
    </item>
    <item>
      <title>Now From Windows Phone</title>
      <link>https://docs.microsoft.com/archive/blogs/jgalla/now-from-windows-phone</link>
      <pubDate>Tue, 24 May 2011 14:09:00 GMT</pubDate>
      <dc:creator><![CDATA[John Gallardo [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jgalla/2011/05/24/now-from-windows-phone/</guid>
      <description><![CDATA[Last November I decided to leave the SQL Reporting Services team and join the Windows Phone...]]></description>
      <content:encoded><![CDATA[<p>Last November I decided to leave the SQL Reporting Services team and join the Windows Phone Application Platform team. This is the team responsible for delivering:</p>
<ul>
<li>The overall application model for windows phone (how are they installed, secured and activated)</li>
<li>Runtime integration (hosting of Silverlight Mobile and XNA applications within NetCF)</li>
<li>Phone specific frameworks (ex: Sensors)</li>
<li>Data and Cloud programmability (Push Notifications, Structured Storage)</li>
</ul>
<p>I have been working mostly on data programmability since joining the team, bringing Linq To SQL down to the phone from the desktop. </p>
<p>You can play with the new features in the recently released <a href="http://create.msdn.com/en-US/news/WPDT_7.1_Beta">Developer Tools for Windows Phone Mango Beta</a>.</p>
<p>Also, <a href="http://jesseliberty.com/">Jesse Liberty</a> has done a good job of capturing some of the <a href="http://jesseliberty.com/2011/05/14/best-practices-for-local-databases/">best practices for Linq To SQL on Windows Phone</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>RS PowerShell Gems – The WMI Provider</title>
      <link>https://docs.microsoft.com/archive/blogs/jgalla/rs-powershell-gems-the-wmi-provider</link>
      <pubDate>Wed, 26 May 2010 17:20:48 GMT</pubDate>
      <dc:creator><![CDATA[John Gallardo [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jgalla/2010/05/26/rs-powershell-gems-the-wmi-provider/</guid>
      <description><![CDATA[For IT administration of a Report Server instance, you will occasionally need to use WMI.&#160; We...]]></description>
      <content:encoded><![CDATA[<p>For IT administration of a Report Server instance, you will occasionally need to use WMI.&#160; We try to ease this to some extent by exposing a command line tool rsconfig.exe as well as the RS Configuration Tool UI. That said, sometimes you just need to talk to WMI directly – and for that PowerShell is a great tool!</p>  <p>Here are a couple of script fragments that I have used in the past:</p>  <blockquote>   <p># Gem 1 - Enumerate All Instances     <br /># </p>    <p>$computer = &quot;JGALLA7&quot;     <br />$namespaces = gwmi -class &quot;__NAMESPACE&quot; -namespace &quot;root\Microsoft\SqlServer\ReportServer&quot; -computer $computer      <br />[string]$fn = $namespaces[0].Name </p>    <p># any of the namespaces can be used to enumerate all instances     <br />$instances = gwmi -class MSReportServer_Instance -namespace &quot;root\Microsoft\SqlServer\ReportServer\$fn\v10&quot; -computer $computer      <br />$instances | ft InstanceName,EditionName,Version </p>    <p>#InstanceName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; EditionName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Version     <br />#------------&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; -----------&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; -------      <br />#MSSQLSERVER&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ENTERPRISE EVALUATION EDITION&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ####      <br />#ELEND&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ENTERPRISE EVALUATION EDITION&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ####      <br />#VIN&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ENTERPRISE EVALUATION EDITION&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ####      <br />#SAZED&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; DEVELOPER EDITION&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; #### </p>    <p># Gem 2 - get service account of each instance </p>    <p>$configurations = gwmi -class MSReportServer_ConfigurationSetting -namespace &quot;root\Microsoft\SqlServer\ReportServer\$fn\v10\Admin&quot; -computer $computer     <br />$configurations | ft InstanceName,ServiceName,WindowsServiceIdentityConfigured </p>    <p>#InstanceName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ServiceName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; WindowsServiceIdentityConfigured     <br />#------------&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; -----------&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; --------------------------------      <br />#MSSQLSERVER&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ReportServer&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; redmond\####      <br />#ELEND&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ReportServer$ELEND&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; NT Authority\NetworkService      <br />#VIN&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ReportServer$VIN&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; NT Authority\NetworkService      <br />#SAZED&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ReportServer$SAZED&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; NT AUTHORITY\NETWORK SERVICE </p>    <p># Gem 3 - Update Service Account Password of each instance using a particular user name     <br />$username = &quot;redmond\####&quot;      <br />$newpassword = &quot;mynewpassword&quot;      <br />foreach ($update in $configurations | where {$_.WindowsServiceIdentityConfigured -eq $username})      <br />{      <br />&#160; $update.SetWindowsServiceIdentity(0, $username, $newpassword)      <br />}</p> </blockquote>  <p>Some additional useful links:</p>  <ul>   <li><a href="http://msdn.microsoft.com/en-us/library/ms154648(v=SQL.105).aspx">MSReportServer_ConfigurationSetting WMI class documentation</a></li>    <li><a href="http://msdn.microsoft.com/en-us/library/ms152858.aspx">MSReportServer_Instance WMI class documentation</a></li>    <li><a href="http://technet.microsoft.com/en-us/library/dd315295.aspx">PowerShell Get-WMIObject cmdlet reference</a></li> </ul>]]></content:encoded>
    </item>
    <item>
      <title>RunningJobContext.IsClientConnected</title>
      <link>https://docs.microsoft.com/archive/blogs/jgalla/runningjobcontext-isclientconnected</link>
      <pubDate>Mon, 01 Jun 2009 13:35:11 GMT</pubDate>
      <dc:creator><![CDATA[John Gallardo [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jgalla/2009/06/01/runningjobcontext-isclientconnected/</guid>
      <description><![CDATA[I’ve seen a few people get confused over what this error message in the Reporting Services log file...]]></description>
      <content:encoded><![CDATA[<p>I’ve seen a few people get confused over what this error message in the Reporting Services log file indicates. This message is generated when the Reporting Services web server detects that an HTTP request has experienced a remote disconnect.&#160; In practice, this means that we queried the property HttpResponse.IsClientConnected and it returned false.</p>  <p>So how does this work exactly, and are all requests subject to this kind of check? As Reporting Services is currently architected, not all operations are subject to this check. For potentially long-running operations (such as report renderings and interactivity operations – internally we refer to these as Cancelable operations) requests are registered with a central request manager, which has a thread which wakes up periodically to check whether or not the clients are still connected.&#160; If they are not, then we begin the process of aborting that request on the server side in order to reclaim any resources that it is consuming.</p>  <p>Basically every operation on the ReportExecution2005.asmx endpoint, as well as the UpdateReportExecutionSnapshot(), CreateReportHistorySnapshot(), GetReportParameters(), and GetUserModel() methods on the ReportService2005.asmx endpoint register themselves as potentially long running operations.</p>  <p>So what should you do if you are seeing a lot of these errors in the log? Generally this is an indicator that requests are being torn down for some reason. This could be due to certain set of users being particularly impatient waiting for report results to return and closing their browser. Alternatively, we have seen some cases in the wild where certain proxies would internally time out requests after waiting for some period of time, at which time they close the connection to the Report Server. If you have such a deployment topology (proxy/load balancer between clients the Report Server) definately consider checking if such a configuration knob exists for your environment.</p>]]></content:encoded>
    </item>
    <item>
      <title>Hiding parameter area when viewing reports</title>
      <link>https://docs.microsoft.com/archive/blogs/jgalla/hiding-parameter-area-when-viewing-reports</link>
      <pubDate>Mon, 23 Mar 2009 17:19:36 GMT</pubDate>
      <dc:creator><![CDATA[John Gallardo [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jgalla/2009/03/23/hiding-parameter-area-when-viewing-reports/</guid>
      <description><![CDATA[When rendering reports, oftentimes the application would like to minimize as much of the...]]></description>
      <content:encoded><![CDATA[<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/jgalla/WindowsLiveWriter/Hidingparameterareawhenviewingreports_C939/image_2.png" original-url="http://blogs.msdn.com/blogfiles/jgalla/WindowsLiveWriter/Hidingparameterareawhenviewingreports_C939/image_2.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="344" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/jgalla/WindowsLiveWriter/Hidingparameterareawhenviewingreports_C939/image_thumb.png" original-url="http://blogs.msdn.com/blogfiles/jgalla/WindowsLiveWriter/Hidingparameterareawhenviewingreports_C939/image_thumb.png" width="581" border="0" /></a> </p>  <p>When rendering reports, oftentimes the application would like to minimize as much of the non-report area of the viewer control as possible.&#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).&#160; </p>  <p>There are two parameters which control the rendering of the viewer control area:</p>  <ul>   <li>rc:Parameters</li>    <li>rc:Toolbar</li> </ul>  <p>rc:Parameters can have 3 values:</p>  <table cellspacing="0" cellpadding="2" width="400" border="0"><tbody>     <tr>       <td valign="top" width="200">On</td>        <td valign="top" width="200">Displays the parameter area as in the screenshot above.</td>     </tr>      <tr>       <td valign="top" width="200">Off</td>        <td valign="top" width="200">Completely hides the parameter area.&#160; </td>     </tr>      <tr>       <td valign="top" width="200">Collapsed</td>        <td valign="top" width="200">Renders the parameter area initially minimized, so a user can expand it if they need to view/change the parameters for a report.</td>     </tr>   </tbody></table>  <p>Here is an example URL which demonstrates rendering a report with rc:Parameters=Collapsed:</p>  <p>https://servername/ReportServer?%2fSamples%2fSQL+2008+Samples%2fAdventureWorks2008+Sample+Reports%2fEmployee+Sales+Summary+2008&amp;rs:Command=Render&amp;rc:Parameters=Collapsed</p>  <p>The other way of hiding the parameter area is to render the report with rc:Toolbar=false.&#160; For many applications though, there are side-effects of this approach which I don’t think are desireable.&#160; These are:</p>  <ol>   <li>It disables the automatic ping-mechanism to keep the user’s report session alive.&#160; This can lead to rsExecutionNotFound errors if the user leaves the page inactive for several minutes.</li>    <li>It also removes the navigation (next page, find, etc…) UI.</li>    <li>By default, it will cause every page of the report to be returned to the client.&#160; For long reports, this is typically not desireable.</li> </ol>  <p>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.</p>]]></content:encoded>
    </item>
    <item>
      <title>Hiding Rendering Extensions</title>
      <link>https://docs.microsoft.com/archive/blogs/jgalla/hiding-rendering-extensions</link>
      <pubDate>Thu, 05 Feb 2009 13:15:00 GMT</pubDate>
      <dc:creator><![CDATA[John Gallardo [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jgalla/2009/02/05/hiding-rendering-extensions/</guid>
      <description><![CDATA[This is documented behavior, but we see lots of questions on it.&#160; A good mechanism for...]]></description>
      <content:encoded><![CDATA[<p>This is documented behavior, but we see lots of questions on it.&#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.&#160; </p>  <p>This MSDN documentation explains how to configure a rendering extension:</p>  <p><a title="http://msdn.microsoft.com/en-us/library/ms154516.aspx" href="http://msdn.microsoft.com/en-us/library/ms154516.aspx">http://msdn.microsoft.com/en-us/library/ms154516.aspx</a></p>  <p>The important one here is the Visible attribute:</p>  <blockquote>   <p><strong>Visible</strong></p>    <p>A value of <strong>false</strong> indicates that the rendering extension should not be visible in user interfaces. If the attribute is not included, the default value is <strong>true</strong>.</p> </blockquote>  <p>&#160;</p>  <p>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.</p>]]></content:encoded>
    </item>
    <item>
      <title>RS Blogger shout-outs</title>
      <link>https://docs.microsoft.com/archive/blogs/jgalla/rs-blogger-shout-outs</link>
      <pubDate>Fri, 09 Jan 2009 13:00:13 GMT</pubDate>
      <dc:creator><![CDATA[John Gallardo [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jgalla/2009/01/09/rs-blogger-shout-outs/</guid>
      <description><![CDATA[If you are interested in Reporting Services, you probably already know about these blogs … because...]]></description>
      <content:encoded><![CDATA[<p>If you are interested in Reporting Services, you probably already know about these blogs … because frankly they have more interesting things to say than me!&#160; At any rate, just in case they happened to slip through the cracks for <em>you</em>, I thought I would point you towards their blogs:</p>  <p><a href="http://blogs.msdn.com/robertbruckner/">Robert Bruckner</a> – Robert is a developer that works on the Report Processing engine and basically knows just about everything there is to know about RS.&#160; If you have been to any of the trade shows or other various RS conferences, you probably have met him.&#160; If you have spend time on RS forums or newsgroups, you probably read some insightful response he had to a question.&#160; He has a great ‘advanced’ RS blog that covers a broad range of topics.&#160; </p>  <p><a href="http://blogs.msdn.com/brianhartman/">Brian Hartman</a> – Brian developed the Report Viewer control and has been hanging out on the MSDN forums answering your questions for years.&#160; So if you are integrated Reporting Services with your application, you probably have used his stuff.&#160; He’s finally succumbed to the pressure of starting his own blog to answer a lot of the common questions and themes he sees related to the Report Viewer.&#160;&#160;&#160; </p>]]></content:encoded>
    </item>
    <item>
      <title>Avoid using HttpContext in your reports</title>
      <link>https://docs.microsoft.com/archive/blogs/jgalla/avoid-using-httpcontext-in-your-reports</link>
      <pubDate>Fri, 09 Jan 2009 12:43:01 GMT</pubDate>
      <dc:creator><![CDATA[John Gallardo [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jgalla/2009/01/09/avoid-using-httpcontext-in-your-reports/</guid>
      <description><![CDATA[On one of our internal mailing lists, someone was asking trying to retrieve some HTTP Headers that...]]></description>
      <content:encoded><![CDATA[<p>On one of our internal mailing lists, someone was asking trying to retrieve some HTTP Headers that their internal application was submitting to the Report Server within the report.&#160; Someone else responded with a code snippet containing the custom code that you can put into an RDL expression to do just that.&#160; </p>  <p>This is a bad idea.</p>  <p><a href="http://msdn.microsoft.com/en-us/library/system.web.httpcontext.aspx">HttpContext</a> has the interesting property of exposing per-request state via a static property.&#160; Inherently, there is nothing really wrong this approach.&#160; It allows access to data without having to plumb the data all of the way through every single API or object on the call stack.&#160; However, one gotcha here is that HttpContext is only available on the thread that received the request, and not on any asynchronous threads that may be spawned by that request.&#160; This can lead to subtle problems in your reports under the following conditions:</p>  <ul>   <li>When printing the report, the Report Server actually uses an asynchronous mechanism to render the report in order to return the first page quickly while continuing to render the additional pages in the background. </li>    <li>In the case of a subscription delivery, there is actually no HTTP Request that initiated the request. </li> </ul>  <p>Additionally, in the future we will more than likely be making additional portions of report execution asynchronous to improve both perceived latency as well as taking advantage of multi-core processors during non-peak load.</p>  <p>That said, there are a couple of scenarios I can think of where you might be <em>tempted </em>to examine the HTTP Request during report execution.&#160; These are:</p>  <ol>   <li>You want to determine the path or location of the report, and you are doing so by examining the incoming request URL. </li>    <li>Your application is passing some value to the report via an HTTP header. </li> </ol>  <p>For each of these, there are built-in supported mechanisms.&#160; For (1), there is a set of values <a href="http://msdn.microsoft.com/en-us/library/ms157274(SQL.90).aspx">exposed by the global collections</a> which allow to get information about the report server and the context report.&#160; For example, there are Globals.ReportFolder, Globals.ReportName, and Globals.ReportServerUrl.&#160; You can leverage these variables in report expressions rather than trying to tease apart the HTTP Request.&#160; </p>  <p>In the case of passing data to the report via an HTTP Header, there is already a built-in mechanism for passing data to a report execution.&#160; They are called <a href="http://msdn.microsoft.com/en-us/library/ms155917.aspx">report parameters</a>.&#160; They are useful for more than just providing query parameters!&#160; You can use them to also pass application-specific information that some of your custom code may require.</p>  <p>So what is the moral of the story?&#160; Be very careful when accessing static objects that are request-specific in the context of your report via custom code.&#160; Doing so exposes you to potential back-compat issues as we continue to bring the platform forward.&#160; Wherever possible we try to expose enough context through the supported report processing and rendering object models, and if there are additions you need we would love to hear about them.</p>]]></content:encoded>
    </item>
    <item>
      <title>Scaling out the Viewer Control and rsExecutionNotFound</title>
      <link>https://docs.microsoft.com/archive/blogs/jgalla/scaling-out-the-viewer-control-and-rsexecutionnotfound</link>
      <pubDate>Fri, 08 Aug 2008 12:26:14 GMT</pubDate>
      <dc:creator><![CDATA[John Gallardo [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jgalla/2008/08/08/scaling-out-the-viewer-control-and-rsexecutionnotfound/</guid>
      <description><![CDATA[One of the criteria that the report server uses to match the provided SessionID with a stored report...]]></description>
      <content:encoded><![CDATA[<p>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.&nbsp; Usually, this is the case.&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.</p> <p>Sometimes though, things go wrong.</p> <p>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.&nbsp; This is a totally supported configuration, however there is a little caveat that you have to keep in mind.&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.&nbsp; Sounds easy, right?&nbsp; Well not so fast if you are using a machine specific account for your application pool which is hosting the viewer control.&nbsp; The specific topology that can get you into trouble is something like the following:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/jgalla/WindowsLiveWriter/ScalingouttheViewerControlandrsExecution_8052/image%7B0%7D%5B12%5D.png" original-url="http://blogs.msdn.com/blogfiles/jgalla/WindowsLiveWriter/ScalingouttheViewerControlandrsExecution_8052/image%7B0%7D%5B12%5D.png" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="232" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/jgalla/WindowsLiveWriter/ScalingouttheViewerControlandrsExecution_8052/image%7B0%7D_thumb%5B10%5D.png" original-url="http://blogs.msdn.com/blogfiles/jgalla/WindowsLiveWriter/ScalingouttheViewerControlandrsExecution_8052/image%7B0%7D_thumb%5B10%5D.png" width="405" border="0"></a> </p> <p>&nbsp;</p> <p>In this scenario you have the following:</p> <ul> <li>Client machines accessing multiple web frontends hosting the report viewer control via a load balancer.</li> <li>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).</li> <li>You are <strong>not </strong>impersonating the incoming user in the viewer control when accessing the backend report server.</li></ul> <p>The sequence of operations that can lead to trouble are:</p> <ol> <li>The initial request from ClientA is routed to MachineA.&nbsp; </li> <li>The viewer control in MachineA instantiates a session with the report server.&nbsp; Since the $MachineA credentials are sent, the session is associated with this user.&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.</li> <li>The user views the first page of the report, and navigates to the second page.</li> <li>The request for the second page is actually routed to MachineB by the load balancer.</li> <li>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.&nbsp; The report server generates an rsExecutionNotFound error and returns that, resulting in an error being displayed to the user.</li></ol> <p>There are a couple of ways to address this problem:</p> <ol> <li>Architect your application such that you can flow credentials from the client all the way to the report server.&nbsp; -- Or --</li> <li>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).</li></ol>]]></content:encoded>
    </item>
    <item>
      <title>Scaling Up: SSRS 2008 vs. SSRS 2005 (spoiler: 2008 wins)</title>
      <link>https://docs.microsoft.com/archive/blogs/jgalla/scaling-up-ssrs-2008-vs-ssrs-2005-spoiler-2008-wins</link>
      <pubDate>Thu, 10 Jul 2008 11:59:39 GMT</pubDate>
      <dc:creator><![CDATA[John Gallardo [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jgalla/2008/07/10/scaling-up-ssrs-2008-vs-ssrs-2005-spoiler-2008-wins/</guid>
      <description><![CDATA[The SQL Customer Advisory Team&nbsp;just released a Technical Note comparing SQL Server Reporting...]]></description>
      <content:encoded><![CDATA[<p>The <a href="http://sqlcat.com/">SQL Customer Advisory Team</a>&nbsp;just released a Technical Note comparing SQL Server Reporting Services 2008 vs. 2005 from a scale-up perspective.&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.&nbsp; You can read the entire article here:</p> <p><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">http://sqlcat.com/technicalnotes/archive/2008/07/09/scaling-up-reporting-services-2008-vs-reporting-services-2005-lessons-learned.aspx</a></p> <p>Quoting from the summary (emphasis is mine):</p> <blockquote> <p>Reporting Services 2008 was <strong>able to respond to 3–4 times the total number of users and their requests on the same hardware</strong> 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.  <p>Our tests clearly show that <strong>the new memory management architecture of the report server enables Reporting Services 2008 to scale very well</strong>, 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.</p></blockquote>]]></content:encoded>
    </item>
  </channel>
</rss>