我可以看到这个问题已经被问了好几次,但它们都是关于WCF的。搜索了一段时间后,我一直无法找到此错误的解决方案。
我有一个从 Web 服务中提取数据的 WinForms 应用程序。Web 服务是用 WebForms/asp.net 编写的。
我连接到 Web 服务的代码是:
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
我已经看到了您应该更改客户端和服务器上的服务行为的答案,但我不知道如何在不使用 WCF 的情况下执行此操作。
我找到了一个解决方法,只是放在这里以防有人遇到同样的问题。
-
在PC上打开此文件夹。它是 .NET Framework 文件夹:%windir%\Microsoft.NET\
-
在此目录中,您应该看到文件夹:框架和框架64(在 64 位环境中)。这两个文件夹都包含一些文件夹,其中包含特定 .NET 版本的名称(例如 v2.0.50727)。您需要浏览每个文件夹,看看它是否包含 CONFIG 目录以及名为 machine.config 的文件。(或者只是搜索机器.config)
-
打开以编辑每个 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 节点,则需要手动创建此节点。
重新启动应用程序。如果电脑仍然无法正常工作,则可能需要重新启动电脑。
我在此链接中找到了解决方案。只需将答案放在这里,以防将来页面出现故障。