Превышена максимальная длина запроса

У меня есть пользователь, получающий следующую ошибку в ответ на ItemQueryRq с веб-коннектором QuickBooks и IIS 7.

Версия: 1.6

Сообщение: Ошибка ReceiveResponseXML

Описание: QBWC1042: Ошибка ReceiveResponseXML Сообщение об ошибке: Исключение при запуске расширений, указанных в файле конфигурации. --› Превышена максимальная длина запроса. См. QWCLog для более подробной информации. Не забудьте включить вход в систему.

Журнал показывает, что предыдущий запрос был

QBWebConnector.SOAPWebService.ProcessRequestXML(): ответ, полученный от QuickBooks: размер (байты) = 3048763

В IIS 7 максимально допустимая длина содержимого установлена ​​​​на 30000000, поэтому я не уверен, что мне нужно изменить, чтобы разрешить этот ответ. Может ли кто-нибудь указать мне в правильном направлении?


person Timothy Freitag    schedule 05.12.2013    source источник


Ответы (2)


Скорее всего, ваш веб-сервер отклоняет HTTP-запрос веб-коннектора, потому что вы пытаетесь отправить на него слишком много данных. Однако трудно сказать наверняка, потому что не похоже, что у вас есть Web Соединитель в режиме VERBOSE, и вы действительно не опубликовали достаточно журнала, чтобы иметь возможность видеть остальную часть того, что произошло, и вы не опубликовали отправленный вами запрос ItemQuery или представление о том, сколько элементов вы возвращаемся в ответ.

Если бы мне пришлось угадывать, вы отправляете очень общий ItemQueryRq, чтобы попытаться получить ВСЕ элементы, что с высокой вероятностью возвращает МНОГО данных и, таким образом, IIS отклоняет HTTP-запрос.

Всякий раз, когда вы получаете большой объем данных с помощью веб-коннектора, вы должны использовать итераторы. Итераторы позволяют разбить набор результатов на более мелкие фрагменты.

person Keith Palmer Jr.    schedule 06.12.2013
comment
Это общий ItemQuery для всех элементов, потому что мне нужно определить, нужно ли добавлять элемент, и мне нужно избегать попыток добавить дубликат. Его список предметов состоит из 24 428 предметов, так что он, безусловно, большой. Я прошу прощения за то, что не опубликовал это в исходном вопросе, так как я думал, что размер ответа в байтах был более полезен для конфигурации IIS. Я думал, что может быть параметр IIS, который мне не хватало. Я рассмотрю реализацию итераторов, чтобы избежать этой проблемы в будущем. Спасибо за помощь. - person Timothy Freitag; 06.12.2013
comment
НП, рад помочь. Вы также можете запросить по имени элемента, а не извлекать весь список элементов, чтобы определить, существует ли элемент уже. - person Keith Palmer Jr.; 06.12.2013
comment
Или рассмотрите возможность кэширования списка элементов на своей стороне, а также периодически запрашивайте кэш и обновляйте его. Вероятно, это поможет производительности таким образом. - person Keith Palmer Jr.; 06.12.2013

Если вам просто нужно определить, существует ли элемент в QB, вы можете просто добавить IncludeRetElement в свой ItemQuery.

Поэтому вы должны опубликовать что-то вроде

<ItemQueryRq requestID="55">        
<FullName>Prepay Discount</FullName>        
<IncludeRetElement>ListID</IncludeRetElement>      
</ItemQueryRq>

И в ответе на запрос элемента просто проверьте код состояния. Если он равен 500, то это означает, что вы должны запушить свой предмет в QB, если он равен 0, то это означает, что предмет существует.

Этот обходной путь сэкономит много байтов в вашем ответе.

person Alexey Gurevski    schedule 01.10.2014