2010-11-25 41 views
0

我有一个服务从WebApp中托管的代理接收数据。 DataMembers设置为Order = *,我也尝试添加isRequired = true。问题是在序列化和反序列化的60个信息字段中,相同的3个字符串字段始终缺失(空)。我已经运行调试,它向我显示数据完整地从客户端浏览器到代理服务(从JSON序列化)。代理服务然后将其发送到Windows服务,其中3个字段在反序列化后丢失。WCF DataContract反序列化缺少3个字符串字段,即使对于订单集

我试着设置字段顺序不同,但似乎没有任何工作。它始终是3个缺少字段的简单字符串,通常不超过10-20个字符。还值得一提的是,这些麻烦的DataMembers正确地填充在该程序的所有其他领域。

代理服务代码如下

public TransactionResult Update(MyObj obj, String ItemOne, String ItemTwo) 
    { 
     MyService.MyServiceClient proxy = new MyService.MyServiceClient("WSHttpBinding_IMyService"); 
     proxy.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation; 
     TransactionResult result = proxy.Update(obj, ItemOne, ItemTwo); 
     proxy.Close(); 
     return result; 
    } 

Windows服务代码是

[OperationBehavior(Impersonation = ImpersonationOption.Required)] 
public TransactionResult Update(MyObj obj, String ItemOne, String ItemTwo) 
{obj is missing same 3 values at this point...} 

对象的数据成员

[DataMember(Order = 56)] 
    public String ItemTwo 
    { 
     get 
     { 
      ... 
     } 
     set 
     { 
      ... 
     } 
    } 

回答

0

思想的一个示例:

  • 确保这些字段不计算(因此重置或在你的代码改变,这取决于deserializatin顺序)
  • 确保你没有定义默认值属性,序列化使用此来优化带宽
  • 化妆务必不要宣布将破解这些领域进行
  • 尝试另一个WCF绑定(HTTP,NETTCP,...)
  • 勾上OnDeserialized,OnDeserializing事件一些自定义的行为,并检查数据是否有
0

要检查的一件事可能是签名中的附加参数与实体上的属性具有相同的名称。

为什么不改名的签名参数(记得要回蓝您的客户服务参考/代理)

public TransactionResult Update(MyObj obj, String ItemOne, String ItemTwo) 

public TransactionResult Update(MyObj obj, String NewItemOne, String NewItemTwo)