【发布时间】:2012-11-21 04:43:07
【问题描述】:
我正在使用RemotingServices.Marshal 和Activator.GetObject 在同一台计算机上的两个简单程序之间建立远程处理通道。
public class IpcInterface : MarshalByRefObject
{
public int number = -1;
public string text = "default";
public List<String> strings;
}
// A simplification
我已经确认频道存在并且可以进行通信,因为这两个程序都成功地将number 和text 更改为完全唯一的值(确认)。
所以我立即尝试为strings 做同样的事情。
在一个节目中,我打电话给strings.Add("1")。我尝试在第二个程序中阅读strings 的内容。它是空的。更重要的是,计数是0。我不知道为什么strings 继续拥有0 对象,就好像我从未添加它们一样。 Stack<T> 和 Dictionary<T, K> 也会发生同样的事情,我只是无法向其中添加任何元素。为了确保引用类型一般不会发生什么奇怪的事情,我还尝试在 IPC 接口类中放置一个StringBuilder,并且在两个程序中成功维护了“状态”,改变了它的值。
问题:为什么没有添加字符串列表,解决方法是什么?
我希望有经验的人能立即发现这个问题。我尝试用谷歌搜索类似的问题,但没有得到任何有用的结果。令人惊讶的是,我只有 1 个用于谷歌搜索“调试 .net 远程透明代理”的好链接。这也是我的第二个问题。如何调试透明代理对象?
- 所有对象都已正确实例化(没有 NullReferenceException;实际上没有异常)。
【问题讨论】:
-
我遇到了完全相同的问题。一些复杂的对象按预期传递了它们的成员。但是一个不起作用的简单列表让我花费了几天的故障排除和挫败感,尤其是当
MarshalByRefObject应该创建一个透明代理时。除了它是如此透明,它实际上什么都不做。令人困惑的是,还有更复杂的集合(例如X509Certificate2Collection)可以正常工作。
标签: c# .net remoting binaryformatter