我们在部署网站时从ASP.NET运行SSIS包时遇到问题。我们在MSDB中的Integration Services服务器中加载了包。当我们从SQL Server Management Studio尝试包时,它可以正常运行。当我从Visual Studio执行代码时,服务器中加载的包正常运行。将页面部署到服务器时会出现问题:没有捕获异常且未记录任何错误,但程序包未执行。我们只是在Windows事件查看器中看到一条错误:“程序包”“失败了”。 ASP.NET页面运行模拟具有对SQL Server的“sysadmin”访问权限的帐户以及源Excel文件所在的共享。
以下是调用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不再模仿,而是AppPool与服务帐户一起运行。两种情况的行为都是一样的。
答案 0 :(得分:1)
开发盒和服务器的架构是否存在差异?
请务必注意,如果在32位环境中开发软件包并希望在64位环境中运行软件包,则连接管理器需要符合64位标准。某些连接管理器(如Excel)仅在32位环境中工作。
答案 1 :(得分:0)
我不确定这个问题的确切答案,但是,我有一个值得检查的建议。 SSIS包是安装到SQL Server数据库还是文件系统,因为每个包都需要不同的方式来访问包。
希望这是解决方案。
答案 2 :(得分:0)
似乎您的主要问题是缺少错误报告。
首先:
您的SSIS包是否启用了错误记录?我打开它,仅用于OnError事件。这将在db中创建一个名为sysssislog的表,并在那里写入错误(以及您选择的任何其他日志)。
https://technet.microsoft.com/en-us/library/ms138020%28v=sql.105%29.aspx
值得注意:当我这样做时,SSIS会创建一个名为domain \ 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)
我希望这会有所帮助。