我遇到了通过.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]属性。我不确定这是否是正确的方法,所以也许这可能是问题的一部分?
答案 0 :(得分:0)
我的猜测(我强调这只是猜测)是你的订单错了 - 你是
当您使用[Serializable]
时,您将对象转换为字节流,通过线路将其传输到远程客户端,然后将其重新构建到客户端上的新对象中。这意味着客户端的副本与服务器的副本完全断开连接。如果您希望客户端的副本始终显示服务器的更新值(不重新传输整个对象),请将其继承自MarshalByRefObject,如@ Hans-Passant建议的那样。这使得客户端复制一个透明代理,每次访问其中一个属性时都会查询服务器。