无法通过C#中的.NET远程处理检索int属性

时间:2012-08-29 20:48:14

标签: c# .net .net-remoting

我遇到了通过.NET远程通道读取属性的问题。这是我班上的开始:

[Serializable]
public class MachineID
{
    private string mySystemDeviceSerial = null;
    /// <summary>
    /// Returns the hard drive serial that Windows is installed on.
    /// </summary>
    public string SystemDeviceSerial
    {
        get { return mySystemDeviceSerial; }
    }

    private string mySystemName = null;
    /// <summary>
    /// Returns the current name of the system.
    /// </summary>
    public string SystemName
    {
        get { return mySystemName; }
    }

    private string myLastError = string.Empty;
    /// <summary>
    /// Returns the last error that occurred. Returns string.Empty if no error has occurred.
    /// </summary>
    public string LastError
    {
        get { return myLastError; }
    }

    private int myPort = -2;
    public int Port
    {
       get { return this.myPort; }
       set { this.myPort = value; }
    }

在本地计算机上可以正常访问所有属性。但是,当我尝试通过.NET远程通道从客户端读取Port属性时,我没有得到已分配给myPort的值,而是初始值为-2。我对此感到困惑,因为所有的字符串属性都可以被读取。有任何想法吗?我没有正确地序列化这个课程吗?

值得注意的是,我为使这个类和成员可序列化所做的一切都是在类的顶部添加[Serializable]属性。我不确定这是否是正确的方法,所以也许这可能是问题的一部分?

1 个答案:

答案 0 :(得分:0)

我的猜测(我强调这只是猜测)是你的订单错了 - 你是

  1. 从远程主机中检索项目
  2. 更新它(在主机上),然后
  3. 期望客户端中的值更新为您在主机上更改的值。
  4. 当您使用[Serializable]时,您将对象转换为字节流,通过线路将其传输到远程客户端,然后将其重新构建到客户端上的新对象中。这意味着客户端的副本与服务器的副本完全断开连接。如果您希望客户端的副本始终显示服务器的更新值(不重新传输整个对象),请将其继承自MarshalByRefObject,如@ Hans-Passant建议的那样。这使得客户端复制一个透明代理,每次访问其中一个属性时都会查询服务器。