2012-06-07 86 views
2

我們在部署網站時從ASP.NET運行SSIS包時遇到問題。我們已將該軟件包加載到MSDB中的Integration Services服務器中。當我們從SQL Server Management Studio嘗試包時,它運行正常。當我從Visual Studio執行代碼時,加載到服務器中的包運行正常。問題出現在頁面部署到服務器時:沒有捕獲到異常,也沒有記錄錯誤,但程序包不執行。我們只是在Windows事件查看器中看到一個錯誤:「Package」失敗。「 ASP.NET頁面通過「sysadmin」訪問SQL Server以及源Excel文件所在的共享來運行帳戶的模擬。從ASP.NET執行SSIS包時出錯

這裏是代碼調用SSIS包:

public void executePkg(string pkgAddr, string pkgServer, int periodID) 
    { 
     logger.Info(string.Format("Execution of SSIS Package '{0}' in server '{1}' started.", pkgAddr, pkgServer)); 
     string pidvar = "User::periodid"; 
     string pkgLocation; 
     Package pkg; 
     Application app; 
     DTSExecResult pkgResults; 
     app = new Application(); 
     pkgLocation = pkgAddr; 
     try 
     { 
      pkg = (Package)app.LoadFromSqlServer(pkgAddr, pkgServer, null, null, null); 
      Variables vars = pkg.Variables; 
      int varCount = vars.Count; 
      bool varExist = vars.Contains(pidvar); 
      pkg.VariableDispenser.LockOneForWrite(pidvar, ref vars); 
      vars[pidvar].Value = periodID; 
      pkg.Variables[pidvar].Value = periodID; 
      vars.Unlock(); 
      pkgResults = pkg.Execute(); 
     } 
     catch (Exception ex) 
     { 
      logger.Error(ex.Message); 
     } 
    } 

任何幫助,將不勝感激。

注:只是一個小回調,ASP.NET不再模仿,相反,應用程序池與服務帳戶下運行。這兩種情況的行爲是相同的。

回答

1

有沒有對開發框和服務器體系結構的差異?

一定要注意,如果你在32位環境中開發一個包,並想在64位環境中運行該程序包,連接管理器必須是64位兼容。某些連接管理器(如Excel)只能在32位環境中工作。

0

它似乎是你的主要問題是缺乏錯誤報告。

第一張:

您的SSIS包是否啓用了錯誤日誌記錄功能?我打開它,只是爲了OnError事件。這將在數​​據庫中創建一個名爲sysssislog的表,並在那裏寫入錯誤(以及您選擇的其他日誌)。

https://technet.microsoft.com/en-us/library/ms138020%28v=sql.105%29.aspx

值得注意的是:當我這樣做,SSIS創建一個名爲域\ username.sysssislog而不是dbo.sysssislog表。如果您的軟件包執行此操作,則只需刪除命名錯誤的表並創建dbo.sysssislog,以便軟件包可以在其中寫入錯誤。

二:

由於您使用對象模型來執行你的包,你可以捕捉你的軟件包中的錯誤,並做一些與他們。對於調試,我只是將它們彈出消息窗口,以便我可以看到問題所在。

這是怎麼我都做到了,但我不知道它的運轉良好:

  Dim errReport As String 
      Dim errors As DtsErrors = pkg.Errors 

      Dim errItem As Boolean = errors.Contains(0) 

      errReport = "No Error" 
      If (errItem) Then 
       Dim firstEItem As DtsError = errors(0) 
       Dim ex As New Exception("The file could not be loaded. Please submit a helpdesk ticket.") 
       Throw ex 
       errReport = "The following error occurred: " + firstEItem.Description 
      End If 


      MsgBox(errReport, MsgBoxStyle.OkOnly, pkgResults.ToString) 

我希望這有助於。