Можем ли мы отправить общий список (List<customObject>) в качестве параметра в WCF OperationContract?
Можем ли мы отправить общий список (список) в качестве параметра в WCF OperationContract?
Похоже, что единственный способ сделать это состоит в том, чтобы инкапсулировать List как DataMember внутри другого Class и указать класс как DataContract:
Но это не выглядит правильным для меня. Есть ли другой путь?
EDIT1:
Предполагаемая Подпись:
[OperationContract]
List<int> OperationName(List<CustomObject> objects);
Это преобразуется в CustomObject[] на клиенте. В настоящее время я передаю CustomObject[] от моего клиента, и он работает нормально, но я хочу знать, почему я не могу передать
List <CustomObject>
что дает мне ошибку компиляции, говоря, что нет перегруженной версии функции, которая принимает указанные параметры (ошибка несоответствия типов)
РЕДАКТИРОВАТЬ 2:
Смежные вопросы:
1) Я должен иметь возможность контролировать это из самой службы. Что если я открою свой сервис всему миру, и wsdl/Proxy - единственный способ узнать подпись моего OperationContract?
2) Что если я захочу использовать как System.Array, так и System.Generic.List в разных контрактах на обслуживание в одном и том же контракте на обслуживание?
1 ответ
Список является расширенным типом и может быть недоступен для всех парадигм программирования. Массив, для сравнения, возможно, доступен во всей парадигме программирования. следовательно, по умолчанию перевод упадет в массив для прокси wsdl
Теперь в этом случае, если вы уверены, что вашим клиентом является.Net, вы можете изменить клиента на использование List. Так как сервис не знает, что такое язык программирования клиента, текущий дизайн svcutil, где клиент решает, использует ли он список или массив, является правильным. Если вы сделаете этот параметр доступным в сервисе, вы исключите клиентов, у которых нет понятия списка.
Возвращаясь ко второму вопросу, поскольку имена контрактов на операции отличаются, вы сможете использовать массив и список в одном сервисе. Также обратите внимание, что концепции ООП ограничены в SOA, что означает, что у вас не может быть полиморфных методов.
следующий вопрос содержит более подробную информацию о ООП и SOA