SSRS报告服务器数据问题

时间:2018-04-18 17:39:37

标签: reporting-services

我已经在生产环境中部署了SSRS报告。当3个或更多用户在生产中运行相同的报告时,报告服务器会加载其他用户请求的数据。 例如 -

低于3个请求

用户A请求带有Paremeter A的报告X

用户B请求带有Paremeter B的报告X

用户C请求带有Paremeter C的报告X

SSRS服务器的输出 -

用户A请求带有Paremeter A的报告X

用户B请求带有Paremeter A的报告X

用户C请求带有Paremeter C的报告X

注意 - 当所有用户同时请求报告时,会出现此问题。

1 个答案:

答案 0 :(得分:1)

我们遇到同样的问题,如果您使用的是来自NuGet Package Manager的ReportViewerForMVC,这是第三方控件可能会导致问题,请按照以下几点进行操作

我们将重新使用ReportViewerForMvc中的代码并根据需要进行修改

1 安装包ReportViewerForMvc并按Enter键。几分钟后,将安装包

2  此安装将添加到项目:2个程序集(Microsoft.ReportViewer.WebForms& ReportViewerForMvc)以引用web.config文件中的.aspx页面(ReportViewerWebForm.aspx)和httphandlers设置。

注意:添加的.aspx页面没有.cs文件。

您现在可以使用此.aspx页面并对控制器中的所有内容进行编码,但我使用的路径略有不同,以实现代码的可重用性和一致性。

