ASP.NET会话和存储使用COM互操作的对象

ASP.NET会话和存储使用COM互操作的对象,asp.net,com,session,interop,Asp.net,Com,Session,Interop,我正在一个asp.net网站上工作。我们必须使用com互操作与旧的vb6 activex组件交互。在许多情况下,组件依赖于接收上下文对象(它本身就是vb6 activex组件)作为参数。上下文对象的构造成本相当高 因此,一个想法是上下文对象只构造一次并存储在asp.net会话中。但是,如果此对象只是activex组件周围的.net包装器,那么在会话中持久化此类对象是明智的还是明智的 此外,上下文对象包含特定于用户的信息,因此可以使用.net HttpRuntime缓存进行持久化,但需要特定于用户

我正在一个asp.net网站上工作。我们必须使用com互操作与旧的vb6 activex组件交互。在许多情况下,组件依赖于接收上下文对象(它本身就是vb6 activex组件)作为参数。上下文对象的构造成本相当高

因此,一个想法是上下文对象只构造一次并存储在asp.net会话中。但是,如果此对象只是activex组件周围的.net包装器,那么在会话中持久化此类对象是明智的还是明智的

此外,上下文对象包含特定于用户的信息,因此可以使用.net HttpRuntime缓存进行持久化,但需要特定于用户的密钥

我了解asp.net会话的其他限制和需要注意的事项


以稍微不同的方式问这个问题:他们在存储一个.net对象(它只是com对象的包装器)时有什么问题吗

我会将其保存在缓存中,这样就不会为每个用户构造一次,除非这是所需的效果。

我会将其保存在缓存中,这样就不会为每个用户构造一次,除非这是所需的效果。

我认为一个请求阻塞另一个请求会很快出现问题

默认情况下,ASP.NET在其线程上初始化COM,以将该线程置于多线程单元中。VB6组件充其量只是公寓模型。这意味着,当MTA线程创建组件时,如果已经存在一个组件(对于ASP.NET工作进程,它将不存在),它将被放入主STA中,或者专门为STA创建一个新线程。无论哪个MTA线程创建组件,对于无法处理MTA模型的组件,始终使用相同的STA。这意味着对这些组件的每次调用都使用相同的线程,因此并发调用必须排队等待

要告诉ASP.NET初始化单线程组件的COM,这至少会导致在与执行页面相同的线程上创建对象,请将
AspCompat
属性添加到指令中


我不会缓存对象,因为在重用对象时,它们很可能会出现跨线程问题。

我认为一个请求阻塞另一个请求会很快出现问题

默认情况下,ASP.NET在其线程上初始化COM,以将该线程置于多线程单元中。VB6组件充其量只是公寓模型。这意味着,当MTA线程创建组件时,如果已经存在一个组件(对于ASP.NET工作进程,它将不存在),它将被放入主STA中,或者专门为STA创建一个新线程。无论哪个MTA线程创建组件,对于无法处理MTA模型的组件,始终使用相同的STA。这意味着对这些组件的每次调用都使用相同的线程,因此并发调用必须排队等待

要告诉ASP.NET初始化单线程组件的COM,这至少会导致在与执行页面相同的线程上创建对象,请将
AspCompat
属性添加到指令中


我不会缓存这些对象,因为它们在重用时很可能存在跨线程问题。

它包含特定于用户的信息。因此,不能在会话之间共享。应该说得更清楚。它包含用户特定的信息。因此,不能在会话之间共享。应该说得更清楚。