2013-12-05 10 views
0

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

Версия: 1,6

Сообщение: ReceiveResponseXML не удалось

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

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

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

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

ответ

0

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

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

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

+0

Это generic ItemQuery для всех элементов, потому что мне нужно определить, нужно ли добавлять элемент, и мне нужно избегать попытки добавить дубликат. Его список предметов - 24 428 предметов, поэтому он, безусловно, большой.Я прошу прощения за то, что не публиковал это в исходном вопросе, поскольку размер ответа в байтах был более полезным в отношении настройки IIS. Я думал, что может быть установка IIS, которой я отсутствовал. Я посмотрю на внедрение итераторов, чтобы избежать этой проблемы в будущем. Спасибо за помощь. –

+0

NP, рад помочь. Вы также можете запросить по имени элемента, а не потянуть весь список предметов, чтобы определить, существует ли элемент уже. –

+0

Или рассмотрите кэширование списка элементов на вашем конце и запрос кеша и периодическое обновление кеша. Скорее всего, это поможет. –

0

Если вам просто нужно определить, если элемент существует в QB вы можете просто добавить IncludeRetElement к вашему запрос_элемента

Таким образом, вы должны разместить что-то подобные

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

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

Это временное решения сэкономит много байт в ответ

Смежные вопросы