This is the ReportViewer control:
<form id="reportForm" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" AsyncPostBackTimeout="360000">
</asp:ScriptManager>
<div>
<rsweb:ReportViewer ID="mainReportViewer" runat="server" Width="100%"
Height="100%" SizeToReportContent="True" >
</rsweb:ReportViewer>
</div>
</form>
This is the code behind page:
protected void Page_Load(object sender, EventArgs e)
{
if (Session["UserInfo"] == null)
{
Response.Redirect("~/account/login", true);
}
string ReportPath = "";
try
{
if (mainReportViewer.Page.IsPostBack) return;
mainReportViewer.ProcessingMode = ProcessingMode.Remote;
mainReportViewer.ServerReport.ReportServerUrl = new Uri(
@"" + ConfigurationManager.AppSettings["ReportServer"].ToString()
);
ReportPath = Convert.ToString(ConfigurationManager.AppSettings["ReportPath"]);
if (!string.IsNullOrEmpty(ReportPath))
{
if (ReportPath.Substring(0, 1) == "/")
{
ReportPath = ReportPath.Substring(1, ReportPath.Length - 1);
}
if (ReportPath.Substring(ReportPath.Length - 1, 1) != "/")
{
ReportPath = ReportPath + '/';
}
}
else
{
ReportPath = "";
}
ReportPath = ReportPath + Request["Report"].ToString().Split(".".ToCharArray())[0].ToString();
mainReportViewer.ServerReport.ReportPath = @"/" + ReportPath;
ReportParameterCollection parmCol = new ReportParameterCollection();
string sFrom = "";
string sTo = "";
string dateRange = Request["dateRange"].ToString();
string[] obj = dateRange.Split("-".ToCharArray());
if (obj.Length > 1)
{
sFrom = obj[0].ToString();
sTo = obj[1].ToString();
}
else
sFrom = obj[0].ToString();
else if (Request["Report"].ToString().ToUpper() == "SOURCEWISEREPORT_AR.RDL")
{
string[] frommonthyear = sFrom.Split(',');
string[] tomonthyear = sTo.Split(',');
parmCol.Add(new ReportParameter("FromYear", frommonthyear[1]));
parmCol.Add(new ReportParameter("FromMonth", frommonthyear[0]));
parmCol.Add(new ReportParameter("ToYear", tomonthyear[1]));
parmCol.Add(new ReportParameter("ToMonth", tomonthyear[0]));
parmCol.Add(new ReportParameter("lang", Convert.ToString(Session["Culture"])));
}
mainReportViewer.PromptAreaCollapsed = true;
mainReportViewer.AsyncRendering = true;
mainReportViewer.ServerReport.Timeout = System.Threading.Timeout.Infinite;
mainReportViewer.ServerReport.SetParameters(parmCol);
mainReportViewer.ShowParameterPrompts = true;
mainReportViewer.LocalReport.EnableHyperlinks = true;
mainReportViewer.ServerReport.Refresh();
}
catch (Exception ex)
{
CommonFunctions.createLog("Reports : " + ex.Message);
}
}
When I try to view report(which is a view in asp.net mvc) it opens in a new tab to view the report (which is aspx page with codefile) and mean while if I try to open any link from the previous tab the page doesn't get loaded until the report in the new tab is completely loaded. I tried doing everything but no solution found yet. Need help
The Report Viewer provides a method for business that use SAP Crystal Reports to distribute and control access to their reports. The software provides an easily customizable interface that allows you to disable and restrict access to selected features.
mean while if i try to open any link from the previous tab the page doesn't get loaded until the report in the new tab is completely loaded
You need to profile your application. Most likely your request has been queued trying to get a write lock for the user's session state.
You can read more about the problem here:
To prevent two pages from modifying in-process Session variables at the same time, the ASP.NET runtime uses a lock. When a request arrives for a page that reads and writes Session variables, the runtime acquires a writer lock. The writer lock will block other pages in the same Session who might write to the same session variables.
Emphasis mine.
To mitigate this, you can enable or disable session state for individual pages, or declare your usage of session state as "read only".
Pay attention not to accidentally choose the wrong type of session state, however (enabled, disabled, read only). It needs to be set correctly for your application to work correctly.
Since the ReportViewer user's session state continously, it uses a lock that blocks page loading.The method which i followed to solve my problem is :
Class
and implement IReportServerConnection2
interface
add key="ReportViewerServerConnection" value="MyNamespace.MyClass, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken= 00000000000000000 "/>
to web.config
file in <appsettings>
EnableSessionState = "Readonly"
at the ReportViewer.aspx
pageThis thread helped me in solving my issue : The attempt to connect to the report server failed - Setting URL and Path in ASP.NET?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With