2010-09-02 79 views
0

我花了好幾天的時間試圖解決這個問題,但仍然堅持這一點,我已經在本網站上發佈了一些問題,但沒有得到滿意的答案。我想這次更加清楚,希望能得到更好的答案。我已經通過這篇文章已經http://blogs.msdn.com/b/michen/archive/2007/03/22/running-ssis-package-programmatically.aspx ,這裏是我的問題(我需要運行從ASP.NET SSIS包)以編程方式運行SSIS軟件包的問題

  1. 選項1是不適合我,因爲它可能如果回收工作的歷程消耗內存

  2. 選項2也是不適合的,因爲在創造一個新的進程,並傳遞上下文給新工藝的安全問題看起來對我來說很複雜(根據支持文章)

  3. 選項3不適合使用SQL Server代理運行SSIS包是不允許的我工作的公司(我猜它需要在應用服務器上安裝數據庫引擎,不確定)。但SSIS安裝在應用程序服務器上。

  4. 選項4 & 5將擁有相同的問題選項1 & 2.

我想剩下的唯一選擇現在是創建一個Windows服務,並開始從ASP.NET服務。但是這會允許並行運行多個包嗎? OR還有更好的替代解決方案嗎?請告訴我。謝謝。

回答

0

我已經建立了這樣的事情在過去與

  • 監視數據庫表
  • 是插入工作在數據庫表
  • 一個asp.net頁面Windows服務的每個作業是(一套)ssis包
  • windows服務在啓動時配置了一個池中的多個線程
  • 每次windows服務看到一個新的工作時,它檢查是否有線程可用並使用System.Diagnostics.Process使用dtexec.exe運行的作業啓動線程(可以使用SSIS類庫,但是我找到了dtexec。exe更有用
  • 線程(和作業)在Windows服務的安全上下文中運行,因此使用Windows服務使用的Windows憑據
  • 作業完成時,Windows服務更新數據庫表

你可以改變這個沒有表格,並從Windows服務公開一個wcf服務與異步方法,當作業完成時返回。我不確定如何在這種情況下使用多線程,但我認爲通過使它不同,你也可以使它具有固有的多線程性。

+0

這個答案給了我一些希望。我正在考慮在WCF服務(從ASP.NET網頁異步調用)中調用DTEXEC並執行該包。這比使用Windows服務更好嗎?因爲我需要能夠並行運行多個軟件包。我猜DTEXEC應該使用與WCF服務相同的上下文。但是如果需要的話(如果它運行很長時間的話),我還需要殺死正在運行特定程序包的DTEXEC進程(通過傳遞程序包名稱)。不知道該怎麼做。 – RKP 2010-09-02 14:46:17

+0

你會在哪裏主持WCF服務? 另一種選擇是使用AppFabric並公開一個WorkflowService,它使用SSIS庫而不是dtexec運行SSIS包。在這種情況下,您可以監控運行 軟件包oob。 我仍然認爲Windows服務是最簡單的選擇。這個Windows服務只需要擔心運行包。然後你可以使用任何其他方式來安排這個軟件包:直接從asp,使用wcf服務或其他任何方式。 – stombeur 2010-09-03 06:50:40

+0

windows服務選項的問題是它一次只能執行一個包。如果有許多軟件包等待服務,這可能會導致延遲,因爲如果我使用WCF服務,我猜測我可以從ASP.NET網頁向WCF服務發出多個異步請求,並且WCF服務可以爲每個服務啓動DTEXEC進程請求和這種方式我可以有多個包並行運行,避免任何延遲。 WCF服務將託管在IIS中,並配置一個具有運行包的權限的帳戶(假設DTEXEC繼承安全上下文,不確定)。 – RKP 2010-09-03 11:24:29

0

您在windows服務的正確軌道上。

不用從asp.net運行SSIS包,而是讓asp.net將條目放入隊列或列表中。然後獲取windows服務來監控列表。

當Windows服務發現列表中的項目在列表中時,它將運行該列表項引用的SSIS包。

這樣做的好處是,網頁無需等待SSIS包運行。

+0

謝謝。但我認爲使用這種方法,我一次只能執行一個包,就好像我可以從WCF服務啓動DTEXEC(ASP.NET調用WCF服務),然後我可以有多個包並行運行。但不知道它運行的安全上下文。 – RKP 2010-09-02 13:22:00

+0

默認情況下,代碼將在應用程序池的安全上下文中執行。默認情況下,這是ASPNET用戶。 – 2010-09-02 14:32:03

相關問題