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

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

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

[OperationContract]
void AddItem<T>(T item);

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

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

Ответы

Ответ 2

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

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

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