2011-12-17 80 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