Значение недействительно в соответствии с его типом данных "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. Так что перекомпилируйте код - это ответ, чтобы сделать визуальную студию счастливой.