'类型使用.不支持 NetDataContractSerializer' - 为什么使用 NetData
本文关键字:为什么 NetData 不支持 类型 NetDataContractSerializer | 更新日期: 2023-09-27 18:36:50
此错误是由于正在使用 NetDataContractSerializer (NetDCS),但引用程序集未共享并包含在客户端中。这个问题不是关于这个的。
这个问题是关于防止NetDataContractSerializer被使用;或者至少找出客户端使用它的原因。
-
为什么客户端使用 NetDCS,而我还没有配置它这样做?
根据我发现的文章/帖子,这是一个明确的步骤;我没有为项目或 WCF 客户端手动启用此功能 - 是否有机器/框架覆盖在某个地方击败我?
-
我可以强制客户端使用正常的数据合同序列化程序 (DCS) 吗?
如果是这样,是否可以基于每个类型或每个命名空间强制执行此操作?通用框架"基类型"已在引用程序集中;理想情况下,我可以用NetDCS解决这些问题 - 但我会放弃NetDCS来"修复"这个问题。
如果没有,是否有任何更严厉的措施可用,例如修改响应/响应XML?
(我可以手动添加任何所需的合约解析器并处理损坏的生成名称。
WCF 测试客户端(始终使用 DCS?)"工作正常",这使我相信当前问题与从项目中使用服务时发生的 NetDCS 反序列化有关。我可能误解了 WCF 测试客户端的工作方式。
这是错误消息(可以通过添加 NetDCS 的引用程序集来解决,但我不想这样做),以确保我没有误解这个问题。我 95% 确定这是在客户端中的反序列化上。
格式化程序在尝试反序列化消息时抛出异常..
NetDataContractSerializer不支持使用类型'..'作为仅获取集合。 请考虑使用 CollectionDataContractAttribute 属性或 SerializableAttribute 属性标记类型,或者向属性添加资源库。
和堆栈摘要:
Server stack trace:
at System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter)
at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ref ProxyRpc rpc)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService
WCF 客户端配置是"简单"的默认配置,没有在运行时修改行为的代码。
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_myServiceBinding" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="endPoint.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_myServiceBinding"
contract="MyServive.IMyServiceEndPoint" name="BasicHttpBinding_serviceEndPoint" />
</client>
</system.serviceModel>
服务引用在 VS 2013 中生成,项目面向 .NET 4。带有服务引用的项目和测试项目都是简单的类库 - 即。它们不承载在 IIS 中。
可以应用 XmlSerializerFormatAttribute (http://msdn.microsoft.com/en-us/library/system.servicemodel.xmlserializerformatattribute.aspx) 来强制类使用 XML 序列化程序。