Обновить ссылку на службу службы не работает
Я использую 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).
После этого обновите ссылку на службу в клиентском приложении, и изменения будут очевидны.
Ответ 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.