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

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

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

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

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

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

17
задан Ryan Gates 27 June 2014 в 17:50
поделиться

3 ответа

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

31
ответ дан 30 November 2019 в 11:17
поделиться

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

7
ответ дан 30 November 2019 в 11:17
поделиться

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

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

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

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

2
ответ дан 30 November 2019 в 11:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: