MTA单元中的.NET STA Com对象
目前我正在一个站点(MVC)上工作,它大量使用ajax从响应缓慢的异步资源请求数据 但是我有一个问题,每个请求都必须首先得到授权,授权的一部分是通过执行Server.CreateObject(“Rsacookieapi.RSACookie”).GetUserName()来获取当前的RSA用户名。问题是,这个特定的com对象不在MTPartments上运行,只在StatPartments上运行(它们不提供任何可选的.net组件,因此我们必须使用这个组件),因此CreateObject失败 通过大量研究,我已经通过创建一个自定义路由处理程序来解决这个问题,该处理程序在STA中执行控制器上下文(相当于在webforms上do ASPCOMPAT=TRUE),但这带来了一个进一步的问题,当从STA中执行控制器上下文时,我无法再创建异步控制器方法 所以我开始思考,如果我可以在STA中创建COM对象,并以某种方式创建一个委托/代理给它,这样就可以从MTA访问它,那么一切都会很好 作为概念证明,我有一个全局变量myComObject,我通过在STA请求(/StaController/Index)中执行CreateObject来填充它 然后,我尝试从MTA请求(/MtaController/Index)访问MyMobject 好消息是,这是可行的。似乎clr正在为我处理所有编组 所以我开始编写一些代码,在STA中生成一个新线程,但问题是我仍然需要将HttpContext.Current.Server(HttpServerUtilityBase)传递给线程,当我调用.CreateObject时,线程只会在.Server对象的MTA上执行它 我希望这有意义?澄清:MTA单元中的.NET STA Com对象,.net,multithreading,com,rsa,marshalling,.net,Multithreading,Com,Rsa,Marshalling,目前我正在一个站点(MVC)上工作,它大量使用ajax从响应缓慢的异步资源请求数据 但是我有一个问题,每个请求都必须首先得到授权,授权的一部分是通过执行Server.CreateObject(“Rsacookieapi.RSACookie”).GetUserName()来获取当前的RSA用户名。问题是,这个特定的com对象不在MTPartments上运行,只在StatPartments上运行(它们不提供任何可选的.net组件,因此我们必须使用这个组件),因此CreateObject失败 通过大量
HKEY\U CLASSES\U ROOT\CLSID\{guid}
并将ThreadingModel键更改为“两者”
然后进行压力测试