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

Deploying SSIS Package to Server Causes Error

我已经为 运行 SSIS 包开发了一个 C# 控制台应用程序项目,我正在使用 .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 时没有报告任何错误。

然而,当我部署到安装了集成服务的服务器时,SQL 服务器配置管理器以及显示 SQL 服务器集成服务的 Windows 服务验证,我得到了一个不同的错误取决于我是部署在 x86 平台还是 x64/Any CPU 平台。

x86

当我将我的 .Net 库设置为构建为 x86 并部署时,我收到以下错误:

var app = new Application();

ERROR: Error occurred during master control flow Microsoft.SqlServer.Dts.Runtime.DtsComException: An Integration Services class cannot be found. Make sure that Integration Services is correctly installed on the computer that is running the application. Also, make sure that the 64-bit version of Integration Services is installed if you are running a 64-bit application. ---> System.Runtime.InteropServices.COMException: Retrieving the COM class factory for component with CLSID {C3EC6BC0-D544-47D5-A0F2-2825E47DBE24} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). at Microsoft.SqlServer.Dts.Runtime.Application..ctor()

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

x64/Any Cpu

如果我使用 x64 或任何 Cpu 平台进行部署,错误将变为:

ERROR: Error occurred during master control flow System.BadImageFormatException: Could not load file or assembly 'Microsoft.SqlServer.DTSRuntimeWrap, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. An attempt was made to load a program with an incorrect format. File name: 'Microsoft.SqlServer.DTSRuntimeWrap, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'

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

环境

本地:

服务器:

我打算在本地安装 SQL Server 2012,所以我的版本与服务器匹配,但后来我意识到重要的不是那个版本,而是 Visual Studio 商业智能数据工具,因为它提供了我是 .Net 包装器 类,据我所知,我无法选择使用 VS2013 的哪个版本。此外,这肯定与旧的 SQL 服务器版本兼容。

The Data Tools for Business Intelligence 是一个 x86 安装程序,但我被引导相信这纯粹是因为 Visual Studio 运行 宁作为 x86 而不会影响 x64 运行时间支持。

如何部署成功?

发展

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

服务器

  • SQL Server 2012 x64 with Integration Services

GUID for Application as reported by your invoker is C3EC6BC0-D544-47D5-A0F2-2825E47DBE24 - that's the SQL Server 2014 version. But, when you go to run it, it can't find it because the actual server only has 2012 installed which would be 5572B772-88AC-4A35-96F8-E28626AC7E8F

您需要在本地实例上执行安装以设置 SQL Server 2012 SQL 服务器集成服务服务(开发版很好),可能 SQL 服务器数据工具,但我不知道

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

从许可的角度来看,请注意在服务器本身上安装 Integration Services 服务 算作 作为 SQL 服务器的许可实例。每当您获得许可时,这可能是一个痛苦且代价高昂的解释,说明为什么您拥有基于 per-core 的许可产品仅针对 运行 SSIS 包。使用 SQL Server 2012 中的项目部署模型,如果您在某处安装了实际的数据库,您可能会查看通过存储过程调用调用包是否也可以满足您的需求,而无需额外的许可费用服务器。