Значение недопустимо в соответствии с типом данных clientcontracttype
Я получаю сообщение об ошибке сказав:
недопустимый атрибут contract. значение недопустимо в соответствии с его тип данных "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" />
7 ответов
Я вижу, что этот вопрос довольно старый, и я не знаю, нашли ли вы решение к настоящему времени, но на всякий случай, это то, что я нашел, разрешит:
1) в обозревателе решений в папке ссылки на службы щелкните правой кнопкой мыши имя ссылки на службу с проблемой и выберите "Настроить ссылку на службу".
2) появится окно настройки ссылки на службу. Снимите флажок "повторно использовать типы в ссылочных сборках" и нажмите кнопку ОК кнопка.
3) перестроить проект.
после восстановления, предупреждение должно исчезнуть.
Я нашел этот вопрос, ищущий ту же ошибку в проекте веб-службы.
В моем случае эта ошибка произошла, когда я забыл добавить на 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);
}
та же ошибка возникает, когда отсутствует ссылка [в проекте с.config] к фактическому проекту / библиотеке, содержащей контракт интерфейса / службы...
в моем случае я изменил контракт на обслуживание, невольно удалив интерфейс, который был ключом к контракту на обслуживание.
недели спустя я нашел сломанного клиента с устаревшей ссылкой на службу. Поскольку удаление интерфейса было ошибкой, я вернул его обратно.
другим возможным решением было бы перестроить ссылку на службу в соответствии с новым контрактом на обслуживание (в моем случае это нарушило бы сборку проекта, так как ссылочный интерфейс были удалены).
спасибо OrangeKing89 для указывая мне в правильном направлении. Я знал, что контракт на обслуживание может быть изменен.
Я понимаю, что это старая нить, но в моем случае проблема заключалась в том, что кто-то в свое время добавил ссылку на сервис к проекту, а затем решил пойти другим путем, но запись осталась в интернете.config, поэтому просто удалите эту запись в web.config решил проблему для меня.
в моем случае у меня был конфликт имен.
при добавлении ссылки на службу visual studio создает класс клиента в качестве прокси-сервера, который реализует контракт, имя по умолчанию для этого прокси-сервера является именем службы, добавляемой "клиентом", поэтому, если ваша служба" MyService", класс клиента будет"MyServiceClient".
моя проблема заключалась в том, что мое имя проекта было "MyServiceClient" ! что и вызвало этот конфликт.
Я знаю, что этот вопрос древний, однако я столкнулся с той же проблемой с C# и Visual Studio 2017. Все работало и компилировалось отлично, тогда это было не так. Я понизил с .Net 4.6.2 до 4.6, так как SQLite v108 не поддерживает 108, тогда я получил эту ошибку и другие. Мне потребовалось некоторое время, чтобы найти решение. Я нигде не видел своего решения, поэтому я думал, что я размещаю его там на будущее.
Я удалил ссылку на службу, проверил все мои изменения в TFS, а затем добавил обратно ссылку на службу. Затем я построил решение и все снова было хорошо.
Я проверил приложение.config и другие файлы и все казалось прекрасным, просто не строились. Очевидно, VS2017 вводит информацию о версии .Net где-то, но не очевидно.
надеюсь, мое решение поможет кому-то.