我从我的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.dll
和Microsoft.SqlServer.DTSRuntimeWrap.dll
到我的网站的bin文件夹。
从那以后,我有一个错误:
“An attempt was made to load a program with an incorrect format”
我打开“启用32位应用程序”选项,在IIS应用程序池,并改变平台目标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)).
任何想法如何解决呢? 或者可能是我朝着错误的方向? 任何帮助表示赞赏。
MSDN参考:
阅读题目了解本地和远程执行的差异在MSDN上了解远程运行包的概念
You can only run a package outside the development environment on a
computer that has Integration Services installed
承载您的软件包的服务器应具有Integration Services
安装。 请在授权模式对于如何工作的咨询文件微软Integration Services
。 仅复制DLL文件所在的包应该运行将不解决该问题的服务器。
您可以远程调用包执行,但你仍然需要托管的软件包的服务器上集成服务。
MSDN博客文章:
运行SSIS包编程阅读1点,描述有关从ASP.NET执行SSIS包在文章中
直接从文章引用:
以编程方式使用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可能会消耗大量的内存,如果您有大量的数据,它可以触发这个回收和可靠性较低的应用程序。
一些背景
这个工程在本地计算机上,因为您的SSIS包编译版本,您有Microsoft.SqlServer.ManagedDTS.dll版本的ASP.NET项目相匹配。 现在,你需要从你的SSIS包构建的库版本匹配您的Microsoft.SqlServer.ManagedDTS.dll版本。 版本必须匹配和32位与64位库必须以及匹配。
回答
一个简单的方法来做到这一点是:SSIS脚本任务添加到您的包(在远程服务器上),然后单击“编辑脚本”按钮。 现在,看看在SSIS库引用,你应该看到的是,SSIS包加载的版本。 这意味着你需要用ASP.NET项目编译之一。 该脚本任务可以事后被删除。
文章来源: Why does class not registered error occur when running SSIS packages from ASP.NET?