WCF. Сервисные общие методы

Как использовать общие методы в службе wcf?

Я написал этот код:

[OperationContract] void AddItem(T item); 

Но я получаю следующую ошибку:

Тип ‘T’ не может быть экспортирован как тип схемы, потому что это открытый общий тип. Вы можете экспортировать только общий тип, если все его общие типы параметров являются фактическими типами.

Вы просто не можете. Это невозможно сделать, поскольку soap не поддерживает это. См. Эту статью , в которой упоминается, как обойти generics, создавая промежуточный локальный объект, который вызывается и передает объект перед вызовом операции WCF.

Вы не должны пытаться это сделать. В веб-службе с поддержкой SOAP все типы должны быть известны при публикации WSDL, чтобы клиенты могли генерировать прокси. Дженерики просто не существуют в спецификации SOAP. SOAP предназначен для обеспечения совместимости, а generics не существует на всех языках.

Как уже отмечали остальные, WCF и SOAP этого не поддерживают. Проблема в том, что все, что вы передаете между клиентом и сервером, должно быть выражено в документе схемы XML.

XML-схема поддерживает все обычные атомные типы, такие как string, int, datetime, и поддерживает сложные типы, состоящие из этих атомных типов, и поддерживает наследование.

Но XML-схема не поддерживает дженериков – и, следовательно, все, что вы обмениваете через WCF и SOAP, не может быть общим – вам нужно использовать только конкретные, не общие типы.

Я тоже не знаю об этом. Это ограничение, и вы должны жить с ним на данный момент.

Ограниченные типовые типы в контрактах данных могут использоваться, но должны быть параметрами определенных типов в контракте на обслуживание и в качестве заданных параметров типа с действительными контрактами данных

Ошибка говорит о том, что открытые типы не допускаются. Возможно, что-то вроде:

 [OperationContract] void AddItem(T item) where T : MyBaseType; 

Конечно, все унаследованные типы должны быть добавлены с помощью атрибута KnownType.

  • WCF + REST: Где данные запроса?
  • WCF - Решение о параметрах проектирования
  • Использование пользовательской десериализации тела WCF без изменения десериализации шаблона URI
  • Заменить стандартную сериализацию JSON по умолчанию WCF
  • Является ли .NET Remoting действительно устаревшим?
  • Вложенность в Parallel.ForEach
  • Как обрабатывать json DateTime, возвращаемые из служб данных WCF (OData)
  • Почему разработчик должен использовать веб-службы вместо прямых подключений к db?
  • .Net: Запуск кода при загрузке сборки
  • SOAP-клиент в .NET - ссылки или примеры?
  • WCF vs ASP.NET Web API
  • Давайте будем гением компьютера.