Где можно увеличить maxStringContentLength, чтобы WCF мог передавать большие строки? - PullRequest
9 голосов
/ 18 февраля 2011

Хорошо, я настроил и протестировал маленький сервис WCF. Клиент создает строку и передает ее в метод службы, а затем служба сохраняет ее в виде файла. Прекрасно работает с небольшими объемами тестовых данных, но когда я пробую это с тем, что он должен делать - пропустить некоторые сериализованные объекты .net - он падает с ошибкой

Форматировщик выдал исключение, пока пытаясь десериализовать сообщение: Ошибка в десериализации тела запроса сообщение для максимальной строки операции превышена квота длины содержимого (8192) при чтении данных XML. Эту квоту можно увеличить, изменив свойство MaxStringContentLength в объекте XmlDictionaryReaderQuotas, используемом при создании средства чтения XML

Итак, я нашел это и обнаружил, что свойство MaxStringContentLength должно быть установлено для тега «readerQuotas» внутри тега файла конфигурации, например:

     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />

Так что я меняю это. Я изменяю его в файле App.config моего клиента. Я изменяю его в файле App.config и файле Web.config моего сервера. Я изменяю его в файле App.config моего проекта модульного тестирования. И ничего из этого не работает - я продолжаю получать ту же ошибку.

Интересно и разочаровывающе, когда я запустил WcfClient.exe, чтобы посмотреть на мою службу, подключился к ней и взглянул на файл конфигурации (Client.dll.config), я был ошеломлен, обнаружив, что это авто сгенерированный файл не содержал никаких моих изменений и был сброшен до:

  <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />

Я понятия не имею, откуда они берут эти значения - нигде во всем моем решении они не установлены. Поэтому он должен использовать значения по умолчанию, но я не понимаю, почему он использует значения по умолчанию, когда я предоставил пользовательские файлы конфигурации как на сервере, так и на клиенте.

Может кто-нибудь помочь мне распутать это?

Ответы [ 2 ]

4 голосов
/ 18 февраля 2011

1) Возможно ли, что ваша конечная точка неправильно ссылается на пользовательскую привязку? Не могли бы вы опубликовать свои разделы привязки и конечной точки?

2) WcfTestClient не использует ваш сервис или клиентские настройки для установки собственной конфигурации. Вам нужно вручную отредактировать файл Client.dll.config с помощью SvcConfigEditor, чтобы настроить данные привязки клиента WcfTestClient перед выполнением службы.

Вы можете сохранить изменения конфигурации WcfTestClient, если посмотрите в меню «Инструменты» -> «Параметры». Для получения дополнительной информации о WcfTestClient, проверьте это: http://msdn.microsoft.com/en-us/library/bb552364.aspx

0 голосов
/ 24 мая 2017

Вам также нужно увеличить maxReceiveMessageSize и т. Д. На самой привязке, как это ...

имя привязки = "BasicHttpsBinding_IService1" maxReceivedMessageSize = "34000000" maxBufferPoolSize = "34000000" maxBufferSize = "34000000"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...