Ссылка на службу обновления не работает

Я использую Visual Studio 2008, и у меня есть клиент WCF, работающий против службы WCF. Оба они находятся в одном решении Visual Studio. После внесения изменений в свой контракт WCF я хочу обновить ссылку на службу на клиенте, чтобы изменения, внесенные в контракт, также вносились в прокси-сервер.

Моя проблема в том, что код прокси не создается повторно.

Когда я выбираю обновление ссылки на службу, происходит следующее:

  1. Отображается диалоговое окно с заголовком «Обновление ссылки на сервис 'имя-ссылки'». В этом диалоговом окне есть индикатор выполнения.
  2. Индикатор выполнения перемещается, и текст статуса в диалоговом окне изменяется на «Обновление конфигурации».
  3. Индикатор выполнения немного сдвинется, а текст статуса изменится на «Обновление конфигурации завершено».

В диалоговом окне не отображается текст «Создание \ что-то \» (не могу вспомнить точную формулировку), который я бы ускорил.

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

Я подозреваю, что проблема заключается в том, что я переименовал значение по умолчанию wsHttpBindings в app.config. Я также переименовал конечные точки по умолчанию. Причина этого в том, что мне нужно более одной конечной точки, и наличие одной с именем «some-default-name» и одной с моим собственным именем просто сбивает с толку.

Проблема с удалением службы и ее повторным добавлением заключается в том, что Visual Studio добавляет новую привязку в app.config (среди прочего), которой там не должно быть.

Кто-нибудь видел эту проблему раньше? Кто-нибудь знает решение этого?


person Nitramk    schedule 03.11.2009    source источник


Ответы (12)


Когда у нас возникала эта проблема, обычно это была одна из следующих ошибок:

  • Размер контракта увеличился и теперь настолько велик, что конфигурация WCF не позволяет его передавать.
  • В интерфейс WCF добавлен новый класс, и этот класс не помечен как сериализуемый.
  • Ошибка компиляции, из-за которой код не собирается, поэтому он использует старую dll.
person Shiraz Bhaiji    schedule 03.11.2009
comment
К сожалению, ко мне все это не относится. Когда я удаляю ссылку и добавляю ее снова, все работает нормально. Если бы контракт был таким большим или в контракте WCF были какие-либо ошибки, он не работал бы после операции удаления / добавления. - person Nitramk; 04.11.2009

Я столкнулся с этой проблемой при следующих условиях:

  1. Наши рабочие станции подключены к домену Active Directory (почти все использует аутентификацию Windows)
  2. Ссылка на службу, которую я пытаюсь обновить, размещена на локальном хосте и работает под управлением IIS Express (поэтому пользователь пула приложений работает как учетная запись пользователя личного домена разработчика)
  3. Другой разработчик добавил или обновил ссылку на проект позже меня.

Единственный способ, которым я понял, как обойти эту проблему, - отредактировать файл configuration.svcinfo для этой ссылки на службу (вам нужно будет показать все файлы проекта, чтобы увидеть его в Visual Studio), найдите следующий раздел:

userPrincipalName value="[email protected]"

и измените пользователя на пользователя моего собственного домена. После сохранения файла у меня нет проблем с обновлением ссылки, пока другой разработчик не обновит ссылку на службу (вероятно, используя тот же обходной путь). К сожалению, я не смог найти постоянного решения этой проблемы.

person Doug McClean    schedule 04.02.2014

Моя ошибка заключалась в том, что я забыл добавить атрибут OperationContract.

person Erik K.    schedule 20.07.2012
comment
В моем случае вместо этого он помечен как OperationBehavior. Он скрывался у всех на виду. - person LochnessLAM; 28.03.2018

В моем случае проблема заключалась в том, что предыдущий разработчик добавил ссылку на службу, используя имя своей машины, а не localhost. Поэтому, когда я сказал Visual Studio обновить, она подключилась к его машине, на которой не было изменений. Я изменил служебные справочные файлы и заменил его имя машины на localhost, и он смог обновить ссылку.

