2009-09-10 54 views
1

我們有一個安裝在中央服務器上並從多個位置調用的SSIS 2005程序包。 該軟件包使用腳本任務來調用我在c#中編寫的.NET DLL,並將其安裝到中央服務器上的GAC中。 當我從安裝了該軟件包的服務器調用SSIS包時,一切都很好。調用與SQL Server代理程序一起使用DLL需要在調用機器上安裝DLL,而不是安裝程序包的機器

當我使用SQL Server代理從遠程服務器調用程序包時,作業失敗,報告它找不到DLL。

只是爲了測試發生了什麼,我在遠程服務器上安裝了dll,並且成功完成了包。所以看起來雖然這個軟件包安裝在一臺機器上,但是當它從另一個使用SQL Server agend調用時,它實際上是在調用機器上執行的,它是調用機器必須滿足所有的依賴關係。

這個軟件包將從幾十臺服務器中調用,其中很多服務器我都無法控制。

有沒有一種方法可以讓我安裝,配置,編譯,調用或以其他方式執行此軟件包的構建或執行方式,以便它可以在軟件包所在的機器上從GAC調用DLL安裝?

回答

1

不幸的是,您將需要更改您的設計,因爲SSIS包存儲就是這樣 - 存儲。執行始終發生在調用該程序包的機器上,並且所有引用都被視爲與該機器相關。

一種選擇是將任務添加到SSIS包中,該任務在調用機器的GAC中複製並註冊該DLL - 但是如果您無法控制某些執行機器,則不能保證正在執行的SQL代理帳戶將擁有足夠的權利來註冊一個DLL。

另一種解決方案是將DLL代碼轉換爲SSIS包內的腳本任務。這意味着將代碼從C#轉換爲VB,根據代碼的細節,這可能不是微不足道的。

沒有關於包的目的和DLL的功能的更多詳細信息,很難評估其他備選方案,但是可以考慮是否可以對包進行參數化以使其始終能夠從存儲服務器運行。

相關問題