0

我在通过 .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] 属性。我不确定这是否是正确的方法,所以也许这可能是问题的一部分?

4

1 回答 1

0

我的猜测(我强调这只是一个猜测)是您的订单错误-您是

  1. 从远程主机检索项目
  2. 更新它(在主机上),然后
  3. 期望客户端中的值更新为您在主机上更改的值。

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

于 2012-08-30T00:59:36.727 回答