Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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
.net 自定义对象返回为";“空的”;来自WCF?_.net_Wcf - Fatal编程技术网

.net 自定义对象返回为";“空的”;来自WCF?

.net 自定义对象返回为";“空的”;来自WCF?,.net,wcf,.net,Wcf,在我的WCF服务返回中明确填充了“空”实例化对象后,WCF应该返回给我一个“空”实例化对象是出于什么原因 例如,一个简单的OperationContract方法: response.Client = new Client(); response.Client.ID = 99; return response; 返回一个“空”客户机对象(在客户机接收端),并且所有字段要么为空,要么为零。但是,就在响应之前,如果我检查response.Client.ID,它将填充99 更糟糕的是,我有一个erro

在我的WCF服务返回中明确填充了“空”实例化对象后,WCF应该返回给我一个“空”实例化对象是出于什么原因

例如,一个简单的
OperationContract
方法:

response.Client = new Client();
response.Client.ID = 99;
return response;
返回一个“空”客户机对象(在客户机接收端),并且所有字段要么为空,要么为零。但是,就在响应之前,如果我检查response.Client.ID,它将填充99

更糟糕的是,我有一个error对象,我这样填充:

response.Errors.Add(new CodedError(Errors.ErrorCodes.LOGIN_AUTHENTICATION_ERROR));

但是,我可以看到接收端的错误列表吗

您的对象是标记为[Serializable]还是[DataContract]?您需要将对象标记为一个或另一个


WCF只知道如何通过网络传递原语或可序列化对象。

客户端代理是最新的吗?我见过当合同发生变化时,客户机没有更新以反映变化。

如果有人遇到这个问题,我已经找到了解决办法。由于业务需求,我已经用
[Serializable]
[DataContract]
标记了我的自定义类,这似乎是非法的,可能从.NET 3.5 SP1开始

我有一个朋友,他在.NET3.5SP1之前发送具有这两个属性的WCF对象,并且工作正常。有趣

仅供参考,我只是简单地使用了
[Serializable]
,它通过我的对象图正确发送。我需要这个来实现xml序列化


这是一个痛苦的问题,但很高兴它现在终于起作用了……

我也有同样的问题。我已经更改了服务器端对象上的名称空间,尽管我已经更新了服务引用配置,但仔细看,名称空间是旧的名称空间,因此,尽管fiddler确认数据正确地通过线路传输,但数据没有传递到我的客户机对象。删除并重新添加服务引用确实起到了作用。现在可能太晚了,但是对于这个特定的问题有一个简单的解决方法。至少有人会觉得这很有用

我有两个不同名称空间的项目

  • MyProject.Business.Entities(标有
    [DataContract]
  • MyProject.Client.Entities(用于表示业务对象的客户端实体)
  • 使用AssemblyInfo.cs并将以下行添加到每个业务和客户项目中

    [assembly: ContractNamespace("http://www.tempuri.org/MyProject",
                                  ClrNamespace = "MyProject.Business.Entities")]
    
    [assembly: ContractNamespace("http://www.tempuri.org/MyProject",
                                  ClrNamespace = "MyProject.Client.Entities")]
    
    或者,您也可以这样做

    [DataContract (Namespace = "http://www.tempuri.org/MyProject")]
    public class Account
    {}
    

    是的,模型实际上被标记为两者,因为我需要在客户端执行序列化以保存到file.interest。我在这一点上什么都没有。我会再考虑一下的。很难看不到我的模型,但这是一个相当标准的模型,尽管人们会假设,好吧,错误模型是有效的。客户端模型不起作用。模型之间存在不兼容,所以我尝试将其缩减,因为客户端有另一个自定义对象,看看它会起什么作用…Omg。我已经解决了,一个类不能在WCF中同时标记为[DataContract]和[Serializable]。对象结果为空!似乎该对象仅通过[Serializable]传输,这是我所需要的主要属性。谢谢你的帮助,太棒了!很高兴你找到了答案。我学到了一些新东西!:)感谢MattK的评论,正如你所看到的,我计算出了它是什么:(DataMemebers发生了什么事),你是否也将它们更改为[Serializable]?