将新文件夹“Reports”添加到项目中,然后添加一个新的webform .aspx页面(ReportTemplate.aspx到Reports文件夹

3 enter image description here

从ReportViewerWebForm.aspx复制内容(如图所示),并用此替换ReportTemplate.aspx的内容。 注意:请不要复制@page指令,只复制突出显示的部分。 enter image description here

4

<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" 
    Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %> 
  
<%--<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">--%> 
<!doctype html> 
 <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE11"> 
  
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
    <title></title> 
     
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
        <asp:ScriptManager ID="scriptManagerReport" runat="server"> 
         </asp:ScriptManager> 
  
        <rsweb:ReportViewer  runat ="server" ShowPrintButton="false"  Width="99.9%" Height="100%" AsyncRendering="true" ZoomMode="Percent" KeepSessionAlive="true" id="rvSiteMapping" SizeToReportContent="false" > 
        </rsweb:ReportViewer>                   
    </div> 
    </form> 
</body> 
</html> 

5  ReportTemplate.aspx将更改为此 enter image description here

6

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ReportTemplate.aspx.cs" Inherits="ASPNETMVC_SSRS_Demo.Reports.ReportTemplate" %> 
  
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" 
    Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %> 
  
<%--<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">--%> 
<!doctype html> 
 <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE11"> 
  
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
    <title></title> 
     
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
        <asp:ScriptManager ID="scriptManagerReport" runat="server"> 
 <Scripts> 
     <asp:ScriptReference Assembly="ReportViewerForMvc" Name="ReportViewerForMvc.Scripts.PostMessage.js" /> 
  </Scripts> 
         </asp:ScriptManager> 
  
        <rsweb:ReportViewer  runat ="server" ShowPrintButton="false"  Width="99.9%" Height="100%" AsyncRendering="true" ZoomMode="Percent" KeepSessionAlive="true" id="rvSiteMapping" SizeToReportContent="false" > 
        </rsweb:ReportViewer>                   
    </div> 
    </form> 
</body> 
</html>

7  接下来从ReportTemplate.aspx页面

中删除以下脚本标记

<Scripts> 
     <asp:ScriptReference Assembly="ReportViewerForMvc" Name="ReportViewerForMvc.Scripts.PostMessage.js" /> 
  </Scripts> 

8 向ReportViewercontrol添加其他属性,如下所示

<rsweb:ReportViewer id="rvSiteMapping"runat ="server"ShowPrintButton="false"Width="99.9%"Height="100%"AsyncRendering="true"ZoomMode="Percent"KeepSessionAlive="true"SizeToReportContent="false"></rsweb:ReportViewer>

9  现在打开ReportTemplate.aspx.cs文件并将以下代码添加到Page_load事件中,您需要SSRS服务器URL和SSRS报告文件夹路径。

using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace ASPNETMVC_SSRS_Demo.Reports 
{ 
public partial class ReportTemplate : System.Web.UI.Page 
{ 
    protectedvoid Page_Load(object sender, EventArgs e) 
    { 
        if (!IsPostBack) 
        { 
            try 
            { 
   String reportFolder = System.Configuration.ConfigurationManager
.AppSettings["SSRSReportsFolder"].ToString(); 

                rvSiteMapping.Height = 
Unit.Pixel(Convert.ToInt32(Request["Height"]) - 58); 
                rvSiteMapping.ProcessingMode = 
Microsoft.Reporting.WebForms.ProcessingMode.Remote; 

                rvSiteMapping.ServerReport.ReportServerUrl = new Uri("SSRS 
URL"); // Add the Reporting Server URL 
                rvSiteMapping.ServerReport.ReportPath = 
String.Format("/{0}/{1}", reportFolder, Request["ReportName"].ToString()); 

                rvSiteMapping.ServerReport.Refresh(); 
            } 
            catch (Exception ex) 
            { 

                } 
            } 
       } 
        } 
   }  

10      将SSRSReportFolder路径添加到web.config文件中的应用程序设置。

<add key="SSRSReportsFolder" value="BIC_Reports"/>

11      接下来,在Models文件夹

下创建一个实体类ReportInfo.cs
    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 

    namespace ASPNETMVC_SSRS_Demo.Models 
    { 
        public class ReportInfo 
        { 
          public int ReportId { get; set; } 
          public string ReportName { get; set; } 
          public string ReportDescription { get; set; } 
          public string ReportURL { get; set; } 
          public int Width { get; set; } 
          public int Height { get; set; } 
          public string ReportSummary { get; set; } 
       }   
    } 

12     接下来,我们将向Controller和View Pages添加代码。没有     改为HomeController.cs。将以下代码添加到Home / Index视图     页。

@{ 
    ViewBag.Title = "Index"; 
} 
  
<h2>Reports List</h2> 
  
<a id="ReportUrl_Performance" href="@Url.Action("ReportTemplate", "Report", new { ReportName = "Performance", ReportDescription = "Performance Report", Width = 100, Height = 650 })"> 
    Performance Report</a> 
13下一步

   using System; 
   using System.Collections.Generic; 
   using System.Linq; 
   using System.Web; 
   using System.Web.Mvc; 
   using ASPNETMVC_SSRS_Demo.Models; 

   namespace ASPNETMVC_SSRS_Demo.Controllers 
   { 
    public class ReportController : Controller 
   { 
       // 
      // GET: /Report/ 

    public ActionResult ReportTemplate(string ReportName, string 
    ReportDescription, int Width, int Height) 
     { 
         var rptInfo = new ReportInfo 
         { 
             ReportName = ReportName, 
             ReportDescription = ReportDescription, 
             ReportURL = String.Format("../../Reports/ReportTemplate.aspx?
             ReportName={0}&Height={1}", ReportName, Height), 
             Width = Width, 
             Height = Height 
         };   
          return View(rptInfo); 
      } 
     } 
    }

14    最后一步是打开Report下的ReportTemplate视图页面并添加以下代码。

@model ASPNETMVC_SSRS_Demo.Models.ReportInfo 
  
<H1> 
    @Model.ReportDescription 
</H1> 
  
<iframe id="frmReport" src="@Model.ReportURL" frameborder="0" style="@String.Format("width:{0}%; height: {1}px;", Model.Width, Model.Height)" scrolling="no"> 
  
</iframe>