C# DataContract类中的WCF私有成员引用变为NULL
我在web服务层的WCF中有一个特别的问题 当我在WCF中实例化我的类的私有成员(这个实例化不是null)时,几秒钟后,它变成null 我一直在试图诊断这个问题,但到目前为止没有结果 所以我想请你们帮我解决这个问题 多谢各位 因此,我的代码如下:C# DataContract类中的WCF私有成员引用变为NULL,c#,wcf,web-services,private,datacontract,C#,Wcf,Web Services,Private,Datacontract,我在web服务层的WCF中有一个特别的问题 当我在WCF中实例化我的类的私有成员(这个实例化不是null)时,几秒钟后,它变成null 我一直在试图诊断这个问题,但到目前为止没有结果 所以我想请你们帮我解决这个问题 多谢各位 因此,我的代码如下: [DataContract] public class RemoteWagon { private readonly IWagon _Wagon; public RemoteWagon(IWagon Wagon) {
[DataContract]
public class RemoteWagon
{
private readonly IWagon _Wagon;
public RemoteWagon(IWagon Wagon)
{
_Wagon = Wagon; //_Wagon isn't null here
}
~RemoteWagon()
{
Trace.WriteLine("Do nothing");
}
[DataMember]
public RemoteBreakpoint Breakpoint
{
set
{
if (value == null)
{
_Wagon.Breakpoint = null; //_Wagon member is NULL...
}
else
{
//... useless code in this context.
}
}
}
}
看起来,如果您想要序列化,您应该将其标记为DataMember,并放弃其上的“只读”。如果您不想将其序列化,请向我们展示您构造和填充此对象的代码。如果DataContractSerializer对您的类进行了序列化和反序列化(例如,在客户端和服务器之间发送数据时),则会发生这种情况 一些参考: 如果是这样的话,那么一个可能的解决方案对我来说是有效的: 因此,快速检查和修复此问题(我假设您希望自己初始化字段,而不是序列化它)的方法是创建方法:
[OnDeserializing]
private void OnDeserializing(StreamingContext c)
{
_Wagon = initializeWagon();
}
然而,正如您可能注意到的,您将无法在反序列化过程中传递消息-您必须以不同的方式初始化它
另一方面,如果您想要序列化,那么将其公开为
public[DataMember]
property是所有实例化和使用RemoteWang
类的过程,这些都发生在单个WCF调用的上下文中,或者跨多个调用?在您检查的两次之间,remotewag
的实例是否已通过线路从客户端发送到服务器??基本上,WCF只会序列化一个类的公共形状——所有用[DataMember]
属性标记的东西。其他任何东西都不会通过电线传输,因此在通信链路的另一端将不可用。