2010-10-31 25 views
1

摘要
我們有一個ASP.NET應用程序,允許用戶通過一箇中間層查詢SQL Server數據庫(相當標準的東西) 。當用戶嘗試爲返回給他們的行生成PDF時。每一組具有共同標識符的行將「轉入」PDF中的單獨頁面。
如何背景時間/ IO耗時跨防火牆的操作在ASP.NET C#

本來,我認爲行數將是一個數量級,有利於將最終的PDF傳輸到ASP響應流,並讓用戶將文件下載到他們的機器中,但是更新的要求表明行數非常大,並且大大超出了我設計的範圍。

我目前的解決方案如下:

  1. 如果返回的行數是大於配置threshold值越大,用戶得到,詢問他們是否要生成的PDF格式的一條消息背景並在完成後通過電子郵件通知URL,以便他們可以下載它們。

  2. 如果用戶可以接受,我創建兩個DataTable s:一個包含實際數據,另一個包含MetaData,例如保存生成的PDF,名稱和其他元類型信息的位置。

  3. 然後,我可以使用DataTable.WriteXML在特定文件夾中生成「作業」文件。

  4. 這是全部在一個單獨的線程中完成的,因此用戶可以繼續做他們想做的事情。

問題
我真的想一臺機器上工作的XML文件存儲在我們的防火牆(共享的網絡文件夾)中,但似乎我不能出於安全原因。我被告知我可能想要使用模擬並已嘗試但無法使其工作。

該應用程序的其他部分是「監聽」到「輸入」文件夾,並每小時(或類似計劃)處理這些「作業」文件一次,將生成的PDF文件移動到必要的位置,向用戶發送電子郵件。

我已經獲得了讀取作業文件並生成PDF的部分,並且創建作業文件的部分有效(當我在防火牆內部運行時),但是當我在防火牆外部運行它時,即使嘗試模仿, 這是行不通的。 (口口聲聲說「網絡位置找不到」

問題(S):??
我要對這個正確的方式
如何編寫跨防火牆這些文件
的任何設計思路或建議?

在此先感謝。

+0

防火牆的哪一邊是SQL Server/Web服務器? (我假設它在外面?) – realworldcoder 2010-10-31 21:02:15

+0

SQL Server位於防火牆內。 – funkymushroom 2010-11-01 16:04:47

回答

0

我如何解決這個問題,是在我們的數據庫上創建一個名爲PDFJobs的表格。

此表包含用於運行報告還有所需的模板文件夾文件,在目標文件夾爲生成的PDF的標準。

然後,我編寫了一個命令行工具(PDFGenerator),它從該表中讀取,併爲每一行創建一個執行PDF生成的單獨線程。生成PDF後,它會將電子郵件發送到電子郵件地址(也包含在表中)。

然後,我有一個Windows計劃的任務,它運行那個PDFGenerator工具每小時。
這並不是主意,但它完成了這項工作。

最近的一次更新是,他們希望在創建工作行時觸發PDFGenerator ......我想我將不得不多做一些關於這一點的思考。

1

你至少可以做HTTP通過防火牆?如果不創建一個XML文件,但調用web服務是在防火牆內。Idealy,該Web服務將不是創建一個XML文件,但我nstead將數據放入消息隊列中。 MSMQ在這裏很有用。 然後,PDF生成器會從這個隊列中讀取XML。 通過這種方式,您不會遇到發生器拾取尚未完成的文件的情況。而且您不會浪費時間和資源輪詢文件。

希望這會有所幫助。

+0

這是一個不錯的主意,我會嘗試並讓你知道。 – funkymushroom 2010-11-01 16:05:28

+0

聽到這個很高興。如果你想讓它變得真實,請看看WCF。 WCF可以很好地寫入和讀取msmq隊列。 – 2010-11-01 20:30:14

+0

儘管我想讓它看起來很時尚,但時間限制和管理注意力仍然受到限制。由於各種原因,我沒有被允許使用MSMQ,其中之一就是我們有另一種大量使用MSMQ的工具,任何對MSMQ的使用都將被視爲潛在的影響。我用另一種方式解決了這個問題,我將在下面詳細介紹。 – funkymushroom 2010-11-09 18:09:37