Iis ASP.net中的SSIS包在客户端不起作用,但在服务器上起作用

Iis ASP.net中的SSIS包在客户端不起作用,但在服务器上起作用,iis,permissions,ssis,Iis,Permissions,Ssis,环境描述 我有一个从asp.net执行的SSIS任务,包通过UNC路径从excel文件获取数据,并将数据放入sql server数据库。我已将SSIS部署到文件系统,它具有windows身份验证数据库连接,IIS用户具有数据库访问权限。我可以以AppPoolUser的身份登录,我使用AppPoolUser来托管web应用程序,并打开/修改有问题的文件,这样这些基本权限就存在了。Web应用程序是用x86编译的 工作时: 从“我的用户”或“应用池用户”下服务器上浏览器中的web应用运行时 当以我的身

环境描述

我有一个从asp.net执行的SSIS任务,包通过UNC路径从excel文件获取数据,并将数据放入sql server数据库。我已将SSIS部署到文件系统,它具有windows身份验证数据库连接,IIS用户具有数据库访问权限。我可以以AppPoolUser的身份登录,我使用AppPoolUser来托管web应用程序,并打开/修改有问题的文件,这样这些基本权限就存在了。Web应用程序是用x86编译的

工作时:

从“我的用户”或“应用池用户”下服务器上浏览器中的web应用运行时 当以我的身份登录到正在运行的服务器时 在运行BIDS的服务器上以AppPoolUser身份登录时 使用AppPoolUser从服务器上的计划任务运行时 当它不起作用时:

当从客户端浏览器运行时,即不在具有承载asp.net应用程序的IIS的计算机上运行时 我的问题

客户机和服务器有什么不同?如何使其工作?我的印象是,当运行web应用程序时,所有连接都通过AppPool用户,因此它在包括在内的任何机器服务器上的行为都应该相同

错误返回到客户端浏览器


SSIS错误代码DTS_E_OLEDBERROR。发生OLE DB错误。错误代码:0x80004005。OLE DB记录可用。来源:Microsoft Office Access数据库引擎Hresult:0x80004005说明:Microsoft Office Access数据库引擎无法打开或写入文件“\\myserver\My folder\myfile.xlsx”。它已被其他用户以独占方式打开,或者您需要查看和写入其数据的权限。。SSIS错误代码DTS_E_无法从ConnectionManager获取重新连接。对连接管理器MyExcelFileConnection的AcquireConnection方法调用失败,错误代码为0xC0202009。在此之前可能会发布错误消息,其中包含有关AcquireConnection方法调用失败原因的更多信息。组件Excel源1验证失败,返回错误代码0xC020801C。一个或多个组件验证失败。任务验证期间出现错误

运行SSIS包的c代码


Microsoft Office Access数据库引擎无法打开或写入文件“\\myserver\My folder\myfile.xlsx”。它已经被其他用户以独占方式打开,或者您需要查看和写入其数据的权限。抱歉,这对我没有帮助,您只是从我的帖子中复制了错误。您能否就如何解决此错误给出指导?我错过了一些简单的东西吗?我的问题是,为什么从web服务器上的浏览器运行而不是从客户端运行时它会工作?我的印象是,两个浏览器都将在应用程序池用户下运行,我已明确将其设置为域用户。请使用类似的工具,找出谁打开了该文件,以及使用哪个访问权限。确定,该文件未打开。我已将excel服务器文件位置添加到受信任的excel组中,但也没有成功。客户机上没有安装Integration services,但我相信这只是服务器上需要的。当你说客户机时,你在说什么?这段代码是在web浏览器中运行的,还是说在IIS中在服务器上运行的后端ASP.NET代码?
        string pkgLocation;
        Package pkg;
        Application app;
        DTSExecResult pkgResults;
        string result = string.Empty;
        string dtsErrors = string.Empty;

        try
        {
            pkgLocation = packagePath;
            app = new Application();
            pkg = app.LoadPackage(pkgLocation, null);
            pkgResults = pkg.Execute();

            foreach (DtsError local_DtsError in pkg.Errors)
                dtsErrors += " " + local_DtsError.Description;

            result = pkgResults.ToString();
        }
        catch (Exception exception)
        {
            result = exception.Message;
        }