将任意数据与COM线程上下文相关联

时间:2019-02-07 05:58:29

标签: .net com

好的。这是一个可怕的问题。这是关于旧的东西。所以,我想祝你好运。

我正在处理一种情况,我在.NET,VB6 COM对象和IIS中的Classic ASP之间进行了一些繁重的互操作。我正在尝试设计一种解决方案,以使.NET对象可用于通过COM对象发起的.NET中的线程。 .NET内部可用的线程本地存储,当调用堆栈从COM interop进入.NET时,该线程与调用堆栈相关联。

例如,某些客户端代码将从附加了某些内容的服务中检索对COM对象的引用。然后,客户端代码将调用COM对象。然后,COM对象将调用.NET对象。从.NET,我可以得到附件。就像TLS一样。

更疯狂的版本:我正在从.Net的DI容器中检索COM对象。我想在这些COM对象上附加一些内容,以便当它们回调.NET时,我知道它们来自哪个容器。

COM很奇怪。还有很多我可能不知道的事情。例如,企业服务。和上下文。和奇怪的交易范围的东西。而且.NET也很奇怪,所以也许我可以在CCW中使数据可用的方式进行操作。或者,我可以将.NET对象包装在代理中,然后将代理移交给COM。哦最后一个听起来很有希望。我想知道是否可以创建一个动态.NET代理,然后将其作为原始接口编组到COM。

我可以这样做吗?

无论如何,请称重。

1 个答案:

答案 0 :(得分:0)

如果所有COM对象都是用VB6编写的,则它们都是单线程的。因为STA只有一个线程,并且对该STA中对象的所有调用都将编组到该线程。

如果您创建一个包装VB6对象的适配器,包括进行创建,并且该适配器也是单线程的,则它将始终与VB6对象位于同一线程上。从适配器访问线程本地存储将与VB6对象的线程本地存储匹配。

请注意,VB6代码也可以使用线程本地存储,但这意味着找到正确的代码来为过时的平台调用必要的Win32方法。