person Jack A.    schedule 15.10.2012

Моя проблема заключалась в том, что у меня было два метода с одинаковым именем. Все было хорошо, но я не мог обновить ссылку на сервис. Когда я пытался запустить только службу WCF, выскакивает ошибка.

person FrenkyB    schedule 11.08.2011
comment
У меня тоже была эта пробема. Компилятор не жалуется, когда вы создаете проект службы, но ссылка на службу в проекте-потребителе не обновляется. Я заметил, что если при обновлении не появляется всплывающее окно «Ваша служба размещена», значит, обновление тоже не будет работать. - person Carl Onager; 25.10.2012

Выделите службу как активный проект, нажмите F5, чтобы запустить ее в VisualStudio, она запустится в приложении для тестирования службы. Остановить отладку. Затем попробуйте обновить ссылку на ваш сервис - у меня сработало.

person flobadob    schedule 07.10.2014
comment
Это сработало для меня, щелкнул правой кнопкой мыши файл .svc, щелкнул «Обзор с помощью», выбрал IE. Закрыл страницу, затем обновил ссылку, и все заработало. Нил - person Neill; 16.04.2015

Два простых шага, чтобы решить эту проблему:

  1. Запустите службу, а затем остановите ее.

  2. Ссылка на сервис обновления.

person user3714150    schedule 06.11.2014

У меня тоже была эта пробема. Удалена ссылка на службу и создана заново.

person Ziyad Ahmad    schedule 20.11.2014
comment
Просто чтобы добавить, если кто-то столкнется с моей проблемой. Удаление из Visual Studio не сработало, мне пришлось удалить как из VS, так и из файлового проводника. - person omerts; 26.12.2017

Я знаю, что это решение немного запоздало, но после безуспешной попытки опубликованных решений это сработало:

Когда вы создаете WebService, он генерирует файл .dll, на который вы ссылаетесь в качестве ссылки на службу. Эта .dll (как многие знают) не воссоздается каждый раз, когда вы вносите изменения в файл .SVC. Вы можете увидеть это, если пойдете и просмотрите свойство даты изменения .dll файла веб-службы, в моем случае это было три часа назад!

Мое решение заключалось в том, чтобы внести соответствующие изменения в контактную информацию службы, сохранить ее и перестроить проект, что приведет к воссозданию всех .dll, отражающих изменения, внесенные вами в файл контактов службы (.svc).

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

  • Лопаты
person Spades    schedule 18.06.2014

У меня такая же проблема. Изменены некоторые контракты данных. Пытался "Обновить ссылку на службу" и изменений не увидел. Отбросил и заново добавил сервис. По-прежнему не заметил изменений при написании кода в клиенте. Открыл моего клиента с помощью Reflector и увидел, что типы сервисов изменились! Так почему же intellisense все еще показывал старые свойства? Перезапустил Visual Studio, и изменения наконец отобразились в intellisense.

person eric1825    schedule 27.05.2015

У меня была такая же проблема, это я вызвал конфликт слияния GIT, мне не хватало следующего кода в моем файле csproj

   <ItemGroup>
    <None Include="Service References\<SERVICE NAME>\Reference.svcmap">
      <Generator>WCF Proxy Generator</Generator>
      <LastGenOutput>Reference.cs</LastGenOutput>
    </None>
  </ItemGroup>

Я добавил это в строку Reference.svcmap

person J. Visser    schedule 09.11.2015

Еще одно решение таких проблем - путаница в ваших пространствах имен в проектах, на которые есть ссылки, которые оба используют службу. Так:

ProjectA - потребляет ServiceA

ProjectB - потребляет ServiceA, имеет ссылку на ProjectA

Если вы измените ServiceA и обновите ProjectB, иногда пространства имен могут измениться, чтобы посмотреть на версию службы ProjectA.

person Bigsby    schedule 07.01.2016