作为特定用户从ASP.NET项目调用COM DLL函数

作为特定用户从ASP.NET项目调用COM DLL函数,asp.net,iis,dll,windows-authentication,Asp.net,Iis,Dll,Windows Authentication,我试图从ASP.NET项目调用旧的VB6 dll(没有可用的源代码)。dll使用windows身份验证连接到服务器,因此我需要以特定用户的身份调用函数,而不是像现在这样调用NETWORKSERVICE 这最好在调用时确定,而不是在加载时确定,因为我正在模拟远程用户,并且希望这是调用函数的用户,而不是像现在这样的应用程序用户和NETWORKSERVICE 因此,浏览器以用户身份运行,连接到模拟用户的应用程序,以用户身份调用dll,但dll尝试以NETWORKSERVICE而不是用户身份连接到远程服

我试图从ASP.NET项目调用旧的VB6 dll(没有可用的源代码)。dll使用windows身份验证连接到服务器,因此我需要以特定用户的身份调用函数,而不是像现在这样调用NETWORKSERVICE

这最好在调用时确定,而不是在加载时确定,因为我正在模拟远程用户,并且希望这是调用函数的用户,而不是像现在这样的应用程序用户和NETWORKSERVICE

因此,浏览器以用户身份运行,连接到模拟用户的应用程序,以用户身份调用dll,但dll尝试以NETWORKSERVICE而不是用户身份连接到远程服务器

是否可以将此dll作为用户连接到远程服务器?或者,如果没有其他内容,请作为应用程序用户连接

编辑:
模拟是通过在远程用户的
WindowsIdentity
上调用
Impersonate()
在代码中完成的。我工作的公司有一个定制的
SecurityPrincipal
SecurityIdentity
,所以我不得不着手获得
windowsidential
(它比
User.Identity
更深入一些),但是我以前成功地使用过这个方法,并且已经验证了
System.Security.Principal.WindowsIdentity.GetCurrent().Name

是模拟过程中的正确用户。

我将首先尝试找出DLL作为不同用户的连接方式(可以对此提供帮助)。DLL是否可能正在与作为NETWORKSERVICE登录的框上运行的服务(或其他进程)通信?如果是这样,你可以。只是抓救命稻草,希望你能弄明白

我最终发现了问题(这只会导致其他问题,但无论如何),结果是我的页面上缺少了一个
AspCompat=“true”
。实际上,问题是我使用的是“处理程序”,而不是“页面”。处理程序不具有页面所具有的STA功能。每次我试图访问COM组件时,都会出现线程切换(模拟丢失),因为应用程序在MTA中运行,COM组件必须在STA中运行。

@rkosegi阅读了整篇文章,我在模拟。如果应用程序和DLL之间的一切都在进行中,但是DLL仍在使用另一个凭据,这可能意味着问题出在DLL代码中。发布一些关于您如何模拟的代码可能会有所帮助。默认情况下,ASP.NET的应用程序池在网络服务下运行,除非您正确切换用户上下文,否则它将继续使用此用户访问网络资源。