Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataContract类中的WCF私有成员引用变为NULL_C#_Wcf_Web Services_Private_Datacontract - Fatal编程技术网

C# DataContract类中的WCF私有成员引用变为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) {

我在web服务层的WCF中有一个特别的问题

当我在WCF中实例化我的类的私有成员(这个实例化不是null)时,几秒钟后,它变成null

我一直在试图诊断这个问题,但到目前为止没有结果

所以我想请你们帮我解决这个问题

多谢各位

因此,我的代码如下:

[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]
属性标记的东西。其他任何东西都不会通过电线传输,因此在通信链路的另一端将不可用。