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