2011-12-17 37 views
0

我正在使用应用程序服务器来调用Oracle Reports,并且我有一个URL来调用报告。当报告被调用时,服务器将其转换为PDF,但当报告包含大量数据时,需要花费大量时间来加载。我想在asp.net中做,当我调用报告URL时,它会打开PDF文件并将其复制到我的Web文件夹的根目录中。下次我打电话给URL时,它会打开PDF文件,并在下一次呼叫的后端创建一个新的PDF。在web应用程序中使用多线程

我有此功能,以下载文件

Sub DownloadFile_Sap() 
     Dim remoteuri As String = "http://appsrv01.shakarganj.com.pk:7778/reports/rwservlet?reptest&report=sap_dashboard" 
     Dim filename As String = Server.MapPath("~/Files/rwservlet_reptest&report=sap_dashboard.pdf") 
     Dim mywebClient As New Net.WebClient() 
     mywebClient.DownloadFile(remoteuri, filename) 
    End Sub 

,我把它叫做上的LinkBut​​ton - 代码如下

Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LinkButton1.Click 
    ClientScript.RegisterStartupScript(Me.GetType(), "openfile", "window.open('http://202.125.144.34:83/Files/rwservlet_reptest&report=sap_dashboard.pdf');", True) 
     DownloadFile_Sap() 

    End Sub 

但是,当我呼吁链接按钮这种方法,得到同一时间它得到了下载文件。我该怎么做才能使链接按钮在一秒钟内从文件夹调用文件并在后端下载文件?

链接按钮的代码是在这里

<asp:linkbutton ID="Linkbutton1" runat="server" PostBackUrl="~/Files/rwservlet_reptest&report=sap_dashboard.pdf" OnClick="DownloadFile_Sap" >LinkButton</asp:linkbutton> 

回答

0

Multithreading在asp.net web应用程序中不是一个好主意。

您在IIS thread pool上的来源有限,如果您尝试在此类操作中使用此操作,则 将对生产带来严重问题。

所以你可以做到这一点,拆分为Windows service。在Windows服务应用程序上执行所有昂贵的操作通过sql table在您的网络应用程序和Windows服务应用程序之间进行通信。

编辑:

这里这个路径:

您将有Visual Studio项目
1-您的Web应用程序(你有alrady它)
2 - 新的项目,将作为运行windows服务。

然后,你将有一个包含SQL表:
REPORT_NAME,Ready_Flag

从Web应用程序填写REPORT_NAME
从Windows服务报告备置Ready_Flag为true
您可以从Web应用程序Ready_Flag如果查询设置为真,一旦成立, 你服务于客户端

+0

先生可以请告诉我任何位示例,以便我的代码有想法做下一个 – 2011-12-17 13:30:46

+0

我已经了解数据库标志方法,但是Windows服务会做什么 – 2011-12-17 13:51:34

+0

我想在后端完成一个进程而不是用户的前面 – 2011-12-17 15:37:45

0

即使你预先创建PDF,并保持它在目录不能减少下载时间。所以,下载时间我认为不能减少,但是PDF可以通过在请求之前创建并将其放在目录中来减少。

+0

我的意思是我想从一个触发器上的目录调用文件,同时在后端下载该文件,请告诉我任何事件或方法来做到这一点下载时间应该用于后端not reduced – 2011-12-17 13:00:35