#c# #asp.net-core #visual-studio-2019 #generic-list #connected-services
Вопрос:
В ан ASP.NET Основной проект веб-сайта 3.1 Я использую подключенные сервисы для устаревшего WFC. В VS я выбираю Добавить -> Подключенная служба. При добавлении службы я устанавливаю CollectionMappings в Generic.List, чтобы прокси создавал типы List<T> вместо массивов.
Сегодня я пошел обновить подключенную службу, что я обычно делаю, сначала удалив ее, а затем создав заново (опция редактирования/обновления отсутствует). Однако все изменилось. Добавить -> Подключенная служба исчезла — заменена на >Управление подключенными службами.
Но теперь при добавлении сервиса — несмотря на выбор «Generic.List» — прокси генерирует массивы. В результате чего тысяча строк моего кода теперь подчеркнута красным цветом.
Я поискал в Сети эту проблему и нашел несколько ссылок за 2010 год и несколько лет назад, но не смог найти никаких решений.
Сгенерированные классы все еще имеют [System.Runtime.Сериализация.Атрибут DataContract… поэтому я не думаю, что он использует XmlSerializer, который, по — видимому, не соблюдает настройки сопоставления коллекций.
Я также заметил, что версия Svcutil изменилась. Раньше это было 2.0.2, а теперь 2.0.3
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.2")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.3-preview3.21351.2")]
Единственное решение, которое я могу придумать на данный момент,-это вручную обновить Reference.cs
файл и внести следующие изменения поиска/замены:
System.Threading.Tasks.Task<T[]>
…чтобы:
Task<System.Collections.Generic.List<T>
У кого-нибудь есть опыт в этом деле? Похоже, это ошибка в обновлении Svcutil (обратите внимание на предварительный просмотр3.21351.2). И если сопоставления коллекций больше не поддерживаются, почему они все еще отображаются в диалоговом окне?
Комментарии:
1. WCF действительно плохо сочетается с современным кодом на C#. Я рекомендую вам создать типы служб WCF-прокси и контрактов в отдельном
.csproj
проекте, а затем ссылаться на них в своем ASP.NET Основной проект. Но да, вероятно, есть проблемы с предварительной сборкойsvcutil
, которую вы каким-то образом используете.2. Другой вариант-установить более старую версию VS, которая, как вы знаете, работала (установите ее на виртуальную машину, не рискуйте, что параллельные установки VS сломают вашу систему) и сгенерируйте код там, а затем скопируйте файлы.
3. @Dai спасибо за обратную связь — хорошие идеи для обхода проблем. Я думаю, что более старая версия VS на виртуальной машине, вероятно, проще всего. так раздражает, когда MS что-то ломает. Если бы мой клиент потратил деньги, я бы переписал их устаревший WCF в более современный базовый веб-API Restful. Но это большая работа, и им также придется обновлять клиентов, которые ее потребляют.
4. По крайней мере, это все еще оплачиваемые часы для вас, верно? 😀
5. @Dai да, конечно. Мне просто нужно сбросить ограниченное количество волос 🙂