Хорошо, я настроил и протестировал маленький сервис 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" />
Я понятия не имею, откуда они берут эти значения - нигде во всем моем решении они не установлены. Поэтому он должен использовать значения по умолчанию, но я не понимаю, почему он использует значения по умолчанию, когда я предоставил пользовательские файлы конфигурации как на сервере, так и на клиенте.
Может кто-нибудь помочь мне распутать это?