QBWC: "Индекс вне диапазона" в do_authenticate()
Я использую QuickBooks WebConnector 2.2.0.71 и мой веб-сервис WCF (в.NET 4.6.1). После нажатия "Обновить выбранное" в WebConnector serverVersion
а также clientVersion
запросы успешно обработаны, но authenticate
не удалось:
20170705.06:31:00 UTC : QBWebConnector.SOAPWebService.do_authenticate() : *** Calling authenticate() with following parameters:<userName="username"><password=<MaskedForSecurity>
20170705.06:31:00 UTC : QBWebConnector.SOAPWebService.do_authenticate() : QBWC1012: Authentication failed due to following error message.
Index Out Of Range.
More info:
StackTrace = в QBWebConnector.WebService.do_authenticate(String& ticket, String& companyFileName)
Source = QBWebConnector
Ответ моей службы WCF (от тестового клиента WCF):
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header />
<s:Body>
<authenticateResponse xmlns="http://developer.intuit.com/">
<authenticateResult xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:string>a3f10876-e027-419d-8dd8-3752a852ddae</a:string>
<a:string>nvu</a:string>
<a:string>3</a:string>
<a:string>60</a:string>
<a:string>60</a:string>
</authenticateResult>
</authenticateResponse>
</s:Body>
</s:Envelope>
В документе сказано: "Ваш обратный вызов должен возвращать строковый массив с 4 возможными элементами. Первый элемент содержит NONE или NVU (недопустимый пользователь), BUSY., Либо пустую строку, либо строку, являющуюся именем файла компании QB". но в примерах первый элемент - это маркер guid, поэтому я посылаю массив из 5 элементов.
Та же ошибка произошла, когда я отправляю не массив, а значение int, так что я думаю - может быть, что-то не так с моим xml?
2 ответа
Решено добавлением [XmlSerializerFormat]
в IService
так отвечать отвечаю
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header />
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<authenticateResponse xmlns="http://developer.intuit.com/">
<authenticateResult>
<string>d0297d33-859d-4259-a598-5fbf328bac3b</string>
<string>nvu</string>
<string>3</string>
<string>60</string>
</authenticateResult>
</authenticateResponse>
</s:Body>
</s:Envelope>
Страница 21 из Руководства программиста QBWC.
Ваш возврат к вызову authenticate будет строковым массивом с максимум четырьмя строками.
Первым членом массива является токен сеанса, который может быть GUID или чем-то еще, что вы хотите использовать для идентификации сеанса. Этот токен будет возвращен QBWC при последующих обратных вызовах в сеансе.
Второй член массива строк может содержать множество вещей.
а. Если имя пользователя и пароль в вызове аутентификации недействительны, вы должны указать значение "nvu".
б. Если, с другой стороны, пользовательские данные действительны, но у вас нет работы для этого пользователя, вы должны указать значение "none".
с. Если у вас есть работа для этого пользователя, вы можете указать полный путь к компании, которая будет использоваться в текущем обновлении.
д. Если вы хотите использовать какую-либо компанию QuickBooks, открытую на стороне клиента, просто укажите пустую строку.
Необязательный третий член массива строк содержит количество секунд ожидания до следующего обновления. Вы можете использовать это, чтобы фактически сказать, что клиент QBWC не беспокоит вас в течение определенного времени.
Необязательный четвертый член массива строк содержит количество секунд, которое будет использоваться как время MinimumRunEveryNSeconds для вашей веб-службы, которое сообщает QBWC, как часто необходимо обращаться к вашей веб-службе.
Я не уверен, почему Аутентификация в конце документа отличается от этой.