Как я могу использовать общие методы в wcf сервисе?
Я написал этот код:
[OperationContract]
void AddItem<T>(T item);
Но я получаю следующую Ошибку:
Тип 'T' не может быть экспортирован как тип схемы, потому что это - открытый универсальный тип. Можно только экспортировать универсальный тип, если все его универсальные типы параметра являются фактическими типами.
Вы просто не можете. Это невозможно, так как мыло этого не поддерживает. См. Эту статью , в которой упоминается, как обойти универсальные шаблоны, создав промежуточный локальный объект, который вызывается и преобразует объект перед вызовом операции WCF.
Вам не следует пытаться сделать это. В веб-сервисе с поддержкой SOAP все типы должны быть известны при публикации WSDL, чтобы клиенты могли генерировать прокси. Дженерики просто не существуют в спецификации SOAP. SOAP предназначен для взаимодействия, а дженерики существуют не во всех языках.
Как все остальные уже упомянули, WCF и SOAP не поддерживают этого. Проблема заключается в следующем: все, что вы передаете туда и обратно между клиентом и сервером, должно быть выражено в документе XML-схемы.
XML-схема поддерживает все обычные атомарные типы, такие как string, int, datetime - и она поддерживает сложные типы, состоящие из этих атомарных типов, и она поддерживает наследование.
Но XML schema не имеет поддержки generics - и, таким образом, все, чем вы обмениваетесь через WCF и SOAP, не может быть generic - вам нужно использовать только конкретные, не generic типы.
Я также не знаю никакого способа обойти это. Это ограничение, и вам придется пока с ним жить.