Добавить ссылку на службу "___ уже определено" - PullRequest
0 голосов
/ 22 апреля 2011

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

Когда я изменил свои добавления на все базовые типы (строка, дата, int и т. Д.), А затем добавил веб-сервис в клиентский проект, я получил ошибку «[enumtype] уже определен». Это произошло в файле reference.cs, поэтому я открыл его. Конечно же, были двойные перечисления. Плюс было множество вспомогательных (сериализующих) функций. Дубликат enum был взят из кода, который был там до того, как я выбрал этот веб-сервис для работы. Ранее это не вызывало проблем.

Я открыл файл reference.cs для предыдущего (успешного) обслуживания. У него не было дубликатов или функций, а также я заметил разницу между записями, которые были там. Reference.cs, который не удалось скомпилировать, имел этот дополнительный атрибут в нескольких местах: [System.ServiceModel.XmlSerializerFormatAttribute ()]

Я также вижу, что мой новый неудачный код использовал строку [], а старый использовал ArrayOfString. Я не намеренно изменил это, но, должно быть, каким-то образом установил что-то другое в процессе.

У кого-нибудь есть несколько подсказок?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 апреля 2011

После долгих экспериментов я обнаружил следующее:

Наш веб-сервис до этого момента использовал классы Запрос / Ответ для ввода и вывода.Требовались в 1.0 и были перенесены с этого.Я попытался создать простую точку входа, которая отправляла строку и возвращала строку.Это скомпилировано нормально, но:

  • Хотя вы можете использовать обычные типы для ввода и вывода, если вы используете обмены типов запросов / ответов для других точек входа, то вы не можете.
  • Смешанный метод запроса / ответа и обычные типы будут компилироваться, но он не будет успешно импортирован (по крайней мере, в Visual Studio 2008).То, что в итоге создается, похоже, является попыткой создать входные и выходные классы для всех функций, чтобы перевести их в их сложные типы, наряду с типами запросов / ответов, которые создают повторяющиеся записи и не компилируются.
  • Это также означает, что вы не можете отправить объект запроса и вернуть строку (как я узнал, что это не разрешено) - это вызвало ошибку в модульном тесте, который запустил меня по этому пути.

Поэтому, если у вас есть веб-служба запроса / ответа, все функции должны следовать этому протоколу.

0 голосов
/ 22 апреля 2011

Вы пытались удалить сервисную ссылку из проекта и повторно добавить ее? Возможно, вам придется вручную удалить часть (или все) содержимого serviceModel. Если это единственная ссылка на службу, то обязательно удалите также содержимое элемента serviceModel.

После того, как все прошло, повторно добавьте ссылку на сервис. Если у вас все еще есть проблемы, возможно, метаданные службы генерируют недопустимый WSDL, вызывая повторяющиеся перечисления.

ОБНОВЛЕНИЕ: просто для проверки недействительности WSDL, вы можете попробовать создать служебный прокси вручную, используя утилиту командной строки SvcUtil . Он генерирует ваш прокси-код, как это делает Visual Studio, и может дать вам больше информации для устранения неполадок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...