WCF Форматировщик выдал исключение при попытке десериализации сообщения - PullRequest
0 голосов
/ 23 февраля 2020

Я сделал 2 Win-формы настольных приложений. Они передают данные друг другу, и это в основном в строковом формате.

Однако, если содержимое строки становится немного больше, я получаю следующую ошибку:

"Форматировщик выдал исключение при попытке десериализации сообщение: при попытке десериализации параметра http://tempuri.org/: код произошла ошибка. Сообщение InnerException было «Произошла ошибка при десериализации объекта типа System.String []. Максимальная квота длины содержимого строки ( 8192) было превышено при чтении данных * 1017. * Эта квота может быть увеличена путем изменения свойства MaxStringContentLength объекта XmlDictionaryReaderQuotas, используемого при создании считывателя XML. Строка 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

Несмотря на все, что я сделал, его не работает и дает ту же ошибку. Что мне делать?

1 Ответ

2 голосов
/ 25 февраля 2020

Этот параметр сериализуется между сервером и клиентом, поэтому нам также необходимо рассмотреть возможность добавления конфигурации на стороне сервера.
На стороне сервера.

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

Не стесняйтесь, дайте мне знать, если проблема все еще существует.

...