Подтвердить что ты не робот

Недопустимый атрибут контракта для IMetadataExchange

Я обновил службу WCF до .NET Framework 4.5. После этого я заметил синюю квадратную строку вокруг IMetaDataExchange в файле конфигурации хоста.

Вот что выглядит раздел служб конфигурации:

<services>
    <service behaviorConfiguration="MyBehavior" name="MyServiceHost">
        <endpoint binding="wsHttpBinding" bindingConfiguration="noSecurityBinding" contract="MyServiceContract"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>

Когда я наводил указатель мыши на IMetaDataExchange, ошибка говорит:

Атрибут 'contract' недействителен. Значение "IMetadataExchange" недействительно в соответствии с его типом данных "serviceContractType". Ошибка ограничения Enumeration.

Служба работает нормально. Поэтому мне интересно, почему это недействительно.

4b9b3361

Ответ 1

Можете ли вы удалить файл .SUO(файл опций решения пользователей) после закрытия VS? Это будет reset кеш для компонента XMLEditor в VS и устранит вашу проблему.

Ответ 2

Я добавил System.ServiceModel в ссылки на проект и ушел

Ответ 3

У меня была аналогичная проблема: несколько атрибутов name и contract, отображаемых в App.Config моей службы WCF с ужасным синим squiggly и предупреждениями, отображаемыми в списке ошибок.

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

Ответ 4

Возможно, не ответ для OP, но другие с этой проблемой должны проверить, что [ServiceContract] объявлен для interface ваших служб, потому что это приводит к точной ошибке.

Ответ 5

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

Ответ 6

Если удаление файла .SUO не работает, проверьте свои ссылки, чтобы убедиться, что у вас есть ссылка System.ServiceModel. Это оказалось проблемой, которая привела меня сюда.

Ответ 7

Закрытие VS2013 Prof, удаление папки "obj" и перекомпиляция сделали эту работу для меня.

Ответ 8

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

У меня было другое решение, которое ссылалось на ту же службу, но не было никаких предупреждений в app.config. Я выполнил сравнение в блокноте ++ в разделе system.serviceModel файла app.config и выделил разницу между двумя атрибутами контракта.

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

Ответ 9

Я решил проблему. Если вы когда-либо изменили свой класс С# в Service1.cs и IService1.cs. Также обновите атрибут имени в элементе службы "<namespace> . <classname> " и атрибут контракта в конечном элементе "<namespace> . <classname> " в вашем App.config.

BTW. извините за плохой английский:)

Ответ 10

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

Ответ 11

Может быть, вы потеряли свои ссылки, когда вы обновили проект? Я заметил эту ошибку, когда мой проект, содержащий моего клиента, не имел ссылки на мой проект с моим сервисом.