我有一个遗留的托管(.net)应用程序,它通过互操作调用COM代码,然后通过COM可调用包装器再次在托管代码中返回。这样做时,它确实使用System.Remoting.Messaging.CallContext使数据流通过执行路径。
我需要编写一个涵盖此路径的集成测试。为此,我在测试的Arrange部分设置了CallContext。但是,当执行转换回托管代码时,我看到CallContext.GetData()返回NULL 我还看到当代码转换为native / com代码时,当前线程id会发生变化。
但是,如果我明确设置测试执行公寓模式MTA,那么我不会看到线程ID被更改,尽管托管代码和非托管代码之间的跳跃。和Context.GetData按预期工作。
有人可以解释为什么会出现这种行为(尤其是线程和公寓模型的变化)