首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用COM互操作的ASP.NET会话和存储对象

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

Stack Overflow用户
提问于 2008-10-08 20:51:19
回答 2查看 1.4K关注 0票数 0

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

因此,一种想法是构造上下文对象一次,并将其存储在asp.net会话中。然而,如果这个对象仅仅是activex组件的一个.net包装器,那么在会话中持久化这样的对象是否明智或可取呢?

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

我了解使用asp.net会话aspnet-session question时的其他限制和需要注意的事项。

以一种稍微不同的方式来问这个问题:他们在存储.net对象时有什么问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-10-08 21:47:37

我认为当一个请求阻塞另一个请求时,你很快就会遇到问题。

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2008-10-08 20:52:41

我会在缓存中持久化它,这样它就不会为每个用户构造一次,除非这是想要的效果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/184840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档