Ответ 1
WCF использует систему передачи сообщений - она сериализует вызовы и возвращает значения в XML-сериализованные сообщения.
Таким образом, он может иметь дело только с вещами, которые могут быть выражены в XML-схеме, - и интерфейсы не выражаются в XML-схеме.
Попробуйте использовать конкретный тип (a List<T>
или массив) - они должны работать нормально.
Есть несколько способов обойти это, но вы жертвуете любой совместимостью с не-NET-клиентами в процессе: вы можете использовать NetDataContractSerializer
(см. этот пост в блоге и статьи Аарона Сконнара по NetDataContractSerializer); с этим вы в основном встраиваете дополнительную информацию о времени выполнения .NET в свои сериализованные сообщения. Это сделает ваши сообщения большими, и любой клиент не .NET не поймет этого, но если вы контролируете оба конца провода, и оба конца - это только .NET, тогда это может работать как обходной путь.
Это также поддерживает использование интерфейсов в качестве параметров метода сервиса, но не уверен в типах возврата.
Обычно я этого не рекомендую, но в зависимости от вашей ситуации и ваших потребностей это может быть альтернативой для вас. Проверьте это!