1

我从我的 asp.net 应用程序运行 ssis 包。当它在我的本地机器(32 位操作系统)上运行时,一切正常。但是当我在远程计算机(64 位操作系统)上发布我的网站时,我遇到了运行时错误:

Could not load file or assembly 'Microsoft.SqlServer.ManagedDTS, Version=10.0.0.0, 
Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot
find the file specified.

我把Microsoft.SqlServer.ManagedDTS.dllMicrosoft.SqlServer.DTSRuntimeWrap.dll放入我网站的 bin 文件夹中。

之后我遇到了下一个错误:

 “An attempt was made to load a program with an incorrect format”

我在 iis 上为应用程序池打开了“启用 32 位应用程序”选项,并在项目的属性中将平台目标更改为 x86。

现在我有以下错误:

 Retrieving the COM class factory for component with CLSID {BA785E28-3D7B-47AE-A4F9-4784F61B598A}
 failed due to the following error: 80040154 Class not registered 
 (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

任何想法如何解决这个问题?或者我可能正朝着错误的方向前进?任何帮助表示赞赏。

4

2 回答 2

2

MSDN 参考:

阅读MSDN 上的主题了解本地和远程执行之间的差异,以了解远程运行包的概念

You can only run a package outside the development environment on a 
computer that has Integration Services installed

托管您的软件包的服务器应该已经Integration Services安装。请参阅 Microsoft 文档,了解许可模型如何与Integration Services. 仅将 DLL 复制到应运行程序包的服务器不会解决问题。

您可以远程调用包执行,但您仍然需要托管包的服务器上的集成服务。

MSDN 博客文章:

以编程方式运行 SSIS 包阅读文章中描述从 ASP.NET 执行 SSIS 包的第1点

直接引用文章:

使用 SSIS 对象模型以编程方式运行包。这在此处的联机丛书中进行了详细讨论:http: //msdn2.microsoft.com/en-us/library/ms136090.aspx

Benefits:一切都在进程中运行,在执行之前设置变量或修改包非常容易。您还可以通过设置 CancelEvent 来获取有关包进度的事件或要求它停止。

Drawbacks:显然这是本地执行 - 您需要在运行应用程序的同一台机器上安装 SSIS。此方法也不能在 .NET 1.1 应用程序中使用,除非将其移至 .NET 2.0(这应该很容易做到,并且根据我的经验也可以提高性能)。

ASP.NET specific:模拟上下文不会传递给 SSIS 包创建的其他线程,因此不会模拟数据源连接。此外,可以将 ASP.NET 配置为在工作进程消耗过多内存的情况下回收它,以提高 ASP.NET 应用程序的可用性。由于如果您有大量数据,SSIS 可能会消耗大量内存,因此它会触发这种回收并降低应用程序的可靠性。

于 2013-02-15T15:12:51.460 回答
0

一些背景
这适用于您的本地计算机,因为您的 SSIS 包构建版本与您在 ASP.NET 项目中的 Microsoft.SqlServer.ManagedDTS.dll 版本相匹配。现在,您需要将 SSIS 构建包中的库版本与 Microsoft.SqlServer.ManagedDTS.dll 版本相匹配。版本必须匹配,并且 32 位与 64 位库也必须匹配。

回答
一个简单的方法是:将 SSIS 脚本任务添加到您的包(在您的远程服务器上),然后单击“编辑脚本”按钮。现在,查看 SSIS 库引用,您应该会看到 SSIS 包加载的版本。那是你需要用 ASP.NET 项目编译的那个。之后可以删除此脚本任务。

于 2015-11-11T18:10:31.687 回答