InnerException消息是'对象图中可以序列化或反序列化的最大项数是'65536'。

时间:2018-04-17 04:59:16

标签: asp.net vb.net web-services

我可以看到这个问题已被多次询问,但它们都与WCF有关。搜索了一段时间后,我一直无法找到解决此错误的方法。

我有一个从Web服务中提取数据的WinForms应用程序。 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 个答案:

答案 0 :(得分:0)

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

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

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

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

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

      2. 重启应用程序。如果仍无法正常工作,您可能需要重启PC。

      3. 我在link找到了解决方案。只需将答案放在此处,以防将来页面出现故障。