WCF格式化程序在尝试反序列化消息时引发异常



我制作了两个Win窗体桌面应用程序。它们相互传递数据,数据大多以字符串格式传递。

然而,如果字符串内容变得更大,我会得到以下错误:

"格式化程序在尝试反序列化消息时引发异常:尝试反序列化参数时出错http://tempuri.org/:Code.InnerException消息为"反序列化System类型的对象时出错。字符串[]。读取XML数据时超过了最大字符串内容长度配额(8192(。可以通过更改创建XML读取器时使用的XmlDictionaryReaderQuotas对象的MaxStringContentLength属性来增加此配额。第216行,位置104。有关详细信息,请参阅InnerException。">

创建服务器的代码在这里

Try
host = New ServiceHost(GetType(MainServerCode), New Uri("http://localhost:6767"))
host.AddServiceEndpoint(GetType(MainInterface), New BasicHttpBinding(), "Editor")
host.Open()
Catch ex As Exception
End If

触发字符串的代码在这里

Try
Dim Binding As New BasicHttpBinding()
binding.MaxBufferSize = binding.MaxBufferSize * 2
binding.MaxReceivedMessageSize = binding.MaxBufferSize
binding.ReaderQuotas.MaxStringContentLength = Integer.MaxValue
Dim httpFactory As New ChannelFactory(Of TAFunc)(binding, New EndpointAddress("http://localhost:6768/XXX"))
Dim httpProxy As TAFunc = httpFactory.CreateChannel(), R(-1), D(-1) As String
httpProxy.RunScript(name, scode, type, nbar, R, D)
' array sc code contains textual data (string)
Result = R
DebugData = D
Catch ex As Exception
Debug.Print(ex.Message)
End Try

尽管我做了这么多,但它没有起作用,也犯了同样的错误。我该怎么办?

此参数在服务器和客户端之间序列化,因此我们还需要考虑在服务器端添加配置
服务器端

BasicHttpBinding binding = new BasicHttpBinding();
binding.MaxReceivedMessageSize = int.MaxValue;
binding.ReaderQuotas.MaxArrayLength = int.MaxValue;
binding.ReaderQuotas.MaxStringContentLength = int.MaxValue;
binding.ReaderQuotas.MaxDepth = int.MaxValue;
binding.ReaderQuotas.MaxBytesPerRead = int.MaxValue;
using (ServiceHost sh = new ServiceHost(typeof(MyService), uri))
{
sh.AddServiceEndpoint(typeof(IService), binding, "");
sh.Open();

如果问题仍然存在,请随时告诉我。

最新更新