C# 无法在C中通过.NET远程处理检索int属性#
我在通过.NET远程处理频道读取属性时遇到问题。这是我课程的开始:C# 无法在C中通过.NET远程处理检索int属性#,c#,.net,.net-remoting,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
[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; }
}
[可序列化]
公共类机器ID
{
私有字符串mySystemDeviceSerial=null;
///
///返回安装Windows的硬盘驱动器序列号。
///
公共字符串SystemDeviceSerial
{
获取{return mySystemDeviceSerial;}
}
私有字符串mySystemName=null;
///
///返回系统的当前名称。
///
公共字符串系统名
{
获取{return mySystemName;}
}
私有字符串mylastror=string.Empty;
///
///返回上次发生的错误。如果未发生错误,则返回字符串。为空。
///
公共字符串错误
{
获取{return mylastror;}
}
私有int myPort=-2;
公共int端口
{
获取{返回this.myPort;}
设置{this.myPort=value;}
}
所有属性在本地计算机上都可以很好地访问。但是,当我试图通过.NET远程处理通道从客户端读取端口属性时,我没有得到分配给myPort的值,而是得到初始值-2。我对此感到困惑,因为所有字符串属性都可以很好地读取。有什么想法吗?我知道吗没有正确序列化这个类
值得注意的是,我为使这个类和成员可序列化所做的只是在类的顶部添加[serializable]属性。我不确定这样做是否正确,所以这可能是问题的一部分?我猜(我强调这只是一个猜测)是您的顺序错了-您是错的
当您使用
[Serializable]
,您将对象转换为字节流,通过线路将其传输到远程处理客户端,然后在客户端上将其重新配置为新对象。这意味着客户端副本与服务器副本完全断开连接。如果希望客户端副本始终显示来自服务器的更新值(不重新传输整个对象),使其像@Hans Passant建议的那样从MarshallByRefObject继承。这使客户端复制一个透明代理,每当您访问服务器的某个属性时,该代理都会查询该服务器。两台计算机是否都有包含此类的完全相同的程序集?这是唯一一个具有setter的属性。它将按值进行封送处理。因此不知怎么的,er的对象副本没有得到更新。从MarshallByrefobect派生可能是一个快速修复方法。仅供参考,你知道远程处理已经被弃用,取而代之的是WCF吗?@JohnSaunders:我知道,但是更新到WCF的决定并不落在我的肩上,尽管我已经推动了一段时间。我们有一个“如果它没有坏,就不要修理它“尽管我们有很多理由可以从中受益,但我们还是要保持这种心态WCF@PeterRitchie是的,在这一点上,他们是这样做的,但随着我们发布更新,这并不总是这样。我会尝试一下,让你知道它是如何进行的,但myPort变量是在任何客户端能够连接到服务器之前设置的。