' NetDataContractSerializer'不支持使用类型.. - 为什么要使用NetDataContractSerializer?

时间:2015-01-08 16:32:41

标签: c# wcf datacontractserializer service-reference netdatacontractserializer

导致此错误的原因是正在使用NetDataContractSerializer(NetDCS),但参考程序集未共享并包含在客户端中。这个问题与此无关。

这个问题是关于阻止使用 NetDataContractSerializer;或者至少找出客户使用它的原因。

  • 为什么客户端在我没有配置NetDCS时会使用NetDCS?

    根据我发现的文章/帖子is an explicit step;我没有手动为项目或WCF客户端启用此功能 - 是否有一台机器/框架覆盖了最适合我的地方?

  • 我可以强制客户端使用普通 DataContractSerializer(DCS)吗?

    如果是这样,我可以在每个类型或每个命名空间的基础上强制执行此操作吗?通用框架“基本类型”已经在引用的程序集中;理想情况下,我可以通过NetDCS保持这些解决方案 - 但我会全身心地放弃NetDCS以“解决”这个问题。

    如果没有,是否有更多可用的措施,例如更改响应/响应XML?

    (我可以手动添加任何所需的合约解析器并处理损坏的生成名称。)

使用WCF测试客户端(它总是使用DCS?)“工作正常”,这使我相信当前问题与使用项目服务时发生的NetDCS反序列化有关。我可能误解了WCF测试客户端的工作原理。

这是错误消息(可以通过添加NetDCS的引用程序集来解决,但我想要这样做)以确保我不会误解该问题。我95%确定这是在客户端中的反序列化

  

格式化程序在尝试反序列化消息时抛出异常..

     

' NetDataContractSerializer 不支持使用类型'..'作为只获取集合。考虑使用CollectionDataContractAttribute属性或SerializableAttribute属性标记类型,或者向属性添加setter。'

堆栈摘要:

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中托管。

1 个答案:

答案 0 :(得分:0)

您可以应用XmlSerializerFormatAttribute(http://msdn.microsoft.com/en-us/library/system.servicemodel.xmlserializerformatattribute.aspx)来强制您的类使用XML序列化程序。