Получение странной ошибки от QBFC. Этот код не работает:
var qbRequest = sessionManager.CreateMsgSetRequest("US", 7, 0);
qbRequest.Attributes.OnError = ENRqOnError.roeStop;
var qbQuery = qbRequest.AppendCustomerQueryRq();
// Don't get all fields (would take forever) - just get these...
qbQuery.IncludeRetElementList.Add("ListID");
qbQuery.IncludeRetElementList.Add("Phone");
qbQuery.IncludeRetElementList.Add("AltPhone");
qbQuery.IncludeRetElementList.Add("Fax");
var qbResponses = sessionManager.DoRequests(qbRequest);// <<- EXCEPTION: INVALID TICKET PARAMETER !!!
Однако - если я просто поставлю задержку, все работает нормально. например
System.Threading.Thread.Sleep(1000);
var qbResponses = sessionManager.DoRequests(qbRequest);// <<- WORKS FINE!!
Я обнаружил это, потому что каждый раз, когда я устанавливал точку останова в коде для отладки проблемы, проблема исчезала. Затем я узнал, что могу просто добавить туда 1-секундный сон и смоделировать такое же поведение. (кстати - задержка в полсекунды не помогает - все еще выдает исключение)
Это заставило меня почесать голову. Я инициализирую sessionManager в начале приложения и повторно использую его в своем коде. И это работает везде в этом приложении, но не здесь. Я просмотрел необработанный XML (как для запроса, так и для ответа) и не вижу там ничего плохого. В ответе просто ошибка: "Файл данных больше не открыт. Невозможно продолжить". но ничего не указывает, почему. (и файл данных открыт, после этого исключения я могу использовать его для любого количества ДРУГИХ вещей)
Я подозреваю, что это как-то связано с КОГДА вызывается этот код. У меня есть прослушиватель, который прослушивает сообщения от надстройки XDMessaging (используется для межпроцессного взаимодействия). Когда прослушиватель получает сообщение, событие вызывает этот код. Но этот код вызывается в том же приложении (и в том же потоке), что и тонны ДРУГОГО кода QBFC, который у меня есть, который делает очень похожие вещи без проблем. И если бы это была проблема с потоками, я бы подумал, что ошибка произойдет независимо от того, буду ли я спать () в течение секунды или нет.
У кого-нибудь есть идеи?