asp.net 中的模拟未与 com 对象共享

Posted

技术标签:

【中文标题】asp.net 中的模拟未与 com 对象共享【英文标题】:Impersonation in asp.net not shared with com object 【发布时间】:2010-08-18 20:25:22 【问题描述】:

所以我有一个 ASP DOT NET Web 服务,它需要模拟 Windows Authenticated 用户。此 Web 服务调用 Com Api 来执行数据库操作。

模拟似乎不会持续到 Com Api 中。这是因为 Com DLL 被加载到它自己的内存空间并被视为一个单独的进程吗?还有什么方法可以处理这个问题并将模拟持久化到 Com Api Dll 中?

目前无法将 Com Api 的功能移入点网代码。 Com Api 也是用 C++ 编写的。

【问题讨论】:

这些组件之间的服务器架构是什么。如果它们分布在不同的服务器上,则可能是您正遭受“双跳”效应的困扰。 blogs.msdn.com/b/knowledgecast/archive/2007/01/31/… IIS 服务器和 Com Api 在同一台服务器上。 那篇文章指出模拟是操作系统级别的命令,这对我说这应该没问题。此外,Com Api 与同样在此测试用例中运行在同一台机器上的 Sql Server 进行通信。 我也不完全了解模仿发生在什么级别。我注意到每个进程都归用户所有。是这个过程被模仿了吗? 【参考方案1】:

所以我解决了这个问题。 Com 对象被加载到它自己的线程中,并且按照我的方式设置的模拟是线程级别的。由于我控制了 Com 对象,因此添加了 Windows 函数 CoImpersonateClient();在任何需要模拟的代码起作用之前。

这是我终于找到解决问题的文章:

http://support.microsoft.com/default.aspx?scid=kb;en-us;Q325791

【讨论】:

以上是关于asp.net 中的模拟未与 com 对象共享的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 2.0 中的模拟

asp.net 模拟从域中的服务器到域外的服务器

ASP.NET Core 中的 Windows 身份验证模拟是不是已死?

我的数据库未与我的 MVC 应用程序一起部署

asp.net mvc - 控制器共享对象的最佳方式是啥

Firefox 阻止对 ASP.NET 身份更改/模拟的简单 CORS 请求