Обновить ссылку на службу службы не работает

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

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

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

  • Отобразится диалог с заголовком "Обновление ссылки на службу" имя-ссылки ". В этом диалоговом окне есть индикатор выполнения.
  • Панель прогресса перемещается, а текст состояния в диалоговом окне изменяется на "Обновление конфигурации"
  • Панель прогресса перемещается немного больше, а текст состояния изменен на "Обновление конфигурации завершено"

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

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

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

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

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

Ответ 1

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

  • Размер контракта увеличился и теперь настолько велик, что конфигурация WCF не позволяет переносить его.
  • Новый класс добавлен в интерфейс WCF, и этот класс не помечен как сериализуемый.
  • Существует ошибка компиляции, которая останавливает создание кода и поэтому использует старую dll

Ответ 2

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

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

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

userPrincipalName value="[email protected]"

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

Два простых шага для решения этой проблемы:

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

  • Обновить ссылку службы.

Ответ 8

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

Ответ 9

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

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

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

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

  • Spades

Ответ 10

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

Ответ 11

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

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

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

Ответ 12

Другим решением этих проблем является то, что ваши пространства имен смешаны в ссылочных проектах, которые оба потребляют услугу. Итак:

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

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

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