Вызов веб-службы из 64-битного приложения возвращает массив вместо одного объекта

Я работаю над обновлением приложения Winforms с 32-разрядной до 64-разрядной версии, и все прошло довольно хорошо, но у меня возникла проблема с вызовом стороннего веб-сервиса.

При запуске приложения в 32-разрядной версии определенный веб-метод возвращает объект, но при вызове метода из того же приложения в 64-разрядной версии он возвращает массив объектов.

System.ServiceModel.CommunicationException: «Произошла ошибка при сериализации тела сообщения: «Невозможно создать временный класс (результат = 1). ошибка CS0030: невозможно преобразовать тип «DDI.DAL.Subscriber.servicedItem[]» в «DDI.DAL.Subscriber.servicedItem»; ошибка CS0029: невозможно неявно преобразовать тип «DDI.DAL.Subscriber.servicedItem» в «DDI.DAL.Subscriber». .сервиседитем[]'

Я также нахожу интересным, что в сообщении об ошибке говорится, что он не может преобразовать тип массива в тип объекта, а также что он не может преобразовать объект в тип массива. Не уверен, почему он будет пытаться оба.

Я попытался обновить ссылку на службу через Visual Studio, но мои сгенерированные классы вообще не изменились.

Кто-нибудь когда-нибудь видел это? Есть какие нибудь идеи как это починить? Я чувствую себя в наручниках, так как звоню в стороннюю службу.


person jpaull    schedule 05.04.2019    source источник
comment
Вы пытались обновить ссылку на службу и посмотреть, какой фактический тип?   -  person Stefan    schedule 05.04.2019
comment
да. Как я уже отмечал выше, я попытался обновить ссылку на службу, и она по-прежнему идентифицируется как возвращающая один объект «servicedItem».   -  person jpaull    schedule 05.04.2019
comment
Я считаю маловероятным, что это связано с 64-битной и 32-битной сборкой. Может быть, что третья сторона изменила интерфейс?   -  person Stefan    schedule 05.04.2019
comment
Я бы согласился, но я запускал 32-битную версию, и она отлично работает. Исключение возникает только при запуске 64-разрядной версии. Если бы они изменили интерфейс, разве обновление ссылки на службу не поймало бы это?   -  person jpaull    schedule 05.04.2019
comment
Вы полностью перекомпилировали их обоих? (обратите внимание: это может сломать вещи ;-))   -  person Stefan    schedule 05.04.2019
comment
Приложение было перекомпилировано. Сервис является сторонним, и у меня нет к нему доступа.   -  person jpaull    schedule 05.04.2019
comment
Я понимаю; но хотя бит 64 против 32 может делать хитрые вещи; он обычно не меняет тип. ... просто говорю; происходит что-то странное. ... Боюсь, я не могу вам здесь помочь   -  person Stefan    schedule 05.04.2019
comment
Это интересно. stackoverflow.com/questions/15522589/   -  person jpaull    schedule 05.04.2019


Ответы (1)


Просматривал SO и понял, что никогда не публиковал ответ на этот вопрос.

Мне пришлось вручную отредактировать сгенерированный класс и сделать свойство двумерным массивом, чтобы запустить его в 64-разрядной версии. Внезапно это сработало. Я связался с поставщиком услуг и предупредил их о проблеме... не уверен, что они внесут изменения со своей стороны.

person jpaull    schedule 07.06.2019
comment
Мне удалось аналогичное исправление, изменив автоматически сгенерированные двумерные массивы на одномерные массивы, как описано здесь: stackoverflow.com/ а/12927390/2365949 - person StuartN; 07.08.2019