asp.net - InnerException 消息为 'Maximum number of items that can be serialized or deserialized in an object graph is ' 65536'。

标签 asp.net vb.net web-services

我可以看到这个问题已经被问过好几次了,但是它们都与WCF有关。经过一段时间的搜索,我一直无法找到该错误的解决方案。

我有一个 WinForms 应用程序,可以从 Web 服务中提取数据。 Web 服务是用 WebForms/asp.net 编写的。

我连接到网络服务的代码是:

Dim _DownloadStock As srShopDownload.shop_downloadsSoapClient
Dim binding As New STKBinding("STKBinder")
NewEndPoint = New EndpointAddress("https://www.example.com/web_services/downloads.asmx")
            _DownloadStock = New srShopDownload.shop_downloadsSoapClient(binding._Binder, NewEndPoint)
_StockcodesList = _DownloadStock.GetStockcodes

我的 _Binder 代码是

Public Sub New(ByVal BinderName As String)

    _Binder = New BasicHttpBinding()
    _Binder.Name = BinderName

    _Binder.CloseTimeout = TimeSpan.FromMinutes(1)
    _Binder.OpenTimeout = TimeSpan.FromMinutes(1)
    _Binder.ReceiveTimeout = TimeSpan.FromMinutes(10)
    _Binder.SendTimeout = TimeSpan.FromMinutes(1)
    _Binder.AllowCookies = False
    _Binder.BypassProxyOnLocal = False
    _Binder.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard

    _Binder.MaxBufferSize = 100000000
    _Binder.MaxBufferPoolSize = 12000000
    _Binder.MaxReceivedMessageSize = 100000000

    _Binder.MessageEncoding = WSMessageEncoding.Text
    _Binder.TextEncoding = System.Text.Encoding.UTF8
    _Binder.TransferMode = TransferMode.Streamed
    _Binder.UseDefaultWebProxy = True

    _Binder.ReaderQuotas.MaxDepth = 2147483647
    _Binder.ReaderQuotas.MaxStringContentLength = 2147483647
    _Binder.ReaderQuotas.MaxArrayLength = 2147483647
    _Binder.ReaderQuotas.MaxBytesPerRead = 2147483647
    _Binder.ReaderQuotas.MaxNameTableCharCount = 2147483647

    _Binder.Security.Transport.ClientCredentialType = HttpClientCredentialType.None
    _Binder.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None
    _Binder.Security.Transport.Realm = ""

    _Binder.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName
    _Binder.Security.Message.AlgorithmSuite = Security.SecurityAlgorithmSuite.Default
    _Binder.Security.Mode = BasicHttpSecurityMode.Transport

End Sub

在Web服务方面,这只是一个基本功能:

<WebMethod()>
Public Function GetStockcodes() As List(Of Stockcodes)

    Return GetStockcodes()

End Function

我已经看到了您应该更改客户端和服务器上的 serviceBehaviors 的答案,但我不知道如何在不使用 WCF 的情况下做到这一点。

最佳答案

我找到了一个解决方法,只是放在这里以防有人遇到同样的问题。

  1. 在电脑上打开此文件夹。它是 .NET Framework 文件夹:%windir%\Microsoft.NET\

  2. 在此目录中,您应该看到文件夹:Framework 和 Framework64(在 64 位环境中)。这两个文件夹都包含一些具有特定 .NET 版本名称的文件夹(例如 v2.0.50727)。您需要浏览每个文件夹并查看它是否包含 CONFIG 目录以及名为 machine.config 的文件。 (或者只搜索 machine.config)

  3. 打开并编辑每个 machine.config 文件,并在 system.serviceModel 节点下添加以下子节点:

<commonBehaviors>
    <endpointBehaviors>
        <dataContractSerializer maxItemsInObjectGraph="2147483647" />
    </endpointBehaviors>
    <serviceBehaviors>
        <dataContractSerializer maxItemsInObjectGraph="2147483647" />
    </serviceBehaviors>
</commonBehaviors> 
  • 编辑后,它应该看起来像这样:
  • <system.serviceMode>
        (...)
        <extensions>
            (...)
        </extensions>
        <client>
            (...)
        </client>
        <commonBehaviors>
              <endpointBehaviors>
                  <dataContractSerializer maxItemsInObjectGraph="2147483647" />
              </endpointBehaviors>
              <serviceBehaviors>
                  <dataContractSerializer maxItemsInObjectGraph="2147483647" />
              </serviceBehaviors>
        </commonBehaviors> 
        (...)
    </system.serviceModel>
    
  • 如果配置文件中缺少system.serviceModel节点,则需要手动创建该节点。

  • 重新启动应用程序。如果仍然无法正常工作,您可能需要重新启动电脑。

  • 我在这个link找到了解决方案。只需将答案放在这里,以防将来页面出现故障。

    关于asp.net - InnerException 消息为 'Maximum number of items that can be serialized or deserialized in an object graph is ' 65536'。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49870224/

    相关文章:

    c# - Umbraco ?umbDebugShowTrace=true 不工作

    vb.net - RichTextBox 中每行文本中的特定单词的颜色

    c# - 如何为用作 DataGrid 的 ItemsSource 的项目的集合属性中的每个项目生成并绑定(bind)一列

    web-services - 如何在不安装到服务器的情况下使用 wkhtmltopdf

    java - Jax-WS 连接到任何 Web 服务

    asp.net - jQuery 单击事件处理程序为复选框调用两次

    c# - Entity Framework 返回不同的记录问题

    javascript - 当我按下 asp.net 超链接时,我想在浏览器中打开新选项卡

    mysql - 显示多个值(value)成员(member)

    visual-studio-2008 - 如何确定为什么在VS2008中阻止将Web服务引用添加到我的项目中?