将SSIS包部署到服务器会导致错误

时间:2016-01-13 08:40:23

标签: .net sql-server ssis business-intelligence

我开发了一个C#控制台应用程序项目来运行SSIS包,我正在使用.Net DTS库来执行:

using Microsoft.SqlServer.Dts.Runtime;
.
.
var app = new Application();
var package = app.LoadPackage(@"ACE.dtsx", null);
package.Execute();
foreach (var error in package.Errors)
{
   logger.Error(error.ErrorCode + " " + error.Description);
}

我从Visual Studio本地工作,并且没有报告执行packge的错误。

但是当我部署到安装了Integration Services并且安装了SQL Server配置管理器验证的服务器以及显示SQL Server集成服务的Windows服务时,我得到了一个不同的错误,具体取决于我是部署在x86还是x64 /任何CPU平台上。

86

当我将.Net库设置为x86并进行部署时,我在行上收到以下错误:

var app = new Application();
  

错误:主控制流MicrosoftSqlServer.Dts.Runtime.DtsComException期间发生错误:找不到Integration Services类。确保在运行该应用程序的计算机上正确安装了Integration Services。此外,如果您运行的是64位应用程序,请确保已安装64位版本的Integration Services。 ---> System.Runtime.InteropServices.COMException:由于以下错误,检索具有CLSID {C3EC6BC0-D544-47D5-A0F2-2825E47DBE24}的组件的COM类工厂失败:80040154未注册类(HRESULT异常:0x80040154(REGDB_E_CLASSNOTREG))。      在Microsoft.SqlServer.Dts.Runtime.Application..ctor()

这似乎表明它无法在服务器上找到集成服务或库。这对我来说很有意义,因为服务器运行64位Windows和64位SQL Server。

x64 /任何Cpu

如果我使用x64或Any Cpu平台部署,则错误变为:

  

错误:主控制流System.BadImageFormatException期间发生错误:无法加载文件或程序集“Microsoft.SqlServer.DTSRuntimeWrap,Version = 12.0.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91”或其中一个依赖项。尝试加载格式不正确的程序。   文件名:'Microsoft.SqlServer.DTSRuntimeWrap,Version = 12.0.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91'

这对我来说没有意义,因为库现在是与服务器匹配的64位。

环境

本地:

  • Windows 7 x64
  • SQL Server 2014企业版64位,包括已安装集成的所有服务。
  • 安装了Data Tools for Business Intelligence的Visual Studio 2013

服务器:

  • Windows Server 2012 x64
  • 带有Integration Services的SQL Server 2012 x64。我不确定如何查看确切的版本,因为没有本地数据库实例可以运行'SELECT @@ Version'。
  • 数据库托管在其他地方。此服务器主要用于运行计划任务以在该数据库上执行SSIS包。

我打算在本地安装SQL Server 2012,所以我的版本与服务器匹配,但后来我意识到这不是那个版本重要的,它是商业智能的Visual Studio数据工具,因为它给了我.Net包装类和目前为止我可以告诉我,VS2013没有选择使用什么版本。除此之外,它肯定与旧的SQL Server版本兼容。

商业智能数据工具是一个x86安装程序,但我认为这纯粹是因为Visual Studio以x86身份运行,并且不会影响x64 运行时支持。

如何成功部署?

1 个答案:

答案 0 :(得分:2)

开发

  • SQL Server 2014企业版64位,包括已安装集成的所有服务。

服务器

  • 带有Integration Services的SQL Server 2012 x64

您的调用者报告的应用程序的GUID是C3EC6BC0-D544-47D5-A0F2-2825E47DBE24 - 这是SQL Server 2014版本。但是,当你去运行它时,它找不到它,因为实际的服务器只安装了2012 5572B772-88AC-4A35-96F8-E28626AC7E8F

您需要在Local实例上执行安装,以便设置SQL Server 2012 SQL Server Integration Services服务(开发人员版本很好),可能是SQL Server数据工具,但我不知道那。

这应该可以为您提供2012年的所有DLL版本。然后,您将完成使用所有2014程序集的SQL Server 2012版本的过程。

从许可角度来看,确实意识到服务器本身上的Integration Services Service的安装计算作为SQL Server的许可实例。每当您认可您的许可时,这可能是一个痛苦且昂贵的解释,为什么您只有运行SSIS包的基于每个核心的许可产品。使用SQL Server 2012中的项目部署模型,如果您在某处安装了实际的数据库,您可能会查看通过存储过程调用调用软件包是否也可以满足您的需求,而无需额外的许可单独服务器的费用。