我们有一个SSIS包,在我们的服务器上从BI运行时可以很好地执行。
我们有一个客户端应用程序调用服务器上的服务,并且被调用的服务执行SSIS包。
此包在BI中执行良好且没有错误。该软件包生成一些PDF文件,然后使用PDFSharp组合这些PDF文件,以便我们以后可以通过电子邮件发送单个PDF文件。该包还将一些记录插入到数据库表中,以便我们可以跟踪生成的这些文件。
但是,一旦客户端应用程序调用该服务来执行SSIS包,我们就会收到以下错误消息:
有谁知道我们收到这些错误消息的原因?
服务用于执行此SSIS包的代码是以下C#代码:
//Get the package's information from the database.
List<SSISPackage> lsSSISPackages = MatchDataTableToTypeProperties<SSISPackage>(dt);
SSISPackage package = lsSSISPackages.FirstOrDefault();
string packageLocation = $"{package.Path}/{package.Name}";
Microsoft.SqlServer.Dts.Runtime.Application app = new Microsoft.SqlServer.Dts.Runtime.Application();
DtsEventListeners eventListener = new DtsEventListeners();
Package pkg = app.LoadPackage(packageLocation, eventListener);
//Get and set parameters.
string[] arrParameters = package.Parameters.Split(',');
foreach (string parameter in arrParameters)
{
var param = pkg.Parameters.Add(parameter, TypeCode.Int32);
param.Value = 1;
}
try
{
DTSExecResult pkgResults = pkg.Execute(null, null, eventListener, null, null);
string errors = eventListener.Errors;
MessageBox.Show($"Execution result: {errors}");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
现在,用于从SSIS包中捕获错误的DtsEventListeners类如下所示:
public class DtsEventListeners : DefaultEvents
{
public string Errors { get; set; }
public override bool OnError(DtsObject source, int errorCode, string subComponent,
string description, string helpFile, int helpContext, string idofInterfaceWithError)
{
// Add application-specific diagnostics here.
string err = $"Error in {source}/{subComponent} : {description}";
Errors += $"{err}{Environment.NewLine}{Environment.NewLine}";
return false;
}
}
但是,对于我的生活,我不能理解为什么这会从C#服务端失败。我不知道为什么会失败,也不知道如何解决它。
如果有人有任何想法,我们将非常感谢您的帮助!