WCF 错误“对象图中可以序列化或反序列化的最大项目数为 65536" [英] WCF Error "Maximum number of items that can be serialized or deserialized in an object graph is '65536'"

查看:17
本文介绍了WCF 错误“对象图中可以序列化或反序列化的最大项目数为 65536"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 WCF 调用中收到以下错误:

I am receiving the following error on a WCF call:

可以在一个项目中序列化或反序列化的最大项目数对象图是'65536'

Maximum number of items that can be serialized or deserialized in an object graph is '65536'

我阅读了大量论坛帖子,其中很多都提到修改 app.config 和 web.config 以指定新行为以允许更大的对象图.我已经这样做了,这就是我在这些文件中的内容:

I've read a ton of forum posts and many of them mention modifying the app.config and web.config to specify new behavior to allow larger object graphs. I've done that and this is what I have in those files:

WPF 项目上的 App.Config:

<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior name="">
      <serviceMetadata httpGetEnabled="false" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="">
      <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
    </behavior>

  </endpointBehaviors>

</behaviors>

<services>
  <service name="digiPM.Shell.LogOutPMSEMRService.PMSEMRLogOutService">
    <!--<endpoint address="" binding="basicHttpBinding" contract="digiPM.Shell.LogOutPMSEMRService.IPMSEMRLogOutService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8732/Design_Time_Addresses/digiPM.Shell.LogOutPMSEMRService/PMSEMRLogOutService/" />
      </baseAddresses>
    </host>-->
    <endpoint address="" binding="netTcpBinding" name="NetTcpBindingEndpoint" contract="digiPM.Shell.LogOutPMSEMRService.IPMSEMRLogOutService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" name="MexTcpBidingEndpoint" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:8732/Design_Time_Addresses/digiPM.Shell.LogOutPMSEMRService/PMSEMRLogOutService/" />
      </baseAddresses>
    </host>
  </service>
</services>

<!--binding info - removed this for the sake of readability for this post -->

服务项目上的web.config:

<system.serviceModel>

<bindings>
  <wsHttpBinding>
      <binding name="WSHttpBinding_Services" closeTimeout="01:10:00" openTimeout="01:10:00" receiveTimeout="01:10:00" sendTimeout="01:10:00" bypassProxyOnLocal="false" 
               transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" 
               messageEncoding="Mtom" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="4096" maxStringContentLength="2147483647" maxArrayLength="524288" maxBytesPerRead="524288" maxNameTableCharCount="524288" />
          <reliableSession ordered="true" inactivityTimeout="01:10:00" enabled="false" />

          <security mode="None">

          </security>
      </binding>
  </wsHttpBinding>
</bindings>

<behaviors>
  <serviceBehaviors>
    <behavior name="digiPM.Service.Behavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
      <dataContractSerializer maxItemsInObjectGraph="2147483647" />
    </behavior>

  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="customObjectQuota">
      <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
    </behavior>
  </endpointBehaviors>
</behaviors>

<services>
  <service behaviorConfiguration="digiPM.Service.Behavior"
    name="digiPM.Service.AddressCrudService">
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_Services"
                name="AddressCrudServiceEndPoint" bindingNamespace="urn:Dawliasoft.Sculpture"  contract="digiPM.Services.Contracts.IAddressCrudService" behaviorConfiguration="customObjectQuota" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"  behaviorConfiguration="customObjectQuota" />
  </service>

 <!--<more services defined with same configuration as above..>-->

  </services>


</system.serviceModel>

然而,这并没有帮助.请注意,APP.CONFIG 中引用的服务不是我遇到问题的服务.

This, however, hasn't helped. Note that the services referenced in the APP.CONFIG are not the services I am having issues with.

我还尝试了以下方法:

  • 将这些属性添加到服务实现中:[DataContract(IsReference=true)]、[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any, MaxItemsInObjectGraph = 2147483646)]

  • added these attributes to the service implementation: [DataContract(IsReference=true)], [ServiceBehavior(AddressFilterMode = AddressFilterMode.Any, MaxItemsInObjectGraph = 2147483646)]

编写了一个自定义 DataContractSerializerOperationBehavior 类,用于设置 MaximumObjectsInGraph 和 IsReference 行为.还添加了自定义属性以应用此服务实现.为了杂乱,我没有发布代码,但如果有人认为它会有所帮助,可以添加它.

wrote a custom DataContractSerializerOperationBehavior class that set MaximumObjectsInGraph and IsReference behavior. Also added custom Attribute to apply this the service implementations. For the sake of clutter, I didn't post the code, but can add it if anyone thinks it would be beneficial.

想法?想法?我从这里去哪里?

Thoughts? Ideas? Where do I go from here?

提前致谢!

推荐答案

我刚刚意识到您的 WPF 配置文件不正确.因此,我删除了所有评论,因为它们假设了有效的 WCF 配置.您的 WPF 配置文件不正确……它需要说客户端"而不是服务……您是否在 Visual Studio 中使用添加服务引用"?如果是这样,它应该为您创建了正确的配置文件.

I just realized that your WPF config file is not right. So, I deleted all my comments because they were assuming a valid WCF configuration. Your WPF config file is not right ... it needs to say "Client" instead of service ... Are you using "Add Service Reference" in Visual Studio? if so, it should have created the correct config file for you.

否则,请参阅 MSDN 以获取正确的格式您的 WPF 项目中的客户端配置文件.

Otherwise, please refer to MSDN for the correct format for your client config file in your WPF project.

这篇关于WCF 错误“对象图中可以序列化或反序列化的最大项目数为 65536"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