【问题标题】:WCF The formatter threw an exception while trying to deserialize the messageWCF 格式化程序在尝试反序列化消息时引发异常
【发布时间】:2020-02-23 05:40:57
【问题描述】:

我制作了 2 个 Win-forms 桌面应用程序。它们相互传递数据,并且大多以字符串格式传递。

但是,如果字符串内容变得有点大,我会收到以下错误:

“格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数http://tempuri.org/:Code时出错。InnerException消息是'反序列化System.String []类型的对象时出错。读取 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

尽管我做了所有事情,但它不起作用并给出了同样的错误。我该怎么办?

【问题讨论】:

    标签: .net vb.net wcf wcf-binding


    【解决方案1】:

    这个参数在服务端和客户端之间是序列化的,所以我们还需要考虑在服务端添加配置。
    服务端。

    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();
    

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

    【讨论】:

    • 谢谢,我只需要添加这一行 binding.ReaderQuotas.MaxStringContentLength = int.MaxValue;在服务器代码中
    猜你喜欢
    • 2014-10-22
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    相关资源
    最近更新 更多