Значение недействительно в соответствии с его типом данных "clientcontracttype"

Я получаю сообщение об ошибке:

Атрибут контракта недействителен. значение недействительно в соответствии с его тип данных 'clientcontracttype'

Ниже приведена конфигурация конечной точки в web.config этого приложения WCF. Я использую .NET Framework 4.5 и Visual Studio 2012. Я подтвердил, что контракт OnlineReporting.Core.Contracts.IReportingInternalWcfPortal уже существует.

<endpoint address="http://localhost:63817/ReportingInternalWcfPortal.svc" 
          binding="basicHttpBinding" 
          bindingConfiguration="BasicHttpBinding" 
          contract="OnlineReporting.Core.Contracts.IReportingInternalWcfPortal" 
          name="ReportingInternalPortal" />

Ответы

Ответ 1

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

1) В обозревателе решений в папке "Ссылки на службы" щелкните правой кнопкой мыши имя ссылки службы с проблемой и выберите "Настроить сервисную ссылку".

2) Появится окно "Параметры ссылки на службу". Снимите флажок с надписью "Типы повторного использования в ссылочных сборках" и нажмите кнопку "ОК".

3) Перестройте проект.

После восстановления предупреждение должно исчезнуть.

Ответ 2

Я нашел этот вопрос для поиска той же ошибки в проекте веб-службы.

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

Как только я добавил его, ошибка исчезла.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace MyService
{
    [ServiceContract]
    public interface IServiceBase
    {
        [OperationContract]
        IEnumerable<ListItem> GetListItems();

        [OperationContract]
        void SaveListItems(IEnumerable<ListItem> listItems);
    }

Ответ 3

Такая же ошибка возникает, когда вам не хватает ссылки [в проекте с .config] на фактический проект/библиотеку, содержащую контракт интерфейса/услуги...

Ответ 4

В моем случае я изменил Сервисный контракт, невольно удалив интерфейс, который был ключевым для Сервисного договора.

Через несколько недель я обнаружил сломанный клиент с устаревшей ссылкой на службу. Поскольку удаление интерфейса было ошибкой, я вернул его.

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

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

Ответ 5

В моем случае у меня был конфликт имен.

Когда вы добавляете ссылку на службу, visual studio генерирует клиентский класс в качестве прокси-сервера, который реализует контракт, имя по умолчанию для этого прокси-сервера - это имя службы, добавленной "Клиентом", поэтому, если ваша служба "MyService" клиентский класс будет "MyServiceClient".

Моя проблема заключалась в том, что мое название проекта было "MyServiceClient"! что вызвало этот конфликт.

Ответ 6

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

Ответ 7

Я знаю, что этот вопрос древний, но я столкнулся с той же проблемой с С# и Visual Studio 2017. Все работало и компилировалось нормально, тогда не было. Я понизил версию .Net 4.6.2 до 4.6, так как SQLite v108 не поддерживает 108, затем я получил эту ошибку и другие. Мне понадобилось немного времени, чтобы найти решение. Я нигде не видел своего решения, поэтому подумал, что поместу его там на будущее.

Я удалил свою ссылку на сервис, проверил все мои изменения в TFS и добавил обратно ссылку на сервис. Затем я построил решение, и все снова было хорошо.

Я проверил app.config и другие файлы и все вроде нормально, просто не собрал. Очевидно, что VS2017 вводит информацию о версии .Net где-то, но не очевидно.

Надеюсь, мое решение кому-нибудь поможет.

Ответ 8

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

  • Добавьте ссылку на проект, который содержит нужный веб-сервер. Сделайте это на вкладке "Проекты".
  • Настройте ваш основной сервис web.config следующим образом:

    <services>
      <service name="MyCurrentProject.Service" behaviorConfiguration="ConfigRest">
        <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="restServicehttp" name="RestEndpoint" bindingName="webHttpBinding" contract="MyCurrentProject.Service"/>
      </service>
      <service name="AnotherPoject.Service" behaviorConfiguration="ConfigRest">
        <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="restServicehttp" name="RestEndpoint" bindingName="webHttpBinding" contract="AnotherPoject.Service"/>
      </service>
    

Ответ 9

В моем случае это был правильный код, интерфейс имел правильный тег [ServiceContract], а конечная точка .config имела правильное пространство имен интерфейса, но проект с интерфейсом нужно было перекомпилировать, чтобы другой проект, имеющий Файл .config получит последнюю версию .dll первого проекта в своей папке bin. Так что перекомпилируйте код - это ответ, чтобы сделать визуальную студию счастливой.